2015-02-24 68 views
3

我在Oracle中編寫了一些基本的SQL,它按預期運行。它選擇一個客戶,他們的ID和他們可以提供的服務。VBA和Oracle SQL:ORA-00907:缺少右括號

但是,當我添加從VBA代碼傳遞的變量時會出現錯誤消息ORA-00907: Missing Right Parenthesis。這是由於代碼中的OR

AND C.CURRENCY LIKE :cmbSelectAccountCcy 
AND (S.SERVICEID LIKE :cmbSelectServiceType OR S.SERVICEID LIKE :cmbSelectServiceType2) 
AND .... etc 

如果我刪除或按預期運行。的OR是檢查,其包括(在端部)的一部分

HAVING COUNT(S.SERVICEID) > 2 

允許2個值進行檢查,並且只有當2(或更多)是本顯示客戶端。

Excel中的組合框將服務ID作爲下拉框中的設置值或%字符傳遞。在某些情況下,我認爲沒有達到正確的括號。

我可以使用硬編碼值運行SQL查詢,但不通過VBA傳遞相同變量的原因是什麼?我在VBA中有一個Debug.Print()聲明,它顯示了我期望看到的所有值。


UPDATE:

更改cmbSelectServiceType2cmbServiceTypeTwo似乎已經解決了這一問題,但是,由於還沒有名字,我想不通爲什麼。任何答案仍然讚賞!我能看到的唯一因素是第一個是21個字符,第二個是20個字符。表中的列數據類型是VARCHAR2。

切線:OR語句現在返回Service1或Service1和Service2或Service2,即完全OR語句。上面的HAVING條款試圖強加只允許BOTH。


更新2

在cmbSelectServiceType2更改 '2' 到字母 '兩化' 不起作用。好像20個字符是一些任意的限制。根據

+1

聽起來像駕駛員問題;也許它對綁定變量數據類型感到困惑? – 2015-02-24 11:00:14

+0

感謝@alexpoole所以這意味着我需要(如果可能)將變量轉換爲正確的類型,例如:'CAST(:Variable As Number)'還是這樣?它們都是'VARCHAR2'類型,我不是貿易開發者,我試圖在新工作中獲得自動化的東西,所以這是我非常盲目的。 – RossC 2015-02-24 11:05:46

+0

您不能將'%'強制轉換爲數字。如果司機破壞了它,那麼很難猜測如何解決它。檢查/更新/更換驅動程序可能是可取的,但可能不適合你?我可以想到一種可能的方法,但是在不知道潛在問題的情況下它有點難以置信; '(S.SERVICEID =:cmbSelectServiceType OR S.SERVICEID =:cmbSelectServiceType2 OR:cmbSelectServiceType ='%'OR:cmbSelectServiceType2 ='%')' – 2015-02-24 11:14:34

回答

0

Getting around the Max String size in a vba function?

一個VBA函數不能處理超過255個字符的字符串,是有可能,這可能會引起問題,尤其是當你切開字符串的長度它的工作原理。

+0

嗨,但它是變量名稱的長度,一旦它低於20個字符,它似乎工作正常。我不知道字符串的大小是否會影響老實說。字符串本身只有3個字符。 – RossC 2015-02-27 15:19:02