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