希望以前有人遇到过这个问题,因为它已经困扰了我和一个同事几天了。
我们成功地将我们的项目从PowerBuilder 12 Classic转换成了PowerBuilder.NET,并且运行良好,但是我们遇到了PowerBuilder.NET如何从数据窗口读取SQL语法的问题。
打开数据窗口,我复制了语法并将其粘贴到Server 2008 R2中,它完成了所有的检索工作。SQL如下所示(请注意,为了节省空间,移除了一些字段)
SELECT hl7_in.intf_app_parm_id,
hl7_in.sending_app,
hl7_in.msg_typ,
hl7_in.process_ind,
hl7_in.hl7_in_seq_no,
hl7_in.msg_evnt_typ,
hl7_in.wrng_msg_cnt,
pt.pt_middle_name,
hl7_in.resolved_ind,
hl7_in.pt_id,
hl7_in.hl7_msg_cntl_id,
hl7_in.msg_txt,
intf_app_parm.app_parm_desc,
intf_engine.engine_name
FROM {oj hl7_in LEFT OUTER JOIN pt ON hl7_in.pt_id = pt.pt_id}, {oj intf_app_parm LEFT OUTER JOIN intf_engine ON intf_app_parm.intf_engine_id = intf_engine.intf_engine_id}
WHERE ( hl7_in.intf_app_parm_id = intf_app_parm.intf_app_parm_id ) and
( ( intf_app_parm.direction_ind = 'I' ) ) 但是,当代码在运行时执行时,我会得到一个SQL错误(即使SQL有效)。
SQLSTATE = 42000
Microsoft SQL Native Client
The multi-part identifier "intf_app_parm.intf_engine_id" could not be found在试图找出导致错误的原因(因为上面的两个联接都正常工作)之后,我决定我们应该通过调试器签出数据窗口。这就是我们所做的,我们找出了原因(请参阅下面的SQL):
SELECT hl7_in.intf_app_parm_id,
hl7_in.sending_app,
hl7_in.msg_typ,
hl7_in.process_ind,
hl7_in.hl7_in_seq_no,
hl7_in.msg_evnt_typ,
hl7_in.wrng_msg_cnt,
pt.pt_middle_name,
hl7_in.resolved_ind,
hl7_in.pt_id,
hl7_in.hl7_msg_cntl_id,
hl7_in.msg_txt,
intf_app_parm.app_parm_desc,
intf_engine.engine_name
FROM hl7_in LEFT OUTER JOIN pt ON hl7_in.pt_id = pt.pt_id
LEFT OUTER JOIN intf_engine ON intf_app_parm.intf_engine_id = intf_engine.intf_engine_id
WHERE ( hl7_in.intf_app_parm_id = intf_app_parm.intf_app_parm_id ) and
( ( intf_app_parm.direction_ind = 'I' ) )如果您查看FROM语句,您将看到PowerBuilder决定修改该语句,在pt.pt_id之后删除逗号(,)以及第二个联接(intf_app_parm)的开头部分。我们决定检查原始的PB12经典代码,看看它可能也是一个问题,但这个奇怪的事情并没有发生(检索语句被正确读取)。
数据窗口本身在应用程序期间的任何时候都不会被修改,SQL语句也不会被修改。有过PowerBuilder.NET经验的人会看到这种情况发生吗?如果是这样的话,您做了什么来解决这个问题(这发生在多个数据窗口上)。
谢谢您抽时间见我!
发布于 2011-07-30 16:50:07
您可能看到的是为符合ODBC规范而构造的语法。大括号是ODBC转义序列。您是否可能在开发期间使用ODBC连接(DB配置文件)并在应用程序中使用本机驱动程序连接到数据库,或者反之亦然?
如果Server数据库引擎不直接支持任何ODBC语法,则Server驱动程序将动态地将其转换为T。
还要注意的是,SQL中的不同之处不是逗号的缺失,而是where子句的一个部分和另一个部分周围的大括号。:)
*许多年后,我才知道 to 12.5不支持 Server 2008和up,但支持2000和2005,但my PowerBuilder 2017支持直接从帮助文件中连接到Server 2008、2002、2014和2016。只要使用更新的提供程序,PB11.5就支持Server 2008。我们遇到了一个问题,您只能使用一个检索参数,尝试添加更多的内容会给第2列提供无效的语法,这在我的职业生涯中还没有见过,并且在up上使用了PB 3的所有版本。
您可以在这里获得更多信息:
Microsoft程序员参考:http://msdn.microsoft.com/en-us/library/....
特别针对ODBC语法:http://msdn.microsoft.com/en-us/library/....
https://stackoverflow.com/questions/6651613
复制相似问题