Главная страница
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.013 c
6-46032
Nubie
2002-07-15 15:13
2002.11.14
Кто работал с почтой?


3-45759
niiot
2002-10-24 18:32
2002.11.14
Вопросы по базам данных


14-46135
ded_di
2002-10-25 14:35
2002.11.14
Есть знатоки Apache


3-45725
SABBATH
2002-10-24 14:40
2002.11.14
DBGrid и строки!!!!!!!!!!!


6-46025
KarlovAF
2002-09-05 10:13
2002.11.14
Перехват сообщений...