2010-09-03 122 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