Powerbuilder DataStore仅在部署为EXE时失败(但成功为DataWindow)

时间:2013-12-05 19:22:18

标签: deployment powerbuilder datastore datawindow

我有一个在开发环境中运行良好但在部署为EXE时行为不端的应用程序。当我单击deploy并生成一个EXE时,所有通过DataStore对象运行的查询都会成功(SQLCode 0),但返回零行。出于沮丧,我改为可见的数据窗口,它在EXE下再次神奇地工作。因此,我使数据窗口不可见,并继续工作。这很奇怪。我有另一个更大的powerbuilder应用程序,使用大量的DataStore对象(在同一个数据库上),那些工作很棒。

DataStore ds_wacn
ds_wacn  = create datastore
ds_wacn.DataObject = 'd_plateaccessions'
ds_wacn.SetTransObject(SQLCA)
ds_wacn.Retrieve(sLoad, iPlate)
IF SQLCA.SQLCode < 0 then ...
//  Succeeds in development, fetches zero rows under EXE

dw_wacn.SetTransObject(SQLCA)
dw_wacn.Retrieve(sLoad, iPlate)
IF SQLCA.SQLCode < 0 then ...
// Succeeds in development and in EXE

我非常小心地确保有效的应用程序和失败的应用程序使用相同的设置连接到数据库(但仍然可能是一个问题)。这是Powerbuilder 11.5.1

2 个答案:

答案 0 :(得分:4)

很可能你的DataWindow对象没有被编译到EXE中。

编译EXE时,PowerBuilder从Application对象开始,并智能地尝试确定应包含哪些对象。由于d_plateaccessions仅在脚本中的字符串中引用,因此不包括它。

有两种解决方法。

您可以为包含DataWindow的PBL创建PBD。 PBD创建盲目地包括PBL中的所有对象。这种方法非常流行,许多人只是将所有PBL标记为PBD创建并部署PBD。

您也可以为EXE创建一个PBR,告诉编译器强制某些DataWindows和图形文件进入EXE。如果你真的想要一个EXE,但又不想建立一个合适的PBR,你可以使用PBL Peeper生成PBR和脚本来强制所有DataWindows和对象(并找到所有相关的图形)到编译中EXE,使用PBR Builder Plus报告。

祝你好运,

特里。

答案 1 :(得分:0)

我的前4行有问题。

DataStore ds_wacn
ds_wacn.DataObject = 'd_plateaccessions'
ds_wacn.SetTransObject(SQLCA)
dw_wacn.Retrieve(sLoad, iPlate)

你真的在dw_wacn而不是ds_wacn上检索吗?

本地数据存储区没有“创建”。 我不使用频繁的本地数据存储区,但在这种情况下,代码在我们的程序中是这样的

dataStore ds_myDs
ds_myDds  = create datastore
ds_myDds.DataObject = 'myDataObject'
ds_myDds.SetTransObject(SQLCA)
ds_myDds.Retrieve( /*arguments or not*/)    

/*
some code    
*/

destroy ds_myDs