設為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

12下一頁
返回列表 發(fā)新帖
查看: 18041|回復: 14
打印 上一主題 下一主題

[ADO/DAO] 【新手入門】之十三:淺談ADO之Conmmand(上)

[復制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2014-11-12 10:31:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
       今天,我們來學習下大家可能最不熟悉的一個子集——Command(命令)。
       命令的創(chuàng)建跟連接并沒什么區(qū)別,同樣可以這樣寫:
  1. Dim cmd As NewADODB.Command
復制代碼
       或者
  1. Dim cmd AsADODB.Command
  2. 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ù),于是:
  1. Dim rst As NewADODB.Recordset
復制代碼
      由于需要執(zhí)行一個查詢命令,因此需要創(chuàng)建一個Command對象:
  1. Dim cmd As NewADODB.Command
復制代碼
      然后為這個命令指定參數(shù):連接字符串和SQL命令。需要注意的是,對Excel文件常常需要加上美元符號($)作為工作表符:
  1. cmd.ActiveConnection= "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 4.0;DataSource=E:\myExcel.xls"
  2. cmd.CommandText= "select * from [myExcel$]"
復制代碼
      最后把執(zhí)行的命令賦值給記錄集:Set rst = cmd.Execute并讀取出來即可。完整代碼如下:
  1. Sub myQuery()
  2. Dim cmd As NewADODB.Command
  3. Dim rst As NewADODB.Recordset
  4. cmd.ActiveConnection= "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 4.0;DataSource=E:\myExcel.xls"
  5. cmd.CommandText= "select * from [myExcel$]"
  6. Set rst =cmd.Execute
  7. Debug.Printrst(1)’在立即窗口上打印出來。
  8. End Sub
復制代碼
      接下來,我們來個有些難度的:用Command對象執(zhí)行參數(shù)查詢。為此,我們先來看看參數(shù)查詢的標準SQL語句:
  1. PARAMETERS 違規(guī)月份 Text ( 255 );
  2. SELECT  *
  3. FROM myTable
  4. WHERE myTable.違規(guī)月份=[違規(guī)月份];
復制代碼
      和大家一樣,我也很少用參數(shù)查詢。這里還是簡要說下吧:在Select前面加上這一個子句(別忘了輸入分號哦),標識著這是一個參數(shù)查詢,需要輸入一個文本類型的參數(shù):違規(guī)月份。當用戶輸入?yún)?shù)后,便用Where子句來接收輸入值,作為條件進行查詢。也就是說,“[違規(guī)月份]”是一個值,而不是myTable的一個字段。你也可以用別的參數(shù)名稱來代替“違規(guī)月份”,但需要跟前面的參數(shù)一致!夜室膺@樣寫,是為了考下大家是否知道這兩者的區(qū)別。
       好了,扯遠了。我們回來看看這個任務。根據(jù)上面提到的原理,就需要用Parameters來處理參數(shù)傳遞的問題了。代碼如下:
  1. Sub parQuery()
  2. Dim rst As NewADODB.Recordset
  3. Dim cmd As NewADODB.Command
  4. Dim i As Long
  5. cmd.ActiveConnection= CurrentProject.Connection
  6. cmd.CommandText= "PARAMETERS 違規(guī)月份 Text ( 255 ); SELECT  * FROMmyTable WHERE 違規(guī)月份 =[違規(guī)月份]"
  7. cmd.CommandType= adCmdText
  8. Set rst =cmd.Execute(parameters:="1月")
  9. ’也可以按參數(shù)順序來寫:Set rst = cmd.Execute(,"1月")
  10.     Debug.Print rst(3)
  11. End Sub
復制代碼
       似乎和前面幾乎沒太大區(qū)別。除了SQL語句外,唯一的區(qū)別就是在賦值給記錄集時使用了參數(shù)。另外,我們知道,問號(?)表示任意字符,因此,參數(shù)查詢同樣可以簡化為:
  1. SELECT * FROMmyTable WHERE 違規(guī)月份=?
復制代碼
同樣地,將這個語句換到上述的VBA語句里,同樣是一個參數(shù)查詢。這里就不再列出代碼了,大家可以自行測試。
【新手入門】之一:If分支語句
【新手入門】之二:分支語句總結
【新手入門】之三:循環(huán)語句For
【新手入門】之四:循環(huán)語句Do和死循環(huán)
【新手入門】之五:公共變量與傳址過程、傳值過程
【新手入門】之六:“悲歡離合總無情”——淺談Split和Join
【新手入門】之七:嵌套與并列——再談If流程問題
【新手入門】之八:“連就連”——淺談“&”和“+”連接符的區(qū)別

