powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / не возращаются значения INDENTITY после INSERT
25 сообщений из 41, страница 1 из 2
не возращаются значения INDENTITY после INSERT
    #32368805
Фотография Tаrantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итак база MS SQL 2000, есть TADOQUERY, TDATASETPROVIDER и TCLIENTDATASET так вот говорю TCLIENTDATASET.INSERT, далее TCLIENTDATASET.POST и в конце TCLIENTDATASET.ApplyUpdates(-1);

запись добавляется но вот значение одного из полей которое IDENTITY остается пустым, хотя в базе оно уже не пустое, в чем проблема?
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32369011
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
создай sp
в ее конце select @@identity
запрос открывай оупеном и читай значение fields [0]
и потом - в данной модели будет максимальная засчита - если вася пупкин начнет буянить - мона просто запрет на ран sp поставить и все ....
соответственно если он и дальше сделать sp для вставки и удаления и килять неблагонадежных юзеров - особенно если операция важная ...
и вааще - юзера тока sp должны ранить и данные из вьюхов юзать - делфя ето юрезувмордие - sp - логика и т.п.
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32369041
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как заколебали эти черно-белые взгляды на мир....
Лучше просто посмотрите здесь
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32369075
Berg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создай ХП, в ее конце (после INSERT) делай RETURN SCOPE_IDENTITY()
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32369107
Фотография Tаrantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я и без SP могу @@IDENTITY получить, вопрос в том почему оно автоматически не возвращается?
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32369134
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А с чего ты взял, что оно должно автоматически возвращаться?
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32369151
Фотография Tаrantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Было бы логично предположить что-должны, тем более если использовать TADOQuery то оно возвращается
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32369154
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну пока жи как а , мы посмотим ...
____
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32369228
Фотография Tаrantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
легко: создаешь табличку с полем IDENTITY
создаем формочку туда TADOQuery, TDATASource, TDBGrid
открываем TADOQuery, ну и в рантайм, добавь запись поле IDENTITY заполниться автоматически, кстати включи Profiler и посмотри что идет с клиента
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32369459
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
запрос батенька, на то и запрос ...
не хочу вас огорчать, но вы НИКОГДА двигаясь в предложенном вами направлении не получите свой злосчастный identity ...
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32369471
Фотография Tаrantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О каком направлении идет речь?
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32369474
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TADOQuery.
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32369514
Фотография Tаrantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я использую просто TADOQutry то как раз значение IDENTITY возвращается автоматически
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32369592
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Цитата из приведенной мной ссылки:
>Note: Note the call to ClientDataset.Refresh in the code above. It is used to retrieve the autoinc values with the values that were assigned to the table into the ClientDataset. The TDatasetProvider.Options.poAutoRefresh flag should make the call to Refresh obsolete when it gets implemented. Also, if your database server supports it (e.g. InterBase generators or MS SQL @@identity), you can set DatasetProvider.Options.poPropogateChanges to true and set DeltaDS.FieldByName('ID').NewValue to the new autoinc value in DatasetProvider.BeforeUpdateRecord or DatasetProvider.AfterUpdateRecord. Since we can't accomplish this with a simple one-table Paradox sample, we will use the Refresh method instead. You could also set up a separate key table that keeps track of the IDs assigned to a specific table and use the same technique.
А сам по себе provider конечно не знает, что в датасете что-то изменилось...

2 KirillovA:
Мозги человеку не пудрите, да ?! :-)
ADO возвращает identity на клиента автоматически давным давно - с версии 2.1 по-моему... (У MS есть Q по этому поводу). TADO* также умеет обновлять у себя identity поле (по крайней мере у меня в D7).
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32369620
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторADO возвращает identity на клиента автоматически давным давно - с версии 2.1 по-моему... (У MS есть Q по этому поводу). TADO* также умеет обновлять у себя identity поле (по крайней мере у меня в D7).

и даже в режиме BatchUpdates?
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32369646
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Естественно нет - сами-то подумайте - batchupdate есть единая неделимая операция, в т.ч. вставки пачки записей. В этом случае только requery поможет. Но для ХП со вставкой пачки записей тоже надо свой механизм передачи клиенту пачки identity делать...
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32369673
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕстественно нет - сами-то подумайте - batchupdate

Спасибо, а то я не знал. . А вы не смотрели профайлером, как ADO возвращает значение. Посмотрите, будет очень любопытно. Или проведите простой эксперимент, когда у вас на таблице, которую вы редактируете через TADOQuery (где инкрементое поле вытаскивается автоматом), навешен триггер FOR INSERT, который вставляет запись в другую таблицу с identity. Вы получите лажу в новом значении identity.
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32369687
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Естественно, что значение identity получается ADO как SELECT @@IDENTITY, MS в Q-шке об этом так и пишет. Дык если ЭТО уже реализовано, зачем самому ваять то же самое...
А если надо вставлять попутно записи еще в другие таблицы - тогда уж определяться надо - возвращать на место правильный identity в триггере (что IMHO более правильно) или использовать какие-то другие методы (типа ХП).
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32369696
Фотография Tаrantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mik ProkoshinА сам по себе provider конечно не знает, что в датасете что-то изменилось...

Понятно значит в этих событиях надо самому вытасикать значение IDENTITY ну что-же будем вытаскивать, спасибо!
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32369717
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем чего-то вытаскивать ? Таки вынудили написать код... :-)
Код: plaintext
1.
2.
3.
4.
5.
6.
procedure TForm1.ProviderAfterUpdateRecord(Sender: TObject;
  SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
  UpdateKind: TUpdateKind);
begin
  if UpdateKind=ukInsert then
      DeltaDS.FieldByName('PKId').NewValue := SourceDS.FieldByName('PKId').Value;
end;
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32369730
Фотография Tаrantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при обработке события говорит что идентити поле кэннот би модифиелд...
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32369774
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Угу. Очередная фенька Багланда, забыл я сразу сказать. Поле IDENTITY в ADOQuery должно быть TIntegerField или еще какое Int, но только не TAutoIncField.
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32370196
Фотография Tаrantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дейсвительно теперь ошибка не возникает, но поле все равно NULL
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32370311
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тэкс. Что значит поле null ? В обработчик ProviderAfterUpdateRecord попадаем или не попадаем ? Что присваивается в обработчике (значение identity правильно ли присвоилось для ADOQuery) ? Как сказано в посте выше poPropagateChanges установлено ?
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32370334
Фотография Tаrantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попадаем, значение установлено

и вот тут SourceDS.FieldByName('PKId').Value значение NULL, смотрел что идет с клиента на сервер, так клиент не отправляет на сервер SELECT @@IDENTITY
...
Рейтинг: 0 / 0
25 сообщений из 41, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / не возращаются значения INDENTITY после INSERT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]