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



我有一个应用程序,它在开发环境中运行良好,但在部署为EXE时表现不佳。当我单击deploy并生成EXE时,所有通过DataStore对象运行的查询都会成功(SQLCode0),但返回零行。出于沮丧,我改为可见的数据窗口,它在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

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

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

有两种方法可以解决这个问题。

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

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

祝你好运,

特里。

我对您的前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

最新更新