【新手入門】之九:從百錢百雞談起——淺談“規(guī)劃求解”兼答lingjiang問
【新手入門】之十:書到用時方恨少——自定義菜單(Access 2003)的制作
【新手入門】之十一:淺談ADO之序言
【新手入門】之十二:淺談ADO之Connection
【新手入門】之十三:淺談ADO之Conmmand(上)
【新手入門】之十四:淺談ADO之Command(下)
【新手入門】之十五:淺談ADO之Recordset(上)
【新手入門】之十六:淺談ADO之Recordset(下)
【新手入門】之十七:淺談列表框的使用
【新手入門】之十八:雙擊列表框修改數(shù)據(jù)
【新手入門】之十九:從“書與女友恕不外借”談起——淺談“Bookmark”的使用
【新手入門】之二十:“書與書簽”——bookmark屬性答疑
【新手入門】之二十一:記錄集的“凌遲”——逐條導出記錄集

【新手進階】之一:基礎算法(一)
【新手進階】之二:基礎算法(二)
【新手進階】之三:基礎算法(三)
【新手進階】之四:基礎算法(四)
【新手進階】之五:排序搜索(一)
【新手進階】之六:排序搜索(二)
【新手進階】之七:遞歸算法
【新手進階】之八:冒泡排序
【新手進階】之九:淺談不綁定數(shù)據(jù)源操作記錄
【新手進階】之十:工作日的計算
【新手進階】之十一:“庖丁解!焙汀凹o昌學射”——淺談表格式文本數(shù)據(jù)的導入
【新手進階】之十二:從四腳騰空的奔馬談起——原來界面可以這樣設計
【新手進階】之十三:Outlook風格導航界面
【新手進階】之十四:倉庫管理系統(tǒng)

本帖被以下淘專輯推薦:

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖1 訂閱訂閱
2#
發(fā)表于 2014-11-13 07:23:46 來自手機 | 只看該作者
沒人討論啊,那我來問幾個問題,我是新手,可能問題很低級,希望樓主不要笑話。
3#
發(fā)表于 2014-11-13 07:41:26 來自手機 | 只看該作者
本帖最后由 cfedf 于 2014-11-13 07:52 編輯

    樓主在上文說到ado有五個子集,
ADO有五個子集。分別是
Connection(連接)、Command(命
令)、Recordset(記錄集)、Record
(記錄)和Stream(數(shù)據(jù)流)。
     那這幾個子集作用是什么?是用connection連接數(shù)據(jù)源,通過command來查詢,那recordset和record有什么用?
    因為我是在access里面操作,最好能在access里面說。謝謝樓主。

4#
 樓主| 發(fā)表于 2014-11-13 09:13:01 | 只看該作者
