今天,我們來學習下大家可能最不熟悉的一個子集——Command(命令)。 命令的創(chuàng)建跟連接并沒什么區(qū)別,同樣可以這樣寫: - Dim cmd As NewADODB.Command
復制代碼 或者 - Dim cmd AsADODB.Command
- Set cmd = NewADODB.Command
復制代碼 Command對象代表SQL命令,雷類似于Access中的查詢,但一般指定連接字符串和SQL語句,再用執(zhí)行方法即可處理。 現(xiàn)在我們回頭看看上一節(jié)講過的內(nèi)容。上一節(jié)里我說過了,對于操作查詢,連接可以直接通過Execute來執(zhí)行就可以,而對于選擇查詢則需要創(chuàng)建一個記錄集來存儲信息,然后才能讀取出來。 這一點對Command同樣適用,F(xiàn)在,假設E盤有一個MyExcel文件,想讀取里面的myExcel工作表中的某個值。我們該怎么做呢? 根據(jù)前面學到的知識,我們知道,首先需要創(chuàng)建一個記錄集來存儲數(shù)據(jù),于是: - Dim rst As NewADODB.Recordset
復制代碼 由于需要執(zhí)行一個查詢命令,因此需要創(chuàng)建一個Command對象: - Dim cmd As NewADODB.Command
復制代碼 然后為這個命令指定參數(shù):連接字符串和SQL命令。需要注意的是,對Excel文件常常需要加上美元符號($)作為工作表符: - cmd.ActiveConnection= "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 4.0;DataSource=E:\myExcel.xls"
- cmd.CommandText= "select * from [myExcel$]"
復制代碼 最后把執(zhí)行的命令賦值給記錄集:Set rst = cmd.Execute并讀取出來即可。完整代碼如下: - Sub myQuery()
- Dim cmd As NewADODB.Command
- Dim rst As NewADODB.Recordset
- cmd.ActiveConnection= "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 4.0;DataSource=E:\myExcel.xls"
- cmd.CommandText= "select * from [myExcel$]"
- Set rst =cmd.Execute
- Debug.Printrst(1)’在立即窗口上打印出來。
- End Sub
復制代碼 接下來,我們來個有些難度的:用Command對象執(zhí)行參數(shù)查詢。為此,我們先來看看參數(shù)查詢的標準SQL語句: - PARAMETERS 違規(guī)月份 Text ( 255 );
- SELECT *
- FROM myTable
- WHERE myTable.違規(guī)月份=[違規(guī)月份];
復制代碼 和大家一樣,我也很少用參數(shù)查詢。這里還是簡要說下吧:在Select前面加上這一個子句(別忘了輸入分號哦),標識著這是一個參數(shù)查詢,需要輸入一個文本類型的參數(shù):違規(guī)月份。當用戶輸入?yún)?shù)后,便用Where子句來接收輸入值,作為條件進行查詢。也就是說,“[違規(guī)月份]”是一個值,而不是myTable的一個字段。你也可以用別的參數(shù)名稱來代替“違規(guī)月份”,但需要跟前面的參數(shù)一致!夜室膺@樣寫,是為了考下大家是否知道這兩者的區(qū)別。 好了,扯遠了。我們回來看看這個任務。根據(jù)上面提到的原理,就需要用Parameters來處理參數(shù)傳遞的問題了。代碼如下: - Sub parQuery()
- Dim rst As NewADODB.Recordset
- Dim cmd As NewADODB.Command
- Dim i As Long
- cmd.ActiveConnection= CurrentProject.Connection
- cmd.CommandText= "PARAMETERS 違規(guī)月份 Text ( 255 ); SELECT * FROMmyTable WHERE 違規(guī)月份 =[違規(guī)月份]"
- cmd.CommandType= adCmdText
- Set rst =cmd.Execute(parameters:="1月")
- ’也可以按參數(shù)順序來寫:Set rst = cmd.Execute(,"1月")
- Debug.Print rst(3)
- End Sub
復制代碼 似乎和前面幾乎沒太大區(qū)別。除了SQL語句外,唯一的區(qū)別就是在賦值給記錄集時使用了參數(shù)。另外,我們知道,問號(?)表示任意字符,因此,參數(shù)查詢同樣可以簡化為: - SELECT * FROMmyTable WHERE 違規(guī)月份=?
復制代碼 同樣地,將這個語句換到上述的VBA語句里,同樣是一個參數(shù)查詢。這里就不再列出代碼了,大家可以自行測試。 |