Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.11.14;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.008 c
1-45973
DKalinin
2002-11-03 16:23
2002.11.14
почему ToolButton при задании ему свойства Action становится недо


14-46085
KIR
2002-10-19 01:08
2002.11.14
RxLib 2.75d6 Что-то не хочет ставиться


1-45994
Alcogol
2002-11-04 19:48
2002.11.14
Распознавание текста, помогите пожалуйста!


14-46142
vopros
2002-10-28 12:26
2002.11.14
Акция.


1-45955
Paul 'Spawn' Rysevets
2002-11-03 19:30
2002.11.14
Помогите найти программу.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский