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

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



Память: 0.46 MB
Время: 0.023 c
4-1103546335
grigory
2004-12-20 15:38
2005.02.06
Поиск файла в директории!


3-1105360995
syte_ser78
2005-01-10 15:43
2005.02.06
Сохранение изменений в таблице


3-1105376222
chir
2005-01-10 19:57
2005.02.06
OnChange - кто вызывает?


6-1101379631
Неизвестный
2004-11-25 13:47
2005.02.06
Ошибка 10061


1-1106482270
4eshka)
2005-01-23 15:11
2005.02.06
Проблема при рабете с потоками




   Наверх