Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.14;
Скачать: CL | DM;

Вниз

Работа с клиентским набором данных   Найти похожие ветки 

 
kalan ©   (2002-10-25 04:37) [0]

Взяв за основу статью Работа с клиентским набором данных http://delphi.mastak.ru/articles/kylix1/index2.html
создал форму на которой расположены: (из dbExpress)
TSQLConnection scDB (для связи с Oracle)
TSQLClientDataSet scdsRegions (CommandType ctQuery; CommandText select * from regions)
regions - public synonym, т.е в моей схеме эта таблица не присутствует, но TSQLClientDataSet отрабатывает запрос корректно
структура regions: ID number(2) not null,
REGION varchar2(30) not null,
primary key (id);
при добавлении новой записи отрабатывает триггер вставляющий очередное значение генератора (sequence), одним словом автоинкрементное поле.

глобальная переменная
var id: Integer;

procedure TDataModule1.scdsRegionsAfterPost(DataSet: TDataSet);
begin
id := -1;
end;

procedure DataModule1.scdsRegionsBeforePost(DataSet: TDataSet);
begin
if scdsRegionsID.IsNull then
begin
scdsRegionsID.Value := id;
Dec(id);
end;


procedure DataModule1.scdsRegionsBeforeRefresh(DataSet: TDataSet);
begin
if scdsRegions.ChangeCount > 0 then
if scdsRegions.ApplyUpdates(0) > 0 then
Abort
else
id := -1;
end;

Для ввода и редактирования значений использую компонент TDBEdit, а для фиксации или отмены изменений TBitBtn, на которые навесил следующие события:

procedure TForm1.btnOkRegClick(Sender: TObject);
begin
DataModule1.scdsRegions.Post;
DataModule1.scdsRegions.RefreshRecord;
end;

procedure TForm1.btnCancelRegClick(Sender: TObject);
begin
DataModule1.scdsRegions.CancelUpdates;
end;

Теперь о главном.
Коннект с Oracle без проблем. Выбор значений в DBGrid из scdsRegions без вопросов.
Но как только я хочу добавить новую запись и занести ее на сервер выдается сообщение:
"Unable to find record. No key specified".
Если в procedure TForm1.btnOkRegClick(Sender: TObject);
вместо DataModule1.scdsRegions.RefreshRecord; использовать DataModule1.scdsRegions.Refresh;
то при выполнении:
if scdsRegions.ApplyUpdates(0) > 0 (из procedure DataModule1.scdsRegionsBeforeRefresh(DataSet: TDataSet);
сначала выдается сообщение от Oracle: ORA-00942 table or view does not exist, а затем "Unable to find record. No key specified".
Подскажите пожалуйста, как победить эту проблему?
Я подозреваю scdsRegions не видит таблицу описаную синонимом regiond, которая находится в другой схеме. Хотя причина может быть совсем в другом.
Одним словом, надеюсь на Вашу помощь.
Спасибо


 
roottim   (2002-10-25 08:21) [1]

помоему для RefreshRecord необходима команда DML типа RefreshSQL, где необходимо вписать условие выборки этой строки по ключевым полям таблицы.
по крайней мере так работает ODAC...



Страницы: 1 вся ветка

Текущий архив: 2002.11.14;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.019 c
1-45979
AlexanderSK
2002-11-04 17:37
2002.11.14
Выгрузка DLL


3-45709
kucherav
2002-10-24 00:54
2002.11.14
Помогите! Ничего не понимаю!!!


1-45986
Дмитрий К.К.
2002-11-02 05:34
2002.11.14
Мастерам деревьев, часть 2: TTreeNodes.GetNode


14-46069
turonix
2002-10-25 15:50
2002.11.14
Где можно скачать Delphi7


1-45840
Dmitry F.
2002-11-03 17:16
2002.11.14
Как сохранить массив в файл?