vba中主要提供了3种数据库访问接口 vba 连接数据库

今日讲解的内容为如何建立一个数据库的连接,并实例讲解利用连接从数据库中查到有用的记录,填在表格中的方法 。我们要先打开一个工作表,它的A列数值为要在数据库中查询的字段,并把在数据库中查到此字段的其他内容填充到这个工作表中的B:G列的位置 。好我们先看下面
今日讲解的内容为如何建立一个数据库的连接,并实例讲解利用连接从数据库中查到有用的记录,填在表格中的方法 。
我们要先打开一个工作表,它的A列数值为要在数据库中查询的字段,并把在数据库中查到此字段的其他内容填充到这个工作表中的B:G列的位置 。好我们先看下面的代码,在代码的过程中均有详细的讲解 。有的容易些,有的难懂些,不过都没关系,有兴趣的读者可以仔细地琢磨,都是一步一步看过来的 。我在学VBA的时候,资料还很少很少,有的需要自己的摸索 。待这个平台的资料多些了,也希望能有位大侠给出本书,利于大家的学习 。
1Dim myData As String, myTable As String
2Dim wb As Workbook
3Dim ws As Worksheet
4Dim i As Long, j As Long
5
6
7Dim cnn As ADODB.Connection
8Dim rs As ADODB.Recordset
9Set wb = ThisWorkbook\'指定工作簿
10Set ws = wb.Sheets("A-RR")\'指定工作表名称
11Dim PATH
12PATH = ActiveWorkbook.Path \'& "\\"\'路径名称
13ChDir PATH
14myData = "D:\\RR" & "\\myData.mdb"\'指定新数据库名称(完整路径)
15myTable = "RR资料"\'指定数据库的数据表名称
\'检查是否已经存在同名数据库文件
16If Dir(myData) = "" Then
17MsgBox (myData & "不存在!")
\'不存在的情况下,释放变量,退出
18Set wb = Nothing
19Set ws = Nothing
20Set rs = Nothing
21
22
23Set cnn = Nothing
24End
25Else
\'如果已经存在了数据库文件,就检查是否存在数据表
\'建立与数据库的连接
26Set cnn = New ADODB.Connection
27With cnn
28.Provider = "microsoft.jet.oledb.4.0"
29.Open myData
30End With
\'开始查询是否存在该数据表
31Set rs = cnn.OpenSchema(adSchemaTables)
32Do Until rs.EOF
33If LCase(rs!table_name) = LCase(myTable) Then GoTo hhh\'如果查到则退出循环
\'继续查询
34rs.MoveNext
35Loop
\'释放变量,退出(这是没有查到的情况)
36Set wb = Nothing
37Set ws = Nothing
38Set rs = Nothing
39
40
41Set cnn = Nothing
42MsgBox ("不存在此工作表!")
43End
hhh:
44End If
\'到此是找到了某个记录,并打开了数据库
45Sheets("A-RR").select
46Range("B2:G3000").Clear\'做填充数据的准备
47Set rs = New ADODB.Recordset
48t = 2
49Do While Cells(t, 1) <> ""
50Cells(t, 1).select
51Sql = "select * from " & myTable _
52& " where RR = " & " \'" & ws.Cells(t, 1).Value & "\'"
53rs.Open Sql, cnn, adOpenKeyset, adLockOptimistic
54If rs.RecordCount = 0 Then
\'如果数据库中没有工作表的某行数据,就
55ws.Cells(t, 2).Value = "https://www.jinnalai.com/n/No Find"
56ws.Cells(t, 3).Value = "https://www.jinnalai.com/n/No Find"
57Else
\'如果数据库中有工作表的某行数据,就将数据进行更新
58ws.Cells(t, 2).Value = https://www.jinnalai.com/n/rs.Fields(1)
59ws.Cells(t, 3).Value = https://www.jinnalai.com/n/rs.Fields(2)
60End If
61rs.Close \'关闭,此处的RS必须要关闭,必须的 。
62t = t + 1
63Loop
64MsgBox "完成!", vbInformation + vbOKOnly
\'关闭数据库及查询数据集
65cnn.Close
\'释放变量
66Set wb = Nothing
67Set ws = Nothing

推荐阅读