Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.012 c
7-46154
moor38
2002-09-12 12:04
2002.11.14
Автозагрузка


6-46018
{bas}
2002-09-04 16:48
2002.11.14
Asynchronous socket error 10053


3-45695
DDS
2002-10-28 10:37
2002.11.14
Как програмно установить BDE


1-45866
Брат
2002-11-05 15:22
2002.11.14
Как динамически создать на форме компонент FileListBox?


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




   Наверх