我们有一个PowerBuilder客户端应用程序(PB 12.5),它已经在过去的6年中投入使用,并且在SQL MSDE和MS-SQL Server 2012上运行良好。
最近,我们已将一些安装(大约40个)升级到SQL Server 2014.在大约一半的安装中,我们看到一个问题,即Identity列不返回到DataWindow调用update方法后。以下是有问题的代码:
If lds_Update.Update( ) < 1 then
lb_Error = True
ls_Temp = "The inspection header could not be created."
Else
ll_InspID = lds_Update.GetItemNumber(1, "Insp_ID")
If (ll_InspID <= 0) or Isnull(ll_InspID) then
lb_Error = True // This is being hit as ll_InspID is null
ls_Temp = "Could not retrieve the inspection identity."
End If
End If
DataWindow具有Identity列和主键的正确设置。
在所有安装中都没有发生这种情况,只有一些安装。所有安装都完全相同。 PB应用程序安装在服务器上,并从瘦客户端启动。
连接字符串如下:
SQLCA.DBParm = "PROVIDER='SQLOLEDB',DATASOURCE='ServerName',PROVIDERSTRING='Database=DBName',Identity='SCOPE_IDENTITY()'"
我们已尝试过多个测试安装和SQL Server 2014 Express,但它运行正常。只有在某些装置上才会失败,我们不知道为什么。我们也尝试过更改为Identity='@@IDENTITY'
,但没有效果。
有没有人有任何想法?
答案 0 :(得分:1)
您可以通过更改用于检索身份值的查询 pbodbxxx.ini文件(其中xxx是您正在使用的PB版本 - 120英寸 这种情况对于PB12)。尽管文件的命名约定,Sybase也有 选择根据其中的某些设置进行OLE DB连接 文件。在这种特殊情况下,更改以下行 [MS_SQLSERVER_SYNTAX]部分
这 GetIdentity ='选择@@ identity'
要 GetIdentity ='SELECT SCOPE_IDENTITY()'
如果选择此路径,则需要使用您的路径分发INI文件 应用。请注意,这适用于PB11 - 我认为它仍然适用于 PB12。
有趣的文章: https://blogs.sap.com/2012/10/25/using-autoincrementing-columns-from-a-powerbuilder-datawindow/
答案 1 :(得分:0)
我正在使用SQL Native驱动程序。这是我的事务对象的DBparms部分的一部分:
"Provider='SQLNCLI10', Identity='SCOPE_IDENTITY()'
这适合我。