cfedf 發(fā)表于 2014-11-13 07:41
樓主在上文說到ado有五個子集,
ADO有五個子集。分別是
Connection(連接)、Command(命

序言部分沒認真看吧?
Record其實是Recordset的一個子集,只是記錄集中的一條記錄或者只有一條記錄的記錄集。由于創(chuàng)建記錄集后就可以直接按要求選擇所需記錄,因此根本不必創(chuàng)建Record子集。Stream對象則代表數(shù)據(jù)流,一般用于文本類型或者長二進制等數(shù)據(jù)。
Connection部分是必須的。不管用Recordset還是Command,都需要先連接數(shù)據(jù)源。只是在Access里,默認有一個CurrentProject.Connection,所以不需要再次新建而已
5#
發(fā)表于 2014-11-14 07:01:41 來自手機 | 只看該作者
呵呵,問個具體的問題。

Sub parQuery()
Dim rst As NewADODB.Recordset
Dim cmd As NewADODB.Command
Dim i As Long
cmd.ActiveConnection=
CurrentProject.Connection
這段代碼是不是不管什么時候都要用。還有代碼是寫在窗體里的文本控件框里嗎?我現(xiàn)在有點感覺了對ado,就是沒有法子去驗證想法。
6#
 樓主| 發(fā)表于 2014-11-14 08:59:54 | 只看該作者
本帖最后由 roych 于 2014-11-14 09:01 編輯
cfedf 發(fā)表于 2014-11-14 07:01
呵呵,問個具體的問題。

Sub parQuery()

       這是創(chuàng)建了一個數(shù)據(jù)連接,需要執(zhí)行的命令文本或者記錄集都還沒有創(chuàng)建。如果需要展示數(shù)據(jù)或者執(zhí)行命令,還需要寫上SQL語句,或者將Command賦值給rst。這段代碼一般是寫在按鈕的單擊事件里。當然,也可以寫在模塊里。       等周末把Recordset部分寫完,你系統(tǒng)地學習完之后,應該會有更大的收獲。
7#
發(fā)表于 2014-11-14 12:00:37 來自手機 | 只看該作者
好,期待你的大作,最好能演示一下或給個例子,只要知道在哪里寫代碼,就好辦了,F(xiàn)在對ado沒具體印象,我看人家視頻是在vb窗口連,沒有練習很無奈。徒有殺龍術,卻無龍兒殺。無奈無奈。
8#
發(fā)表于 2014-11-15 10:56:52 來自手機 | 只看該作者
roych 發(fā)表于 2014-11-14 08:59
這是創(chuàng)建了一個數(shù)據(jù)連接,需要執(zhí)行的命令文本或者記錄集都還沒有創(chuàng)建。如果需要展示數(shù)據(jù)或者執(zhí)行 ...

向樓主學習一下,我把我的理解說一下,看看對不對,感謝樓主指導。

Sub parQuery()
Dim rst As NewADODB.Recordset
定義rst為adodb.recordset

Dim cmd As NewADODB.Command
定義cmd為adodb.command

Dim i As Long
定義i為長型

cmd.ActiveConnection=
CurrentProject.Connection
激活cmd,問題是cmd不是command嗎?

cmd.CommandText= "PARAMETERS
違規(guī)月份 Text ( 255 ); SELECT  *
FROMmyTable WHERE 違規(guī)月份 =[違
規(guī)月份]"
cmd.commandtext是什么?
text(255)是什么?

cmd.CommandType= adCmdText
把adcmdtext賦值給cmd.commandtext

Set rst =cmd.Execute(parameters:="1
月")
’也可以按參數(shù)順序來寫:Set rst =
cmd.Execute(,"1月")
執(zhí)行cmd并把值給rst

Debug.Print rst(3)
打印rst(3),rst(3)是那里來的了?
End Sub
9#
 樓主| 發(fā)表于 2014-11-15 17:51:20 | 只看該作者
cfedf 發(fā)表于 2014-11-15 10:56
向樓主學習一下,我把我的理解說一下,看看對不對,感謝樓主指導。

Sub parQuery()

見紅色字體:
cmd.ActiveConnection=
CurrentProject.Connection
激活cmd,問題是cmd不是command嗎?
---這不是激活,而是把數(shù)據(jù)連接賦予cmd對象。
cmd.CommandText= "PARAMETERS
違規(guī)月份 Text ( 255 ); SELECT  *
FROMmyTable WHERE 違規(guī)月份 =[違
規(guī)月份]"
cmd.commandtext是什么?
text(255)是什么?
----commandtext是需要執(zhí)行的SQL命令語句。沒有這個語句command對象不知道要執(zhí)行什么。
----text(255)表示的需要輸入的參數(shù)類型,也就是說,輸入的參數(shù)必須為文本類型,字符串長度不能超過255。
cmd.CommandType= adCmdText
把adcmdtext賦值給cmd.commandtext
----這是命令類型,adCmdText表示的是最常用的文本型,還有其它的類型(如果需要將記錄集保存到本地,——這一點將在Recordset里進行討論,則可以是其它類型)。
Set rst =cmd.Execute(parameters:="1
月")
’也可以按參數(shù)順序來寫:Set rst =
cmd.Execute(,"1月")
執(zhí)行cmd并把值給rst
--理解正確。
Debug.Print rst(3)
打印rst(3),rst(3)是那里來的了?
--rst(3)表示的是原記錄集的第四個字段。如果沒有那么多字段,這個將會出錯。同理,rst(0)即第一個字段,如此類推。有需要的話,還可以設置循環(huán)。我這里暫時略過。
End Sub
10#
發(fā)表于 2014-11-17 07:52:08 來自手機 | 只看該作者
來象你學習,問一下,劉小軍多條件查詢,最后用的是dao,假如用ado,能查詢嗎?
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2025-7-17 00:39 , Processed in 0.097246 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表