Powerbuilder 12.1和DataWindow在设计与调试和可执行/运行时中的比较

Powerbuilder 12.1和DataWindow在设计与调试和可执行/运行时中的比较,powerbuilder,datawindow,Powerbuilder,Datawindow,我在Powerbuilder 12.1中遇到了一个非常奇怪的情况。我有两个可能相关的问题-主要是因为它是针对完全相同的datawindow报告 问题#1:不知何故,在调试和运行时期间显示数据窗口内容的功能已经丢失。在调试和运行时期间,您不再能够看到数据窗口的内容 但是,当您在设计模式下进入数据窗口时,它会提示您输入所需参数的值,内容显示得很好 编辑:已解决。这是由于Powerbuilder使用整数而不是长变量造成的。数据库中的标识ID超出了PowerBuilder 16位整数(32767)的上限

我在Powerbuilder 12.1中遇到了一个非常奇怪的情况。我有两个可能相关的问题-主要是因为它是针对完全相同的datawindow报告

问题#1:不知何故,在调试和运行时期间显示数据窗口内容的功能已经丢失。在调试和运行时期间,您不再能够看到数据窗口的内容

但是,当您在设计模式下进入数据窗口时,它会提示您输入所需参数的值,内容显示得很好

编辑:已解决。这是由于Powerbuilder使用整数而不是长变量造成的。数据库中的标识ID超出了PowerBuilder 16位整数(32767)的上限。我将逻辑更新为使用long,解决了这个问题#1

问题2:

当我在调试模式下使用上述问题1中提到的相同数据窗口运行报告代码以生成新的报告文件时,它工作了——仅在调试模式下。运行时失败——对于完全相同的调用,我在运行时遇到了-1错误

下面是使用数据存储的代码片段(我已经尝试了DataWindow来查看,但也失败了):

在调试模式下:最后一行返回一些正的非零值,并生成报告 在运行时模式下:最后一行返回-1(根据Sybase,Retrieve如果成功返回显示的行数(即主缓冲区中的行),如果失败返回-1。如果没有为DataWindow控件或数据存储分配DataWindow对象,此方法返回-1。)


那么,为什么在创建新报告文件时,检索在调试时工作,但在运行时失败呢

我能够解决这个问题,但决议没有回答一个紧迫的问题:“为什么以前的代码工作了好几年,却决定停止工作?”

以前,代码将标识数据存储的字符串参数传递给本地数据存储的dataobject参数。这足以使用数据存储中包含的SQL查询来提取生成报告所需的数据(通过SaveAs)。以下是原始代码:

datastore lds_blarney_report
lds_blarney_report = CREATE datastore

iw_main_sheet.wf_write_log("Retrieving report data")

lds_blarney_report.dataobject = as_datawindow
lds_blarney_report.SetTransObject(sqlca)
ll_ret = lds_blarney_report.retrieve(al_file_no)
不知何故,在某个地方,代码被破坏了,因此它只能在IDE/Debug中工作,但在运行时(编译的可执行文件)出现-1错误时失败

我能够通过在PBL项目中创建一个数据存储对象(n_ds_*)来解决这个问题(datawindow在另一个PBL中),然后开始使用它。这是更新后的代码

NOTE:  n_ds_no_load_blarney was created in the project with a 
       dataWindow reference to d_blarney in a different library.

n_ds_no_load_blarney lds_no_load_blarney

iw_main_sheet.wf_write_log("Retrieving report data") 

lds_no_load_blarney = CREATE n_ds_no_load_blarney
lds_no_load_blarney.setTransObject(SQLCA)
ll_ret = lds_no_load_blarney.retrieve(al_file_no)
正如您所看到的,尽管存在差异,但代码看起来几乎相同。也就是说,我仍然不知道为什么第二个代码片段有效,而不是第一个。为什么在多年的正常工作后,它现在停止工作了?也许这是如此明显,以至于我的头都被时间摆平了。:)

谢谢你的帮助

编辑:编辑:

我是一个白痴,配得上丹·艾克罗伊德的白痴角色。所有这些垃圾之所以会引起轰动,是因为我们将Powerbuilder开发机器移到了一个新的工作站(新的操作系统,新的一切)。由于该移动,Powerbuilder开发位置更改了驱动器号


这意味着我们忘记了更新每个Powerbuilder项目的PBR文件,以指向新驱动器上更新的位置。一旦我这么做了,这里报道的所有问题都消失了。有趣。

听起来您试图在运行时加载的DW没有编译到应用程序中

关于这将如何发生,有几种可能性:

  • PBR文件不再包含运行时引用的datawindow对象。它需要重新添加
  • PBR文件从来没有对DW的引用,但是在某个地方有一个绝对引用导致它被包括在内。该引用现在已消失,EXE不再包含DW
  • 包含DW的PBL曾经是PBD,但现在正在编译到应用程序中。这意味着,如果不包含在APP PBR文件中或在painters中显式分配,则对该PBD中的datawindows的运行时分配将无法工作

  • 希望这能有所帮助。

    在测试时是否运行了数据库跟踪,以查看发送到DB的SQL是什么样子的?问题2:所谓“运行时”,是指运行编译的可执行文件,而不是在IDE内部运行?是的。运行时=编译的可执行文件。调试=在IDE内部运行。马特,是的,我运行了。数据库跟踪良好;它有所有正确的参数。
    NOTE:  n_ds_no_load_blarney was created in the project with a 
           dataWindow reference to d_blarney in a different library.
    
    n_ds_no_load_blarney lds_no_load_blarney
    
    iw_main_sheet.wf_write_log("Retrieving report data") 
    
    lds_no_load_blarney = CREATE n_ds_no_load_blarney
    lds_no_load_blarney.setTransObject(SQLCA)
    ll_ret = lds_no_load_blarney.retrieve(al_file_no)