2016-11-14 39 views
1

我们有一直在生产在过去6年,已针对SQL MSDE和MS-SQL服务器做工精细一个PowerBuilder的客户端应用程序(PB 12.5)2012年身份的价值不被SQL Server返回2014

最近,我们已经升级了一些安装(大约40个)到SQL Server 2014.在这些安装的大约一半中,我们看到一个问题,在更新方法被调用后,Identity列被而不是返回到DataWindow。这是有问题的代码:

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 

数据窗口具有标识列和主键正确的设置。

enter image description here

这是不会发生的所有设备,但只有一些。所有的安装都非常相似。 PB应用程序安装在服务器上,并从瘦客户端启动。

连接字符串如下:

SQLCA.DBParm = "PROVIDER='SQLOLEDB',DATASOURCE='ServerName',PROVIDERSTRING='Database=DBName',Identity='SCOPE_IDENTITY()'" 

我们试图对几种测试安装和SQL Server 2014 Express还,但它工作正常。只有在某些安装中,这会失败,我们不知道为什么。我们尝试更改为Identity='@@IDENTITY',但没有效果。

有没有人有任何想法?

+0

试试吧,如果有帮助:[OLE DB] DBParm =“PROVIDER = 'SQLNCLI11',DATASOURCE = '服务器',PROVIDERSTRING = '数据库= DBNAME; APP = APPNAME',OJSyntax = 'ANSI',PBTrimCharColumns ='Yes',DateTimeFormat ='\''yyyy-mm-dd hh:mm:ss.fff \''',DateFormat ='\''yyyy-mm-dd \''',TimeFormat ='\'' hh:mm:ss \',Identity ='SCOPE_IDENTITY()',DisableBind = 0“ –

+0

我会试试这个并恢复。 – navigator

+0

不幸的是,它并没有帮助:( – navigator

回答

1

您可以通过 pbodbxxx.ini文件更改用于检索标识值的查询(其中xxx是您正在使用的PB的版本--这种情况下是PB12的版本)。尽管文件的命名约定,Sybase已选择 来响应 文件中的某些设置来创建OLE DB连接。在这种特定的情况下,改变在 [MS_SQLSERVER_SYNTAX]部分

从 GetIdentity = '选择@@身份'

到 GetIdentity = 'SELECT SCOPE_IDENTITY)(' 以下行

如果选择此路径,您将需要分发INI文件与您的 应用程序。请注意,这适用于PB11 - 我认为它仍然适用于 PB12。

有趣的文章: https://blogs.sap.com/2012/10/25/using-autoincrementing-columns-from-a-powerbuilder-datawindow/

+0

应该过度骑在连接字符串中所做的设置ini文件 – navigator

+0

。?问题解决了 - 原来pbodb120.ini文件完全丢失了,非常感谢! – navigator

0

我使用的是SQL本机驱动程序。这是我交易对象的DBparms部分的一部分:

"Provider='SQLNCLI10', Identity='SCOPE_IDENTITY()' 

这适用于我。

+0

我们已经尝试过使用SQLNC,OLEDB和ODBC。所有人都看到了同样的问题。 – navigator

+0

它看起来像服务器上的一些配置问题,但我们无法确定。 – navigator