Страница 1 из 1
MS SQL сервер и IDENTITY поля
Добавлено: 07 Март 2006, 11:05
Andrew™
Всем привет
Очень много обсуждался вопрос правильного использования IDENTITY полей
правильное решение получения значения такого поля после добавления это:
но добавление INSERT и получение SELECT должны быть в одном скопе
что означало, что добавлять записи надо в ХП, что на мой взгляд крайне
неудобно, т к надо постоянно следить за такими ХП при изменении струткуры
таблицы.
оказывается можно проще без ХП:
Код: Выделить всё
11803608 Maximum read 1 rows for cursor
Binding field 1 = bbb
Binding field 2 = 5
11803608 Parsing Cursor : INSERT INTO dbo.TEST_Table ("Field2","Field3")
VALUES(?,?) SELECT SCOPE_IDENTITY()
11803608 Fetch cursor (1)
= 47
применительно к MAV Direct ODBC, для такого поля в DCT включается крыжик
ReadOnly, а в качестве Initail Value прописывается SELECT SCOPE_IDENTITY(),
и всё, после MAVINSERT'а в поле будет сидеть уже правильное значение.
Не отлавливалась ошибка при добавлении
Добавлено: 16 Март 2006, 12:21
Andrew™
выяснилось, что если INSERT возвращает ошибку, то след в том же скопе SELECT SCOPE_IDENTITY() её cбрасывал и библиотека считала, что запись удачно добавилась, а в File.IdentityField попадал НУЛЬ
ну и дальше начинался бардак в программе, при попвтке удалить щзапись из Browse - ошибка Record Not Found и т д.
Теперь такие ситуации нормально разруливаются.
Вычислили баг при работе с IDENTITY
Добавлено: 07 Июль 2006, 9:09
Andrew™
Собственно SUBJ, если на таблицу есть триггер, а в триггере есть операции типа UPDATE, это приводило к ошибке выполнения дабавленя, пофиксил.
Персональное спасибо за обнаруженный баг и предоставленный пример с проблемой Андрею Крючкову.
Re: Не отлавливалась ошибка при добавлении
Добавлено: 10 Август 2006, 9:19
Admin
выяснилось, что если INSERT возвращает ошибку, то след в том же скопе SELECT SCOPE_IDENTITY() её cбрасывал и библиотека считала, что запись удачно добавилась, а в File.IdentityField попадал НУЛЬ
ну и дальше начинался бардак в программе, при попвтке удалить щзапись из Browse - ошибка Record Not Found и т д.
У меня примерно такая же ситуация сейчас. После MAVINSERT (с использованием в таблице SELECT SCOPE_IDENTITY()) выдается ошибка, хотя запись реально в таблицу добавляется.
Делал и руками (я про тот класс что вчера рассказывал) и Browse-Form стандартные делал. Результат одинаковый!
P.S. Андрей! Если у тебя есть список рассылки для пользователей купивших MAV включи меня туда пожалуйста ... а то после каждого твоего билда нужно у тебя ссылку персонально просить
P.P.S. Все что ты мне вчера объяснил, я реализовал. Вывод ->
MAV РУЛИТ!
Re: Не отлавливалась ошибка при добавлении
Добавлено: 10 Август 2006, 14:24
Andrew™
бросай пример на мыло, поглядим
Re: Не отлавливалась ошибка при добавлении
Добавлено: 10 Август 2006, 15:14
Andrew™
м-да, была бяка, теперь всё чисто
Код: Выделить всё
6822176 Maximum read 1 rows for cursor
Binding field 1 "ProgramName" = DemoProgramm
6822176 Parsing Cursor : SELECT "ProgramName","ID" FROM xa_programs WHERE "ProgramName"=?
6822176 Fetch cursor (1)
ERROR : Record Not Found [35]
6822176 Close cursor
6822176 Free cursor
Begin transaction Return Code : 0
6822176 Open cursor
6822176 Maximum read 1 rows for cursor
Binding field 1 = DemoProgramm
6822176 Parsing Cursor : INSERT INTO xa_programs ("ProgramName") VALUES(?) SELECT SCOPE_IDENTITY()
6822176 Fetch cursor (1)
= 6
6822176 Close cursor
6822176 Free cursor
Commit transaction Return Code : 0