Sub Example()
Dim cnn As ADODB.Connection
Set cnn = New ADODB.Connection
'創(chuàng)建連接設(shè)置字符串,用OLEDB方式連接
Dim lian As String
lian = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;" _
& "HDR=yes;" _
& "IMEX=2';" _
& "Data Source=" & ThisWorkbook.FullName
'HDR=Yes,代表 Excel 檔中的工作表第一行是標(biāo)題欄,No,代表 Excel 檔中的工作表無標(biāo)題行
'IMEX 匯入模式 0 只讀 1 只寫 2 可讀寫
'Data Source 存儲查詢數(shù)據(jù)來源的工作薄名稱
'Provider 連接方式或連接提供程序 Extended Properties 連接方式的擴(kuò)展屬性、證書
'Extended Properties='Excel 12.0 ---EXECL 2007
'Extended Properties='Excel 8.0 ---EXECL 2003
cnn.Open lian
' ' 創(chuàng)建連接設(shè)置字符串,用ODBC方式打開連接.
' Dim lian As String
' lian = "Driver={Microsoft Excel Driver(*.xls,*xlsx,*.xlsm,*xlsb)};" _
' & "ReadOnly=False;" _
' & "DBQ=" & ThisWorkbook.FullName'
' 'driver ODBC連接驅(qū)動屬性
' 'ReadOnly 相當(dāng)于IMEX屬性
' 'DBQ 連接數(shù)據(jù)源
' con.Open lian
' 檢查是否完成連接
' If cnn.State = adStateOpen Then
' 'cnn.State -->adstratclosed 關(guān)閉狀態(tài) adstartopen 打開狀態(tài)
' 'adstartconnecting 連接中 adstartexecuting 執(zhí)行命令中
' MsgBox "Welcome to Pubs!"
' Else
' MsgBox "Sorry. No Pubs today."
' End If
'關(guān)閉connection對象
cnn.Close
'銷毀連接
Set cnn = Nothing
'設(shè)置SQL命令的字符串
Dim SqlCommandStr As String
SqlCommandStr = "SELECT top 10 存貨編碼 from [主材匯總$] "
'[主材匯總$]--連接數(shù)據(jù)源中的具體表名,可指定具體的range,直接跟在表名后即可 ,也可使用在表中定義的名稱
'如果設(shè)置第一行為標(biāo)題,則可直接使用第一行數(shù)據(jù)為字段名
'SqlCommandStr = "SELECT 存貨名稱 from [主材匯總$A1:M100] where 存貨編碼='A01020506001500200'"
'執(zhí)行SQl命令
'A、不要返回值
'cnn.Execute SqlCommandStr
' Execute方法: Execute <SQL命令文本>,[recordsaffected 查詢作用范圍],[options 參數(shù)選項]
' [recordsaffected 查詢作用范圍] 如:1NumAffected 僅第一條記錄
' [options 參數(shù)選項] -- SQL命令類型 or 執(zhí)行方式
' SQL命令類型:
' adcomdtext: 原始 SQL字符串
' adcomdtable: 表的名稱,向連接提供驅(qū)動提供類似 SELECT * from_name的語句
' adcmdstoreproc: 存儲過程
' adcmdtabledirect:表名,不同于table的是不會產(chǎn)生類似 SELECT * from_name的SQL語句
' SQL命令執(zhí)行方式:
' adasyncexecute: 異步執(zhí)行命令,立即執(zhí)行代碼
' adexecutenorecords: 不構(gòu)建recoredset對像
' 如:adcmdtext or adexecutenorecords
'B、需要返回值
Dim jilu As ADODB.Recordset
Set jilu = New ADODB.Recordset
jilu.Open SqlCommandStr, lian
' open方法:open <SQL命令文本或數(shù)據(jù)源>,<activeconnection>,[cursortype],[locktype],[options 參數(shù)選項]
' <activeconnection> 指定用于查詢的連接設(shè)置,可以O(shè)PEN方法以前將一個字符串賦值給Recordset的activeconnection屬性,那么該記錄集則自動產(chǎn)生
' 一個connection對像
' [cursortype] 打開記錄集時的數(shù)據(jù)指針類型:默認(rèn)值為adopenforwardonly
' adopenforwardonly-->只能向下移動且不能修改,常規(guī)查詢
' adopenstatic -->靜態(tài)指針,用于脫機(jī)記錄集,允許完全操作
' 此參數(shù)不同于OPEN方法之前設(shè)置的Recordset的cursorlocation屬性(規(guī)定recordset使用的數(shù)據(jù)指針類型:
' aduserclient --客戶端數(shù)據(jù)指針
' aduseserver-- 服務(wù)器端數(shù)據(jù)指針,默認(rèn)值)
' [locktype] 打開記錄時的數(shù)據(jù)源鎖定類型:
' adlockreadonly:常規(guī)查詢使用,鎖定源記錄
' adlockbatchoptimistic:脫機(jī)記錄集使用,開放式批量更新
' [options 參數(shù)選項] -- SQL命令類型 or 執(zhí)行方式 connection對象的Execute方法設(shè)置相同
Do While Not jilu.EOF '如果指針不是未尾則表示記錄內(nèi)有數(shù)據(jù)
'EOF --指針位于記錄集最后一條記錄之后 BOF --指針位于記錄集第一條記錄之前(Recordset對象的屬性)
MsgBox jilu.Fields(0).Value
'Fields對象:記錄集所包括的所有字段,帶有Name,Item,Value等屬性與Append等方法
jilu.MoveNext
'Move方法:
' MoveFirst:移動到第一條記錄
' MoveLast: 移動最后一條記錄
' MoveNext:移動到下一條記錄
Loop
jilu.Filter = "存貨編碼 like 'A0202*'"
'.Filter屬性:對記錄按一定條件進(jìn)行選擇過濾但不刪除數(shù)據(jù),將過濾條件設(shè)置為空則恢復(fù)所有數(shù)據(jù),多個條件可以使用邏輯運(yùn)算符進(jìn)行聯(lián)接
Do While Not jilu.EOF
MsgBox jilu.Fields(0).Value
Loop
'關(guān)閉Recordset
jilu.Close
'銷毀Recordset
Set jilu = Nothing
End Sub