![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TClientDataSet и автоинкриментые поля(MS Access, MS SQL Server)
salexn © (2005-12-06 12:24:00)Может ли TClientDataSet автоматически обновлять значения автоинкриментых полей MS Access и MS SQL Server? По "легенде" хэлпа - может. Кто-нить победил эту проблемку?
Nikolay M. (2005-12-06 17:49:00) [1]
> Anatoly Podgoretsky © (06.12.05 16:41) [13]
> Вопрос документирован, находится в многичисленных FAQ
Для человека, который сам недавно спрашивал про неоднократно задокументированный @@IDENTITY в АДО, звучит более чем самонадеянно.
Nikolay M. (2005-12-06 16:43:00) [2]
> как же быть с Access?
http://www.sql.ru/faq/faq_topic.aspx?fid=214
Q8.
Anatoly Podgoretsky (2005-12-06 16:41:00) [3]Вопрос документирован, находится в многичисленных FAQ
msguns (2005-12-06 16:31:00) [4]>Это АБСОЛЮТНО нетривиальный вопрос.
Вопрос многократнообсуждался на форуме - достаточно полазать по архивам.
В акцесе НЕТ ВОЗМОЖНОСТИ узнать значение автоинкремента ДО вставки (или СРАЗУ ПОСЛЕ, что по сути одно и то же). Существует единственный способ: Select MAX(ID)+1, который, ясное дело, страдает "локальностью".
salexn (2005-12-06 16:27:00) [5]Так что? Ответтов не будет?
>модератор
А за что этот пост перенесли в начинающие?
Это АБСОЛЮТНО нетривиальный вопрос.
salexn (2005-12-06 16:27:00) [6]Удалено модератором
Примечание: Действия модератора не обсуждаются, и причем тут вопрос, это относится к вопрошающим, ты пока начинающий и очень начинающий
salexn (2005-12-06 15:09:00) [7]ок. Если с MSSQL еще поняттно(SELECT @@IDENTITY), то как же быть с Access?
И еще как получить IDENTITY если идет "массовый" insert, а ApplyUpdates вызывается только 1 раз? Есть конечно вариант Close/Open.
Anatoly Podgoretsky (2005-12-06 14:33:00) [8]salexn (06.12.05 14:16) [6]
СРАЗУ ПОСЛЕ в условиях многопользовательской работы. Рассказывать об SELECT @@IDENTITY не нужно. Я НЕ ДОЛЖЕН обращаться к серверу(SQL Server или AppServer) для получения значения. Хотелось бы сделать это СРЕДСТВАМИTClientDataSet + DataSetProvider.
Откуда же тогда возьмется несущесвуещее значение?
Оно появляется только после вставки на сервере
Nikolay M. (2005-12-06 14:26:00) [9]
> SELECT @@IDENTITY не нужно.
+
> НЕ ДОЛЖЕН обращаться к серверу(SQL Server или AppServer)
> для получения значения
+
> Получение значения ДО ВСТАВКИ также не подходит
= невозможно.
Btw, интересно было бы узнать, почему перечисленные варианты неприменимы.
> аналогично тому как это сделано в ADO
Угу, АДО - это такая волшебная штука, которая делает невозможные вещи возможными. Не пожалей 5 минут времени, сделай программульку, в которой АДО "получает значение автоинкремента" и посмотри профайлером, что в этот момент происходит на SQL-сервере.
salexn (2005-12-06 14:16:00) [10]>msguns
СРАЗУ ПОСЛЕ в условиях многопользовательской работы. Рассказывать об SELECT @@IDENTITY не нужно. Я НЕ ДОЛЖЕНобращаться к серверу(SQL Server или AppServer) для получения значения. Хотелось бы сделать это СРЕДСТВАМИTClientDataSet + DataSetProvider.
Получение значения ДО ВСТАВКИ также не подходит. Вопрос именно в том, можно ли средствами TClientDataSet + DataSetProvider получить данные о значении автоинкрементногополя(аналогично тому как это сделано в ADO).
msguns (2005-12-06 14:01:00) [11]Тебе нужно узнать значение автоинкремента ДО вставки НОВОЙ записи или СРАЗУ ПОСЛЕ ?
salexn (2005-12-06 13:41:00) [12]после Post в ADO сраэу появляется значение этого поля(Автоинкрементного). Можно ли добиться такого же поведения от TClientDataSet + DataSetProvider?
msguns (2005-12-06 13:38:00) [13]Что значит "автоматически обновлять значения автоинкриментых полей" ?
Автоинкременты на то и авто, что они НЕ ОБНОВЛЯЮТСЯ.
Или я что-то не понял ?
salexn (2005-12-06 13:33:00) [14]Решить проблему можно?
msguns (2005-12-06 12:47:00) [15]А причем тут CDS, если с данными БД непосредственно работает провайдер ?