暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用VBA,如何建立一个MDB数据库的连接

VBA语言专家 2018-07-07
398

 点击上面蓝色字体关注公众号 



今日讲解的内容为如何建立一个数据库的连接,利用这个连接从数据库中查到有用的记录,并填在表格中。

我们要先打开一个工作表,它的A列数值为要在数据库中查询的字段,并把数据库中此字段的其他内容填充到这个工作表中的BG列的位置。好我们先看下面的代码,在代码的过程中均有详细的讲解。有的容易些,有的难懂些,不过都没关系,有兴趣的读者可以仔细地琢磨,都是一步一步看过来的。我在学VBA的时候,资料还很少很少,有的需要自己的摸索。待这个平台的资料多些了,也希望能有位大侠给出本书,利于大家的学习。

  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 APPPATH

12   APPPATH =ActiveWorkbook.Path '& "\" '路径名称

13   ChDir APPPATH   

 14  myData = "D:\RR"& "\myData.mdb"   '指定新数据库名称(完整路径)

 15  myTable = "RR资料"    '指定数据库的数据表名称

'检查是否已经存在同名数据库文件

16  If Dir(myData) ="" Then

 17    MsgBox (myData & "不存在!")

       '不存在的情况下,释放变量,退出

  18    Set wb = Nothing

  19    Set ws= Nothing

  20    Set rs= Nothing

  21   

  22   

  23    Setcnn = Nothing

  24    End

25  Else

    '如果已经存在了数据库文件,就检查是否存在数据表

    '建立与数据库的连接

26        Set cnn = NewADODB.Connection

27        With cnn

28            .Provider ="microsoft.jet.oledb.4.0"

29            .Open myData

30        End With

       '开始查询是否存在该数据表

  31      Set rs = cnn.OpenSchema(adSchemaTables)

  32       Do Until rs.EOF

33      IfLCase(rs!table_name) = LCase(myTable) Then GoTo hhh  '如果查到则退出循环

'继续查询

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  EndIf

  '到此是找到了某个记录,并打开了数据库

45 Sheets("A-RR").Select

46  Range("B2:G3000").Clear   '做填充数据的准备

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

           '如果数据库中没有工作表的某行数据,就

55              ws.Cells(t, 2).Value = "NoFind"

56              ws.Cells(t, 3).Value = "NoFind"           

57      Else

           '如果数据库中有工作表的某行数据,就将数据进行更新           

58             ws.Cells(t, 2).Value =rs.Fields(1)

59             ws.Cells(t, 3).Value = rs.Fields(2)             

60     End If

61     rs.Close '关闭,此处的RS必须要关闭,必须的。

62      t = t + 1   

63  Loop

64 MsgBox "完成!", vbInformation + vbOKOnly

'关闭数据库及查询数据集   

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

看看下面的截图:



 

到此这项任务就完成了,利用VBA控制EXCEL是本平台的较高水平的内容,但程序的思想、思路和写函数是一致的,都要按规定的线路来进行。如果检测到没有按照自己的设想来运行程序,那是绝对不可以的。关注本平台,会经常有类似大段的代码共大家参考。当然,上述的代码也是解决这类问题的一个通用的代码,读者可以使用,没问题。


分享成果,随喜正能量


长按二维码  关注公众号



长按二维码  关注VBA群


 


文章转载自VBA语言专家,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论