0

我有一个应用程序在开发环境中运行良好,但在部署为 EXE 时行为异常。当我单击部署并制作 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

4

2 回答 2

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报告。

祝你好运,

特里。

于 2013-12-05T19:46:53.960 回答
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
于 2013-12-09T09:53:32.843 回答