今日講解的內(nèi)容為如何建立一個(gè)數(shù)據(jù)庫(kù)的連接,并實(shí)例講解利用連接從數(shù)據(jù)庫(kù)中查到有用的記錄,填在表格中的方法。 我們要先打開一個(gè)工作表,它的A列數(shù)值為要在數(shù)據(jù)庫(kù)中查詢的字段,并把在數(shù)據(jù)庫(kù)中查到此字段的其他內(nèi)容填充到這個(gè)工作表中的B:G列的位置。好我們先看下面的代碼,在代碼的過程中均有詳細(xì)的講解。有的容易些,有的難懂些,不過都沒關(guān)系,有興趣的讀者可以仔細(xì)地琢磨,都是一步一步看過來的。我在學(xué)VBA的時(shí)候,資料還很少很少,有的需要自己的摸索。待這個(gè)平臺(tái)的資料多些了,也希望能有位大俠給出本書,利于大家的學(xué)習(xí)。 1 Dim myData As String, myTable As String 2 Dim wb As Workbook 3 Dim ws As Worksheet 4 Dim i As Long, j As Long 5 6 7 Dim cnn As ADODB.Connection 8 Dim rs As ADODB.Recordset 9 Set wb = ThisWorkbook '指定工作簿 10 Set ws = wb.Sheets("A-RR") '指定工作表名稱 11 Dim PATH 12 PATH = ActiveWorkbook.Path '& "\" '路徑名稱 13 ChDir PATH 14 myData = "D:\RR" & "\myData.mdb" '指定新數(shù)據(jù)庫(kù)名稱(完整路徑) 15 myTable = "RR資料" '指定數(shù)據(jù)庫(kù)的數(shù)據(jù)表名稱 '檢查是否已經(jīng)存在同名數(shù)據(jù)庫(kù)文件 16 If Dir(myData) = "" Then 17 MsgBox (myData & "不存在!") '不存在的情況下,釋放變量,退出 18 Set wb = Nothing 19 Set ws = Nothing 20 Set rs = Nothing 21 22 23 Set cnn = Nothing 24 End 25 Else '如果已經(jīng)存在了數(shù)據(jù)庫(kù)文件,就檢查是否存在數(shù)據(jù)表 '建立與數(shù)據(jù)庫(kù)的連接 26 Set cnn = New ADODB.Connection 27 With cnn 28 .Provider = "microsoft.jet.oledb.4.0" 29 .Open myData 30 End With '開始查詢是否存在該數(shù)據(jù)表 31 Set rs = cnn.OpenSchema(adSchemaTables) 32 Do Until rs.EOF 33 If LCase(rs!table_name) = LCase(myTable) Then GoTo hhh '如果查到則退出循環(huán) '繼續(xù)查詢 34 rs.MoveNext 35 Loop '釋放變量,退出(這是沒有查到的情況) 36 Set wb = Nothing 37 Set ws = Nothing 38 Set rs = Nothing 39 40 41 Set cnn = Nothing 42 MsgBox ("不存在此工作表!") 43 End hhh: 44 End If '到此是找到了某個(gè)記錄,并打開了數(shù)據(jù)庫(kù) 45 Sheets("A-RR").Select 46 Range("B2:G3000").Clear '做填充數(shù)據(jù)的準(zhǔn)備 47 Set rs = New ADODB.Recordset 48 t = 2 49 Do While Cells(t, 1) <> "" 50 Cells(t, 1).Select 51 Sql = "select * from " & myTable _ 52 & " where RR = " & " '" & ws.Cells(t, 1).Value & "'" 53 rs.Open Sql, cnn, adOpenKeyset, adLockOptimistic 54 If rs.RecordCount = 0 Then '如果數(shù)據(jù)庫(kù)中沒有工作表的某行數(shù)據(jù),就 55 ws.Cells(t, 2).Value = "No Find" 56 ws.Cells(t, 3).Value = "No Find" 57 Else '如果數(shù)據(jù)庫(kù)中有工作表的某行數(shù)據(jù),就將數(shù)據(jù)進(jìn)行更新 58 ws.Cells(t, 2).Value = rs.Fields(1) 59 ws.Cells(t, 3).Value = rs.Fields(2) 60 End If 61 rs.Close '關(guān)閉,此處的RS必須要關(guān)閉,必須的。 62 t = t + 1 63 Loop 64 MsgBox "完成!", vbInformation + vbOKOnly '關(guān)閉數(shù)據(jù)庫(kù)及查詢數(shù)據(jù)集 65 cnn.Close '釋放變量 66 Set wb = Nothing 67 Set ws = Nothing 68 Set rs = Nothing 69 Set myCmd = Nothing 70 Set myCat = Nothing 71 Set cnn = Nothing 看看下面的截圖: 到此這項(xiàng)任務(wù)就完成了,利用VBA控制EXCEL是本平臺(tái)的較高水平的內(nèi)容,但程序的思想、思路和寫函數(shù)是一致的,都要按規(guī)定的線路來進(jìn)行。如果檢測(cè)到?jīng)]有按照自己的設(shè)想來運(yùn)行程序,那是絕對(duì)不可以的。關(guān)注本平臺(tái),會(huì)經(jīng)常有類似大段的代碼共大家參考。當(dāng)然,上述的代碼也是解決這類問題的一個(gè)通用的代碼,讀者可以使用,沒問題。 分享成果,隨喜正能量 Tags: 文章版權(quán)聲明:除非注明,否則均為稻草號(hào)原創(chuàng)文章,轉(zhuǎn)載或復(fù)制請(qǐng)以超鏈接形式并注明出處。 |
|