powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / не возращаются значения INDENTITY после INSERT
41 сообщений из 41, показаны все 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
не возращаются значения INDENTITY после INSERT
    #32370346
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наканецто ...
бились бились и докатились до юзания SP...
заюзай через SP - гемора меньше и глюков тоже ... особливо при перепрыгивании с версию на версию делфей ...
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32370404
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблемы - наверняка в настройках ADOQuery. Должно быть clUseClient, ltOptimistic. Если Delphi5, то не забудьте про ADO Update. Вообще, лучше использовать TBetterADORecordset - там весьма много глюков подправлено...

2 KirillovA:
Исходя из Ваших соображений: чтобы гемора меньше - надо вообще про ублюдочный TADOxx забывать и свой враппер на ADO Recordset делать. А еще лучше через native ODBC :-)
Можно, но сложно...
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32370417
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неа -
1. сделать SP
2. сгенерить строку для передачи на сервер
3. передать и забить на проблему ...
адо слишком много за программера додумывает - а ето не есть гут...
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32370422
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ишо ...
открыть юзеру доступ к табле на инсерт/апдейт/детелет записей - ето для безопасности не есть гут ... особенно когда юзеров очень много ...
у нас в конторе был один умник - открыл через акцесс со своим аккаунтом и каков наделал ...
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32370435
Фотография Tаrantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настройки точно такие-же как ты и указал, а что за TBetterADORecordset ?
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32370530
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так, вспомнил еще одну фишку ....
Provider.ResolvetoDataset должно стоять True, иначе "умная" связка провайдер - TADO... формирует непосредственно запросы на сервер (через ADOCommand). Естественно, в этом случае (ResolvetoDataset=False) все измененные серверной логикой поля должны получаться ручками...
Про BetterADO поищите на форуме.

2 KirillovA:
Написание ХП оправдано в случае, когда безопасность важнее скорости разработки и надежности. В большинстве случаев - это просто разбазаривание времени.
В случае, о котором Вы говорите, необходимо не только формирование строки, но и возврат результата. И для этого свои компоненты надо наследовать и писать. Не проще ли со стандартными разобраться ?
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32370559
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
with ADOQuery1 do
begin
  SQL.Clear;
  SQL.Add ('exec kaka @kaka = 1');
  Open;
end;

в SP делаю все что хочу и выплевываю в кач-ве рез-та все что хочу ...
какие компоненты надо писать еще?!
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32370607
Фотография Tаrantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mik ProkoshinТак, вспомнил еще одну фишку ....
Provider.ResolvetoDataset должно стоять True

УРАААА! Заработало!!!

Спасибо тебе!
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32370610
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 KirillovA:
Угу. Строку писать из десятка-трех параметров... identity в рекордсет самому вставлять... Но главное-то не это, а то, что надо еще и ХП рисовать. И так на протяжении всего цикла разработки...
И это вместо 3 стандартных компонент (ADOQuery, DatasetProvider, ClientDataset). Удобненько...
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32370631
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это называеца опыт ...
если у тебя на клиенте контроль всего и вся будет происходить ... в т.ч. соблюдение ссылочной целостности или прибитие подчиненных записей перед удалением текущие записи ... то значит у тя не клиент-серверное приложение а просто клиентское - а сервер - просто хранит данные ...
и между прочим, имхо, не знаю кто и че скажет ... я юзаю делфю только для морды юзеру.. ввода там всякого... флажков и прочей интерфейсной лабуды - потом передаю строку на сервер - и вся логика делаеца там ...
по крайней мере есть защищенность, сухость, и надежность как у прокладок Оби
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32370649
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совершенно согласен по поводу логики, соответственно, если имеем прямой доступ к таблице/view - реализация проверок с помощью триггеров, констрейнтов и т.д. И мой опыт говорит именно об ускорении разработки, когда есть у тебя один-два компонента доступа к данным на клиенте, а логика вся на серваке. И если по три процедуры на каждую таблицу писать - за это заказчик отдельно платить по определенным требованиям должен IMHO.
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32371433
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"И если по три процедуры на каждую таблицу писать - за это заказчик отдельно платить по определенным требованиям должен IMHO."
Это, уже извините, ерунда какая-то. Давайте забудем про заказчика - то, как вы пишите ващу программу никак не должно зависеть от того, сколько он платит. А вот по поводу реализации через ХП или через вьюхи/триггеры - то, конечно, делать можно и так, и эдак. И работать будет - если правильно строить - хорошо. Но мой опыт говорит, что, если вы строите архитектуру посредством ХП, то писать придется м.б. больше, но разбираться главным образом со своими багами. А вот если через триггера/вюхи - то, плюс к ним, еще разбираться с бага... т.е. с нюансами MSSQL, ADO и Дельфевого враппера. Что вы в предыдущих постах и демонстрировали.



