2017-03-08 64 views
1

我正在通過ODBC連接到數據庫。我有用VBA編寫的SQL語句。我已經定義了三個參數傳遞,定義爲單元格引用:使用範圍值作爲SQL語句中的參數

Dim Param1 As String 
Dim Param2 As String 
Dim Param3 As String 

Param1 = Sheets("SHEET1").Range("P1").Value 
Param2 = Sheets("SHEET1").Range("P2").Value` 
Param3 = Sheets("SHEET1").Range("P3").Value 

的的子句WHERE語句工作正常(表是一個例子)之間這是聲明結尾:

(VPXXX.PDXXX Between " + Param1 + " and " + Param2 + "))" 

當我嘗試添加「末平等」的聲明,我拋出一個錯誤「常規ODBC錯誤:

AND ((VPXXX.PDXXX=" + Param3 + "))" 

注:下面的最終作品

AND ((VPXXX.PDXXX='LDPDQ'))" 

它只是硬編碼一個單一的供應商

希望這是足夠的信息.....第一次建設SQL查詢。在此先感謝

+0

如果AND((VPXXX.PDXXX ='LDPDQ'))「'有效,你可能需要將引號加到AND((VPXXX.PDXXX =」+ Param3 +「))」',即AND(( VPXX X.PDXXX ='「+ Param3 +」'))「',除非引號已包含在您的單元格值中。 (P.S.爲什麼你有兩套'()'?不是它會影響事物,但也不應該需要。) – YowE3K

+0

1)謝謝!我很感激。我討厭有時候有多簡單:) 2)至於雙「()」我顯然已經被冗餘部助理助理訓練過了。 – RR33

+0

我會在引號中加上一個「答案」(只是爲了讓人們不要繼續看問題,認爲它還沒有解決),一旦我停止ROTFLMAO重新對雙括號進行響應。 – YowE3K

回答

1

假設你的價值本身不是封閉的單引號,你可能需要改變

AND ((VPXXX.PDXXX=" + Param3 + "))" 

包括引號,即

AND ((VPXXX.PDXXX='" + Param3 + "'))" 
1

至於說by @ YowE3K,你錯過了'來附上你的值,所以你的代碼應該是:

"VPXXX.PDXXX Between '" + Param1 + "' and '" + Param2 + "')" 

"AND (VPXXX.PDXXX='" + Param3 + "')" 

順便說一句,如果你使用任何IN語句在你的SQL查詢,這可能將非常方便:

Public Function ConcatSQL(RgToConcat As Range, Optional AllowMultipleS As Boolean = False) As String 
Dim CelRg As Range 
ConcatSQL = "('" 
For Each CelRg In RgToConcat.Cells 
    If CelRg.Value <> vbNullString And (InStr(1, ConcatSQL, CelRg.Value) = 0 Or AllowMultipleS) Then 
     ConcatSQL = ConcatSQL & CelRg.Value & "', '" 
    End If 
Next CelRg 
ConcatSQL = Left(ConcatSQL, Len(ConcatSQL) - 3) & ")" 
End Function 

如何使用:

"VPXXX.PDXXX IN " & ConcatSQL(Sheets("SHEET1").Range("P1:P3"))