Главная страница
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.48 MB
Время: 0.027 c
4-1103011815
Архитектор
2004-12-14 11:10
2005.02.06
InternetSetOption


4-1103264103
SiDoff
2004-12-17 09:15
2005.02.06
Запрет удаления в Win 98, pop up меню ....


1-1106467912
4eshka)
2005-01-23 11:11
2005.02.06
Программа глючит через 1 год работы


1-1106667069
serg128
2005-01-25 18:31
2005.02.06
Как получить прозрачную форму, но всё, что на ней - видимое?


1-1106297005
ShimON
2005-01-21 11:43
2005.02.06
Какое событие обработать??