Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
Итак база MS SQL 2000, есть TADOQUERY, TDATASETPROVIDER и TCLIENTDATASET так вот говорю TCLIENTDATASET.INSERT, далее TCLIENTDATASET.POST и в конце TCLIENTDATASET.ApplyUpdates(-1); запись добавляется но вот значение одного из полей которое IDENTITY остается пустым, хотя в базе оно уже не пустое, в чем проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2004, 17:38 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
создай sp в ее конце select @@identity запрос открывай оупеном и читай значение fields [0] и потом - в данной модели будет максимальная засчита - если вася пупкин начнет буянить - мона просто запрет на ран sp поставить и все .... соответственно если он и дальше сделать sp для вставки и удаления и килять неблагонадежных юзеров - особенно если операция важная ... и вааще - юзера тока sp должны ранить и данные из вьюхов юзать - делфя ето юрезувмордие - sp - логика и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2004, 02:06 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
Как заколебали эти черно-белые взгляды на мир.... Лучше просто посмотрите здесь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2004, 07:06 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
Создай ХП, в ее конце (после INSERT) делай RETURN SCOPE_IDENTITY() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2004, 09:01 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
Да я и без SP могу @@IDENTITY получить, вопрос в том почему оно автоматически не возвращается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2004, 10:13 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
А с чего ты взял, что оно должно автоматически возвращаться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2004, 10:42 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
Было бы логично предположить что-должны, тем более если использовать TADOQuery то оно возвращается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2004, 10:51 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2004, 10:53 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
легко: создаешь табличку с полем IDENTITY создаем формочку туда TADOQuery, TDATASource, TDBGrid открываем TADOQuery, ну и в рантайм, добавь запись поле IDENTITY заполниться автоматически, кстати включи Profiler и посмотри что идет с клиента ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2004, 11:30 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
запрос батенька, на то и запрос ... не хочу вас огорчать, но вы НИКОГДА двигаясь в предложенном вами направлении не получите свой злосчастный identity ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2004, 14:14 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
О каком направлении идет речь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2004, 14:21 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
TADOQuery. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2004, 14:22 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
Если я использую просто TADOQutry то как раз значение IDENTITY возвращается автоматически ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2004, 14:44 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
Цитата из приведенной мной ссылки: >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). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2004, 15:40 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
авторADO возвращает identity на клиента автоматически давным давно - с версии 2.1 по-моему... (У MS есть Q по этому поводу). TADO* также умеет обновлять у себя identity поле (по крайней мере у меня в D7). и даже в режиме BatchUpdates? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2004, 16:04 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
Естественно нет - сами-то подумайте - batchupdate есть единая неделимая операция, в т.ч. вставки пачки записей. В этом случае только requery поможет. Но для ХП со вставкой пачки записей тоже надо свой механизм передачи клиенту пачки identity делать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2004, 16:29 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
авторЕстественно нет - сами-то подумайте - batchupdate Спасибо, а то я не знал. . А вы не смотрели профайлером, как ADO возвращает значение. Посмотрите, будет очень любопытно. Или проведите простой эксперимент, когда у вас на таблице, которую вы редактируете через TADOQuery (где инкрементое поле вытаскивается автоматом), навешен триггер FOR INSERT, который вставляет запись в другую таблицу с identity. Вы получите лажу в новом значении identity. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2004, 17:00 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
Естественно, что значение identity получается ADO как SELECT @@IDENTITY, MS в Q-шке об этом так и пишет. Дык если ЭТО уже реализовано, зачем самому ваять то же самое... А если надо вставлять попутно записи еще в другие таблицы - тогда уж определяться надо - возвращать на место правильный identity в триггере (что IMHO более правильно) или использовать какие-то другие методы (типа ХП). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2004, 17:11 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
Mik ProkoshinА сам по себе provider конечно не знает, что в датасете что-то изменилось... Понятно значит в этих событиях надо самому вытасикать значение IDENTITY ну что-же будем вытаскивать, спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2004, 17:16 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
Зачем чего-то вытаскивать ? Таки вынудили написать код... :-) Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2004, 17:35 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
при обработке события говорит что идентити поле кэннот би модифиелд... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2004, 17:50 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
Угу. Очередная фенька Багланда, забыл я сразу сказать. Поле IDENTITY в ADOQuery должно быть TIntegerField или еще какое Int, но только не TAutoIncField. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2004, 18:54 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
Дейсвительно теперь ошибка не возникает, но поле все равно NULL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2004, 10:10 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
Тэкс. Что значит поле null ? В обработчик ProviderAfterUpdateRecord попадаем или не попадаем ? Что присваивается в обработчике (значение identity правильно ли присвоилось для ADOQuery) ? Как сказано в посте выше poPropagateChanges установлено ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2004, 12:01 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
Попадаем, значение установлено и вот тут SourceDS.FieldByName('PKId').Value значение NULL, смотрел что идет с клиента на сервер, так клиент не отправляет на сервер SELECT @@IDENTITY ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2004, 12:11 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
наканецто ... бились бились и докатились до юзания SP... заюзай через SP - гемора меньше и глюков тоже ... особливо при перепрыгивании с версию на версию делфей ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2004, 12:17 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
Проблемы - наверняка в настройках ADOQuery. Должно быть clUseClient, ltOptimistic. Если Delphi5, то не забудьте про ADO Update. Вообще, лучше использовать TBetterADORecordset - там весьма много глюков подправлено... 2 KirillovA: Исходя из Ваших соображений: чтобы гемора меньше - надо вообще про ублюдочный TADOxx забывать и свой враппер на ADO Recordset делать. А еще лучше через native ODBC :-) Можно, но сложно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2004, 13:06 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
неа - 1. сделать SP 2. сгенерить строку для передачи на сервер 3. передать и забить на проблему ... адо слишком много за программера додумывает - а ето не есть гут... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2004, 13:21 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
ишо ... открыть юзеру доступ к табле на инсерт/апдейт/детелет записей - ето для безопасности не есть гут ... особенно когда юзеров очень много ... у нас в конторе был один умник - открыл через акцесс со своим аккаунтом и каков наделал ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2004, 13:25 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
Настройки точно такие-же как ты и указал, а что за TBetterADORecordset ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2004, 13:40 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
Так, вспомнил еще одну фишку .... Provider.ResolvetoDataset должно стоять True, иначе "умная" связка провайдер - TADO... формирует непосредственно запросы на сервер (через ADOCommand). Естественно, в этом случае (ResolvetoDataset=False) все измененные серверной логикой поля должны получаться ручками... Про BetterADO поищите на форуме. 2 KirillovA: Написание ХП оправдано в случае, когда безопасность важнее скорости разработки и надежности. В большинстве случаев - это просто разбазаривание времени. В случае, о котором Вы говорите, необходимо не только формирование строки, но и возврат результата. И для этого свои компоненты надо наследовать и писать. Не проще ли со стандартными разобраться ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2004, 14:47 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. в SP делаю все что хочу и выплевываю в кач-ве рез-та все что хочу ... какие компоненты надо писать еще?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2004, 15:06 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
Mik ProkoshinТак, вспомнил еще одну фишку .... Provider.ResolvetoDataset должно стоять True УРАААА! Заработало!!! Спасибо тебе! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2004, 15:28 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
2 KirillovA: Угу. Строку писать из десятка-трех параметров... identity в рекордсет самому вставлять... Но главное-то не это, а то, что надо еще и ХП рисовать. И так на протяжении всего цикла разработки... И это вместо 3 стандартных компонент (ADOQuery, DatasetProvider, ClientDataset). Удобненько... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2004, 15:30 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
это называеца опыт ... если у тебя на клиенте контроль всего и вся будет происходить ... в т.ч. соблюдение ссылочной целостности или прибитие подчиненных записей перед удалением текущие записи ... то значит у тя не клиент-серверное приложение а просто клиентское - а сервер - просто хранит данные ... и между прочим, имхо, не знаю кто и че скажет ... я юзаю делфю только для морды юзеру.. ввода там всякого... флажков и прочей интерфейсной лабуды - потом передаю строку на сервер - и вся логика делаеца там ... по крайней мере есть защищенность, сухость, и надежность как у прокладок Оби ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2004, 15:39 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
Совершенно согласен по поводу логики, соответственно, если имеем прямой доступ к таблице/view - реализация проверок с помощью триггеров, констрейнтов и т.д. И мой опыт говорит именно об ускорении разработки, когда есть у тебя один-два компонента доступа к данным на клиенте, а логика вся на серваке. И если по три процедуры на каждую таблицу писать - за это заказчик отдельно платить по определенным требованиям должен IMHO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2004, 15:46 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
"И если по три процедуры на каждую таблицу писать - за это заказчик отдельно платить по определенным требованиям должен IMHO." Это, уже извините, ерунда какая-то. Давайте забудем про заказчика - то, как вы пишите ващу программу никак не должно зависеть от того, сколько он платит. А вот по поводу реализации через ХП или через вьюхи/триггеры - то, конечно, делать можно и так, и эдак. И работать будет - если правильно строить - хорошо. Но мой опыт говорит, что, если вы строите архитектуру посредством ХП, то писать придется м.б. больше, но разбираться главным образом со своими багами. А вот если через триггера/вюхи - то, плюс к ним, еще разбираться с бага... т.е. с нюансами MSSQL, ADO и Дельфевого враппера. Что вы в предыдущих постах и демонстрировали. Nobody faults but mine... (LZ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2004, 13:10 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
енто ты кому написал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2004, 13:27 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
2 aag: >Это, уже извините, ерунда какая-то. Давайте забудем про заказчика - то, как вы пишите ващу программу никак не должно зависеть от того, сколько он платит. Забавно. А я всегда думал, что исходя из оплаты я выбираю реализацию требований (какие делать, а какие отпинывать) и архитектурные подходы (простота/эффективность/безопасность/...) Как я уже сказал выше - для доп. работы (а я рассматриваю подход с ХП именно как доп. работу, потому как с точки зрения ведения проекта : на 5-и табличках трудоемкость в сравнении с прямым доступом вообще неважна, на 30 уже весьма неприятна, а на 300-заколебешься вести проект) должны присутствовать доп. требования. Эти доп. требования заказчика должны быть оплачены заказчиком. Стремление "разбираться только со своими багами" на самом деле IMHO пагубно стратегически, поскольку ведет к неиспользованию передовых технологий и, как следствие, отставанию от прогресса :-) Да и просто кругозор надо пошире иметь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2004, 14:52 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
странные у тебя заказчики, раз изначально хочешь от них быстрее избавица и сделать только то за что они заплатили ... сколько у меня не было халтур, практически всегда приходица с зак-ми потом общаться ... и помочь решить ихнюю информационную траблу можно двумя способами: 1. отношение к ним как к ублюдкам которые почемуто мне мало платят хотя типа деньги у них есть а я типа такой пушистый и умный и вижу что мне бабла мало дают. 2. отношение как к нормальным партнерам, с которыми можно иметь дело и в будущем. и поетому делать работу хорошо, пусть трудоемко, но качественно - пусть етого они не видят, но в душе я могу сказать себе, то, что выполнил работу качественно! я придерживаюсь п.2. -- скорость нужна при ловле блох. надежность нужна всегда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2004, 14:47 |
|
||
|
не возращаются значения INDENTITY после INSERT
|
|||
|---|---|---|---|
|
#18+
>странные у тебя заказчики, раз изначально хочешь от них быстрее избавица и сделать только то за что они заплатили ... Дык и договор о минимизации стоимости :-( >1. отношение к ним как к ублюдкам которые почемуто мне мало платят хотя типа деньги у них есть а я типа такой пушистый и умный и вижу что мне бабла мало дают. 2. отношение как к нормальным партнерам, с которыми можно иметь дело и в будущем. и поетому делать работу хорошо, пусть трудоемко, но качественно - пусть етого они не видят, но в душе я могу сказать себе, то, что выполнил работу качественно! Не могу согласиться по одной простой причине - если бы я им впаривал программу, не решающую поставленные задачи, либо работающую с глюками, можно было бы говорить о п.1. Если же я выполняю то, на что договаривались, минимизируя стоимость проекта, претензий со стороны заказчика ко мне нет. А "заделы на будущее" и "на всякий случай" наш бюджет не предусматривает. И так из-за Багланда последнее время работаем в минус. >я придерживаюсь п.2. я тоже. Если могу себе это позволить.... >скорость нужна при ловле блох. надежность нужна всегда. С годами приходит понимание, что истина всегда находится где-то между крайностями :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2004, 08:21 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2115164]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
84ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
87ms |
get tp. blocked users: |
2ms |
| others: | 243ms |
| total: | 460ms |

| 0 / 0 |