Nobody faults but mine... (LZ)
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32371457
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
енто ты кому написал?
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32371610
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 aag:
>Это, уже извините, ерунда какая-то. Давайте забудем про заказчика - то, как вы пишите ващу программу никак не должно зависеть от того, сколько он платит.
Забавно. А я всегда думал, что исходя из оплаты я выбираю реализацию требований (какие делать, а какие отпинывать) и архитектурные подходы (простота/эффективность/безопасность/...)
Как я уже сказал выше - для доп. работы (а я рассматриваю подход с ХП именно как доп. работу, потому как с точки зрения ведения проекта : на 5-и табличках трудоемкость в сравнении с прямым доступом вообще неважна, на 30 уже весьма неприятна, а на 300-заколебешься вести проект) должны присутствовать доп. требования. Эти доп. требования заказчика должны быть оплачены заказчиком.
Стремление "разбираться только со своими багами" на самом деле IMHO пагубно стратегически, поскольку ведет к неиспользованию передовых технологий и, как следствие, отставанию от прогресса :-) Да и просто кругозор надо пошире иметь.
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32372216
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
странные у тебя заказчики, раз изначально хочешь от них быстрее избавица и
сделать только то за что они заплатили ...
сколько у меня не было халтур, практически всегда приходица с зак-ми потом общаться ... и помочь решить ихнюю информационную траблу можно двумя способами:
1. отношение к ним как к ублюдкам которые почемуто мне мало платят хотя типа деньги у них есть а я типа такой пушистый и умный и вижу что мне бабла мало дают.
2. отношение как к нормальным партнерам, с которыми можно иметь дело и в будущем. и поетому делать работу хорошо, пусть трудоемко, но качественно - пусть етого они не видят, но в душе я могу сказать себе, то, что выполнил работу качественно!
я придерживаюсь п.2.
--
скорость нужна при ловле блох.
надежность нужна всегда.
...
Рейтинг: 0 / 0
не возращаются значения INDENTITY после INSERT
    #32372674
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>странные у тебя заказчики, раз изначально хочешь от них быстрее избавица и
сделать только то за что они заплатили ...
Дык и договор о минимизации стоимости :-(

>1. отношение к ним как к ублюдкам которые почемуто мне мало платят хотя типа деньги у них есть а я типа такой пушистый и умный и вижу что мне бабла мало дают.
2. отношение как к нормальным партнерам, с которыми можно иметь дело и в будущем. и поетому делать работу хорошо, пусть трудоемко, но качественно - пусть етого они не видят, но в душе я могу сказать себе, то, что выполнил работу качественно!
Не могу согласиться по одной простой причине - если бы я им впаривал программу, не решающую поставленные задачи, либо работающую с глюками, можно было бы говорить о п.1. Если же я выполняю то, на что договаривались, минимизируя стоимость проекта, претензий со стороны заказчика ко мне нет. А "заделы на будущее" и "на всякий случай" наш бюджет не предусматривает. И так из-за Багланда последнее время работаем в минус.

>я придерживаюсь п.2.
я тоже. Если могу себе это позволить....

>скорость нужна при ловле блох.
надежность нужна всегда.
С годами приходит понимание, что истина всегда находится где-то между крайностями :-)
...
Рейтинг: 0 / 0
41 сообщений из 41, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / не возращаются значения INDENTITY после INSERT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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