2010-09-03 95 views
0

这次我写了你,因为VBScript是我公司用来从Oracle数据库检索信息的应用程序之一,似乎没有正常工作。以下是事实:VBScript不能正确执行sql语句

  1. 有代码的一部分执行以下操作:

    sSql = "SELECT REQ_PAYMODE" & _ 
        " FROM SYSADM.GBPRESTATIEGROEP" & _ 
        " WHERE 1=1" & _ 
        " AND SLEUTEL = " & sKeyPrestatiegroep 
    
    Set oRSGBPrest = connADO.execute(sSql) 
    If Not oRSGBPrest.EOF Then 
        sRequestPaymodeKey = oRSGBPrest("REQ_PAYMODE") 
    Else 
    //error handling 
    End If 
    
  2. 使用为Oracle声明示踪剂(www.aboves.com)我可以捕获相同的声明及其相应的值:

    SELECT REQ_PAYMODE FROM SYSADM.GBPRESTAT IEGROEP WHERE 1 = 1 AND SLEUTEL = 1572499

  3. 现在,VBScript中应该采取的价值和执行另一个查询:

    sSql = "SELECT PAM_CODE" & _ 
          " FROM SYSADM.PAYMODES" & _ 
          " WHERE 1=1" & _ 
          " AND PAM_KEY = " & sRequestPaymodeKey 
    
    Set oRSPaymodes = connADO.execute(sSql) 
    

权在这最后该脚本会抛出一个错误,说:

ORA-009 36:在线XXX缺少表达 - >设置oRSPaymodes = connADO.execute(sSql)< -

这基本上意味着查询中(3)是不正确的,这也意味着由于某种原因sRequestPaymodeKey是空的。我无法确定这是因为这个失败的sql语句没有出现在语句跟踪器中,但这是我能找到的唯一解释。但是,最差的部分是,它在SQLDeveloper上运行查询(2)时(其值为sRequestPaymodeKey来自),它显示的行的值不是null或零。

我想不出在这里可能发生的任何事情,也许它只是一个服务器的事情......不知道。

你们有什么建议吗?任何方式,我可以真正调试一个VBE文件?

非常感谢您的帮助!

+0

你可以添加一些日志记录到你的变量的值写入文件的VB脚本? – BG100 2010-09-03 05:59:27

+0

是的,我已经做到了。我在第一个sql语句中放置了一个msgbox,它显示变量sKeyPrestatiegroep具有正确的值,但它在执行时仅返回没有行 – danboh 2010-09-03 14:31:36

+0

某些东西在这里没有添加。如果oRSGBPrest没有返回任何行,则当您分配sRequestPaymodeKey时应该会收到错误,因为您试图访问空记录集中的字段。 – Tmdean 2010-09-03 15:16:59

回答

1

您需要将sRequestPaymodeKey转换为与sql的INT对应的vbLong。我假设PAM_KEY是一个INT。记录集将返回一个字符串值。因此,您的代码如下所示:

If IsNumeric(sRequestPaymodeKey) Then 
    sSql = "SELECT PAM_CODE" & _ 
      " FROM SYSADM.PAYMODES" & _ 
      " WHERE 1=1" & _ 
      " AND PAM_KEY = " & CLng(sRequestPaymodeKey) 

    Set oRSPaymodes = connADO.execute(sSql) 
Else 
    'do error handling due to bad returned data(empty string?) 
End If 

此外,请考虑参数化您的查询以防止sql注入。

1

有一些想法,尝试:

  1. 之前Set oRSPaymodes = connADO.execute(sSql),放在一个MsbBox,看到正在执行什么SQL。它有效吗?它会在Oracle查询分析器中运行吗(如果有的话)?

  2. 以硬编码取代sRequestPaymodeKey的有效值。那它有用吗?

+0

好主意DaveB。 – crackedcornjimmy 2010-09-04 17:02:11