PowerBuilder: получить значение идентификатора после вставки в таблицу Sql Server - PullRequest
3 голосов
/ 10 ноября 2011

Я использую PowerBuilder 12 Classic DataWindow для вставки новой записи в таблицу базы данных SQL Server 2008 с столбцом идентификаторов. После вставки я хотел бы получить значение столбца идентификаторов для использования в других таблицах.

В моем pbodb120.ini под [MS_SQLSERVER_SYNTAX] я изменил строку GetIndentity на это:

GetIdentity='Select IDENT_CURRENT (''&TableName'')'

Мой код выглядит так (docid - это столбец идентификаторов):

dw_document_add.update(true, true)

li_docid = dw_document_add.getitemnumber(dw_document_add.getrow(), "docid")

Беда в том, что, кажется, личность возвращается только наполовину. Я думаю, что это может быть проблема времени. (Записи вставляются в базу данных.)

Есть ли какой-нибудь способ, которым я могу быть уверен, чтобы получить личность каждый раз?

UPDATE

Я добавил Identity = '@@ IDENTITY' в строку подключения, и теперь она работает. Но я не уверен, должно ли это быть в файле pbodbxxx.ini.

Ответы [ 3 ]

4 голосов
/ 10 ноября 2011

Лучший совет - не пытаться изобретать велосипед;DataWindow уже делает это.В окне DataWindow зайдите в Rows / Update Properties, и внизу вы увидите столбец идентификаторов.Выберите столбец идентификаторов (он должен быть уже в вашем операторе SQL), и PB получит значение идентификатора после INSERT.

Удачи,

Терри.

1 голос
/ 10 ноября 2011

И я бы не стал доверять вызову GetRow ().

Вы должны уже иметь номер строки в локальной переменной для вставленной вами строки dw, иначе у вас не было бы правильного аргумента для всех вызовов SetItem (), которые наверняка предшествовали Update ( ) звоните.

0 голосов
/ 06 февраля 2013

Я использую PB 11.5 и MSSQL 2005.

Я подключаюсь с помощью драйвера SQL SNC. Я всегда добавляю identity=SCOPE_IDENTITY() к моей строке подключения.

Если вы используете @@identity, вы можете столкнуться с проблемой, если ваше приложение многопользовательское. Также я рекомендую использовать, если это возможно, хранимую процедуру обновления окна данных. Я помечаю свой столбец идентификаторов как выходной параметр. В хранимой процедуре я вызываю SELECT @id_column = SCOPE_IDENTITY() после предложения INSERT. И у меня никогда не было с этим проблем.

...