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

Вниз

Проблема вычитки identity полей из БД   Найти похожие ветки 

 
Roter   (2005-01-04 12:59) [0]

При использовании трёхуровневой архитектуры есть проблема вычитки значений identity полей из таблици при вставке новых записей.
например: существует ClientDataSet с Provider"ом, который привязан к ADOQuery с запросом "select ID, NAME from Table1" (поле ID имеет тип Identity). Когда я через ClientDataSet вставляю новую запись и делаю ApplyUpdates, которая завершается успешно, значение в поле "ID" остаётся неизветным. Если проредактировать ету запись, появляется сообщение о ошибке в роде "Record not found ...".
Свойство UpdateMode у Provider"а имеет значение upWhereKeyOnly. Поле ID на ADOQuery имеет значение ключа (ProviderFlags = pfInKey).
Как обеспечить вычитку значения поля Identity в этой ситуации из БД, для последующего использования?


 
Nikolay M. ©   (2005-01-04 13:27) [1]

SELECT @@IDENTITY
?


 
Roter   (2005-01-04 13:59) [2]

И где мне делать этот запрос?
Может есть какието универсальные методы? Ведь если использовать этот метод "SELECT @@IDENTITY" нужно будет писать какието обработчики на какихто событиях? при етом для каждого нового DataSet"а ... и как это вставлять в TClientDataSet?


 
Nikolay M. ©   (2005-01-04 14:24) [3]


> Roter   (04.01.05 13:59) [2]
> И где мне делать этот запрос?

Это уже второй вопрос. Первый был - "как?" :-)
Выполнять нужно в том же коннекте, в котором был выполнен INSERT. Вставлять можно так: у ключевого поля убрать флаг pfInUpdate, сразу после инсерта в, например, CDS.AfterInsert вызвать свой метод сервера, названный, например, CDS.AppServer.GetLastIdentity (надеюсь, что он делает, писать не нужно) и присвоить его ключевому полю:
CDSID.AsInteger := CDS.AppServer.GetLastIdentity;
Но я лично стараюсь единообразно делать так, чтобы значение ID было известно на клиенте ДО непосредственной вставки в таблицу на сервере, т.к. иногда есть необходимость в одной транзакции вставить записи в подчиненные таблицы. Вариант, как это можно сделать, описан тут:
http://rsdn.ru/article/db/midas_migration.xml#EDHA


 
Roter   (2005-01-04 15:31) [4]

Спасибо за вразумильтельный ответ! Помощь оказалась полезной!



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

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

Наверх




Память: 0.47 MB
Время: 0.025 c
4-1103320145
pika
2004-12-18 00:49
2005.02.06
как спрятать свою прогу ???


3-1104332543
Dysan
2004-12-29 18:02
2005.02.06
TCPServer и доступ к dbf


4-1103014178
Delphi5.01
2004-12-14 11:49
2005.02.06
хочу сделать у этой формы тень


3-1105367361
AlexTregubov
2005-01-10 17:29
2005.02.06
функции SQL


1-1106259842
Bobby Digital
2005-01-21 01:24
2005.02.06
StringGird pt2