首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowerBuilder.NET未正确读取Datawindow SQL语法

PowerBuilder.NET未正确读取Datawindow SQL语法
EN

Stack Overflow用户
提问于 2011-07-11 14:25:44
回答 1查看 1K关注 0票数 2

希望以前有人遇到过这个问题,因为它已经困扰了我和一个同事几天了。

我们成功地将我们的项目从PowerBuilder 12 Classic转换成了PowerBuilder.NET,并且运行良好,但是我们遇到了PowerBuilder.NET如何从数据窗口读取SQL语法的问题。

打开数据窗口,我复制了语法并将其粘贴到Server 2008 R2中,它完成了所有的检索工作。SQL如下所示(请注意,为了节省空间,移除了一些字段)

代码语言:javascript
复制
  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有效)。

代码语言:javascript
复制
SQLSTATE = 42000
Microsoft SQL Native Client
The multi-part identifier "intf_app_parm.intf_engine_id" could not be found

在试图找出导致错误的原因(因为上面的两个联接都正常工作)之后,我决定我们应该通过调试器签出数据窗口。这就是我们所做的,我们找出了原因(请参阅下面的SQL):

代码语言:javascript
复制
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经验的人会看到这种情况发生吗?如果是这样的话,您做了什么来解决这个问题(这发生在多个数据窗口上)。

谢谢您抽时间见我!

EN

回答 1

Stack Overflow用户

发布于 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/....

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6651613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档