我对Powerbuilder 12.1有一个非常奇怪的情况。我有两个可能相关的问题 - 主要是因为它是完全相同的数据窗口报告。
问题#1:不知何故,某些地方,在调试和运行时期间显示DataWindow内容的功能已丢失。在调试和运行时期间,您无法再看到数据窗口的内容。
但是当您在设计模式下进入数据窗口时,它会提示您输入所需参数的值,内容显示得很好。
编辑:已解决。这是因为Powerbuilder使用整数而不是长变量。数据库中的标识ID超出了PowerBuilder 16位整数(32,767)的上限。我更新了逻辑以使用long,这解决了这个问题#1。
问题#2:
当我在调试模式下使用上面问题#1中提到的相同数据窗口运行报告代码以生成新的报告文件时,它只能在DEBUG模式下工作。运行时失败 - 我在运行期间因完全相同的调用而得到-1错误。
这是使用DATASTORE的代码片段(我已经尝试过DataWindow只是为了看到它而且也失败了):
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, "%")
在DEBUG模式下:最后一行返回一些正的非零值,并生成一个报告 在RUNTIME模式下:最后一行返回-1(根据Sybase,Retrieve返回显示的行数(即主缓冲区中的行)如果成功则返回-1,如果失败则返回-1。如果没有指定DataWindow对象在DataWindow控件或DataStore中,此方法返回-1。)
那么为什么检索在创建新报告文件时在调试时工作,但在运行时失败?
答案 0 :(得分:1)
听起来你在运行时试图加载的DW并没有被编译到应用程序中。
关于如何发生这种情况有几种可能性:
希望这有帮助。
答案 1 :(得分:0)
我能够解决这个问题,但解决方案没有回答这个紧迫的问题"为什么以前的代码很好用多年,决定停止工作?"
以前,代码传递了一个字符串参数,用于将数据存储区标识为本地数据存储区的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_ * )来解决这个问题(数据窗口在另一个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)
正如您所看到的,虽然存在差异,但代码看起来几乎相同。也就是说,我仍然不知道为什么第二个代码片段有效,而不是第一个。经过多年的工作,为什么它现在停止工作?也许它是如此明显,以至于它的时代在我脑海中徘徊。 :)
感谢您的帮助。
编辑:编辑:
我是一个愚蠢的铜头,值得Dan Aykroyd的Conehead角色。所有这些粪便击中风扇的原因是因为我们将Powerbuilder开发机器移动到一个新工作站(新操作系统,新的一切)。由于这一举动,Powerbuilder开发地点改变了驱动器号。
这意味着我们忘记更新每个Powerbuilder项目的PBR文件,以指向新驱动器上的更新位置。一旦我这样做,这里报告的所有这些问题就消失了。有趣。