Взяв за основу статью Работа с клиентским набором данных
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;
// Заполняю поле ID фиктивным значением (реальное присвоится на сервере)
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)
сначала выдается сообщение от Oracle: ORA-00942 table or view does not exist, а затем
"Unable to find record. No key specified".
Подскажите пожалуйста, как победить эту проблему?
Я подозреваю scdsRegions не видит таблицу описаную синонимом regions, которая находится в другой схеме. Хотя причина может быть совсем в другом.
Одним словом, надеюсь на Вашу помощь.
Спасибо