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

запись добавляется но вот значение одного из полей которое IDENTITY остается пустым, хотя в базе оно уже не пустое, в чем проблема?
...
Рейтинг: 0 / 0
06.01.2004, 02:06
    #32369011
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не возращаются значения INDENTITY после INSERT
создай sp
в ее конце select @@identity
запрос открывай оупеном и читай значение fields [0]
и потом - в данной модели будет максимальная засчита - если вася пупкин начнет буянить - мона просто запрет на ран sp поставить и все ....
соответственно если он и дальше сделать sp для вставки и удаления и килять неблагонадежных юзеров - особенно если операция важная ...
и вааще - юзера тока sp должны ранить и данные из вьюхов юзать - делфя ето юрезувмордие - sp - логика и т.п.
...
Рейтинг: 0 / 0
06.01.2004, 07:06
    #32369041
Mik Prokoshin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не возращаются значения INDENTITY после INSERT
Как заколебали эти черно-белые взгляды на мир....
Лучше просто посмотрите здесь
...
Рейтинг: 0 / 0
06.01.2004, 09:01
    #32369075
Berg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не возращаются значения INDENTITY после INSERT
Создай ХП, в ее конце (после INSERT) делай RETURN SCOPE_IDENTITY()
...
Рейтинг: 0 / 0
06.01.2004, 10:13
    #32369107
Tаrantino
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не возращаются значения INDENTITY после INSERT
Да я и без SP могу @@IDENTITY получить, вопрос в том почему оно автоматически не возвращается?
...
Рейтинг: 0 / 0
06.01.2004, 10:42
    #32369134
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не возращаются значения INDENTITY после INSERT
А с чего ты взял, что оно должно автоматически возвращаться?
...
Рейтинг: 0 / 0
06.01.2004, 10:51
    #32369151
Tаrantino
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не возращаются значения INDENTITY после INSERT
Было бы логично предположить что-должны, тем более если использовать TADOQuery то оно возвращается
...
Рейтинг: 0 / 0
06.01.2004, 10:53
    #32369154
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не возращаются значения INDENTITY после INSERT
ну пока жи как а , мы посмотим ...
____
...
Рейтинг: 0 / 0
06.01.2004, 11:30
    #32369228
Tаrantino
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не возращаются значения INDENTITY после INSERT
легко: создаешь табличку с полем IDENTITY
создаем формочку туда TADOQuery, TDATASource, TDBGrid
открываем TADOQuery, ну и в рантайм, добавь запись поле IDENTITY заполниться автоматически, кстати включи Profiler и посмотри что идет с клиента
...
Рейтинг: 0 / 0
06.01.2004, 14:14
    #32369459
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не возращаются значения INDENTITY после INSERT
запрос батенька, на то и запрос ...
не хочу вас огорчать, но вы НИКОГДА двигаясь в предложенном вами направлении не получите свой злосчастный identity ...
...
Рейтинг: 0 / 0
06.01.2004, 14:21
    #32369471
Tаrantino
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не возращаются значения INDENTITY после INSERT
О каком направлении идет речь?
...
Рейтинг: 0 / 0
06.01.2004, 14:22
    #32369474
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не возращаются значения INDENTITY после INSERT
TADOQuery.
...
Рейтинг: 0 / 0
06.01.2004, 14:44
    #32369514
Tаrantino
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не возращаются значения INDENTITY после INSERT
Если я использую просто TADOQutry то как раз значение IDENTITY возвращается автоматически
...
Рейтинг: 0 / 0
06.01.2004, 15:40
    #32369592
Mik Prokoshin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не возращаются значения INDENTITY после INSERT
Цитата из приведенной мной ссылки:
>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
06.01.2004, 16:04
    #32369620
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не возращаются значения INDENTITY после INSERT
авторADO возвращает identity на клиента автоматически давным давно - с версии 2.1 по-моему... (У MS есть Q по этому поводу). TADO* также умеет обновлять у себя identity поле (по крайней мере у меня в D7).

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

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

Понятно значит в этих событиях надо самому вытасикать значение IDENTITY ну что-же будем вытаскивать, спасибо!
...
Рейтинг: 0 / 0
06.01.2004, 17:35
    #32369717
Mik Prokoshin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не возращаются значения INDENTITY после INSERT
Зачем чего-то вытаскивать ? Таки вынудили написать код... :-)
Код: 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
06.01.2004, 17:50
    #32369730
Tаrantino
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не возращаются значения INDENTITY после INSERT
при обработке события говорит что идентити поле кэннот би модифиелд...
...
Рейтинг: 0 / 0
06.01.2004, 18:54
    #32369774
Mik Prokoshin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не возращаются значения INDENTITY после INSERT
Угу. Очередная фенька Багланда, забыл я сразу сказать. Поле IDENTITY в ADOQuery должно быть TIntegerField или еще какое Int, но только не TAutoIncField.
...
Рейтинг: 0 / 0
08.01.2004, 10:10
    #32370196
Tаrantino
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не возращаются значения INDENTITY после INSERT
Дейсвительно теперь ошибка не возникает, но поле все равно NULL
...
Рейтинг: 0 / 0
08.01.2004, 12:01
    #32370311
Mik Prokoshin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не возращаются значения INDENTITY после INSERT
Тэкс. Что значит поле null ? В обработчик ProviderAfterUpdateRecord попадаем или не попадаем ? Что присваивается в обработчике (значение identity правильно ли присвоилось для ADOQuery) ? Как сказано в посте выше poPropagateChanges установлено ?
...
Рейтинг: 0 / 0
08.01.2004, 12:11
    #32370334
Tаrantino
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не возращаются значения INDENTITY после INSERT
Попадаем, значение установлено

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


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