Форум: "Базы";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];
ВнизПроблема вычитки 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.043 c