在使用SQL語句時,我們只需要遵循SQL的語法規則。但是,VBA的構造不僅要遵循SQL的語法規則,還要遵循VBA的語法規則。然後會有更多。好吧。
如連接器(&;)、雙引號(")等符號,很多初學者被這些符號搞糊塗了。下面簡單說壹下如何通過拆分法理解VBA動態SQL語句的結構。
雖然我們可以在查詢時將查詢條件綁定到表單控件,如下例所示:
挑選
*來自訂單表,其中客戶名稱
=表單!客戶查詢表!客戶名稱輸入框,但這只能應用於相對簡單的查詢。隨著條件復雜度的增加,構造SQL語句的難度也會線性上升。更重要的是,事實如此。
SQL語句很難理解,即使最終做出來了,如果過壹段時間需要修改也會很麻煩。
所以我們用變量來構建VBA的動態。
SQL語句成為理想的選擇。讓我們看壹個例子。例如,我們需要在表單上輸入相應的文本框(txt客戶名稱、txt開始日期和txt結束日期)。
構造壹條SQL語句,在訂單表中查詢客戶某段時間的銷售記錄,VBA的代碼如下:
strSQL= "
select * FROM order table Where customer name = ' www . gzlij . com ' &;' Me.txt客戶& & " '
和銷售日期之間# " &;Me.txt開始日期& " #和# " & ampMe.txt結束日期
& amp"#"
如何理解上述說法?這裏通過替換的方法來拆分,讓我們假設文本框的值是:
Txt開始日期=2010-5-1
Txt結束日期=2010-5-31
Txt客戶名稱=東南工業
根據以上條件,我們需要得到的SQL語句應該是:
Select * FROM order table其中customer name = " Southeast Industry "和銷售日期在# 2010-5-1 #和# 2010-5-31 #之間
因為是要在VBA構造的,而在VBA雙引號(")是字符串分隔符,所以我們需要把它改成單引號('),以符合VBA的語法規則,所以SQL語句變成了:
Select * FROM order table,其中客戶名稱=' Southeast Industry ',銷售日期介於# 2010-5-1 #和# 2010-5-31 #之間
(當然,我們也可以根據VBA語法使用兩個雙引號,這樣VBA編譯器就會把這兩個連續的雙引號識別為壹個雙引號字符,而不是壹個字符串分隔符,但這樣相對來說更復雜麻煩,還有其他原因我這裏就不細說了。)
讓我們把裏面的條件值改回變量。因為條件需要用變量來代替,所以我們把上面的SQL語句拆分成以下片段:
Select * FROM order table,其中客戶名稱=' Southeast Industry ',銷售日期介於# 2010-5-1 #和# 2010-5-31 #之間
然後把條件值改成變量,就變成了:
Select * FROM order table,其中customer name = ' me . txt customer name ',銷售日期介於#Me.txt開始日期#和#Me.txt結束日期#之間
接下來,在不是變量的片段兩端加上雙引號,使其符合VBA的字符串語法:
" Select * FROM order table,其中customer name = ' " me . txt customer name " ',銷售日期介於#"Me.txt start date "#和#"Me.txt end date" #之間"
最後,我們使用連接器(&;)將拆分後得到的這些片段組合成壹個字符串(註意使用連接符組合多個字符串或變量時,連接符兩邊要有空格),得到我們需要的VBA中動態SQL語句的編寫方法:
“選擇
*來自訂單表,其中客戶名稱= ' " &;Me.txt客戶& & "和銷售日期之間# "
& ampMe.txt開始日期&;" #和# " & ampMe.txt &的結束日期;"#"