ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 25489|回复: 21

[分享] VBA ADO连接ACCESS数据库

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2018-2-21 12:35 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
一、ACCESS数据库加密
1、ACCESS 2013数据库加密方式
(1)使用旧版加密(适用于反向兼容和多用户数据)
(2)使用默认加密(安全性较高)
ADO连接仅支持旧版加密,使用VBA代码动态创建带密码的Access 数据库文件,也是旧版加密。
2、数据库如果采用手工设置密码,则要设置为旧版加密方式:
打开ACCESS 2013—Access选项—客户端设置—加密方法--使用旧版加密(适用于反向兼容和多用户数据)
二、设置ADO连接ACCESS数据库方式一
(1)引用 Microsoft ActiveX Data Objects 2.x Library(操作方式:Visual Basic-工具-引用,不同office版本不同)
  说明:当未引用,运行后会显示“用户定义类型未定义”
(2)连接代码
Sub 导入数据1()
    Dim cnn As ADODB.Connection      '数据库连接
    Dim mydata As String                   '数据库的完整路径和名称
    Dim mytable As String                  '数据表名称
    Dim sql As String                         'sql语句
    Dim rs As ADODB.Recordset          '临时数据表纪录
    Dim i As Integer                           '循环数据变量(获取数据表字段)

    '1、连接数据库
    Set cnn = New ADODB.Connection
    mydata = ThisWorkbook.Path & "\进销存数据库.accdb"

    With cnn
        .Provider = "Microsoft.ACE.OLEDB.12.0;Jet OLEDB:Database Password='123456'"
        .Open mydata
    End With

    '2、建立与数据库的连接
    mytable = "采购数据3"
    sql = "select 采购数据3.ID,采购数据3.采购日期,采购数据3.供货类型,采购数据3.采购分类,采购数据3.供应商,采购数据3.名称,采购数据3.单位,采购数据3.单价,采购数据3.数量,采购数据3.金额,采购数据3.入账日期" & " from " & mytable & " order by 采购日期"
    Set rs = New ADODB.Recordset
    rs.Open sql, cnn, adOpenKeyset, adLockOptimistic

     '3、复制数据库数据
    ' (1)清除原数据
    ActiveSheet.Cells.ClearContents

    '(2)复制字段名
    For i = 1 To rs.Fields.Count
        Cells(1, i) = rs.Fields(i - 1).Name
    Next i

    '(3)复制全部数据
    Range("A2").CopyFromRecordset rs

    rs.Close
    cnn.Close
    Set rs = Nothing
    Set cnn = Nothing

End Sub


三、设置ADO连接ACCESS数据库方式二
无需引用,直接创建连接
Sub 导入数据2()
    Dim cnn As Object                '数据库连接
    Dim strcnn As String             'ACCESS连接语句
    Dim mydata As String            '数据库的完整路径和名称
    Dim mytable As String           '数据表名称
    Dim sql As String                  'sql查询语句
    Dim rs As Object                  '临时数据表纪录
    Dim i As Integer                  '循环数据变量(获取数据表字段)

    '1、连接数据库
    Set cnn = CreateObject("ADODB.Connection")
    mydata = ThisWorkbook.Path & "\进销存数据库.accdb"

    Select Case Application.Version * 1    '设置连接字符串,根据版本创建连接
        Case Is <= 11
            strcnn = "Provider=Microsoft.Jet.Oledb.4.0;Jet OLEDB:Database Password='123456';Data Source=" & mydata
        Case Is >= 12
            strcnn = "Provider=Microsoft.ACE.OLEDB.12.0;Jet OLEDB:Database Password='123456';Data Source=" & mydata
    End Select

    cnn.Open strcnn    '打开数据库链接

    '2、设置sql查询语句
    mytable = "采购数据3"
    Set rs = CreateObject("ADODB.Recordset")

    sql = "select 采购数据3.ID,采购数据3.采购日期,采购数据3.供货类型,采购数据3.采购分类,采购数据3.供应商,采购数据3.名称,采购数据3.单位,采购数据3.单价,采购数据3.数量,采购数据3.金额,采购数据3.入账日期" & " from " & mytable & " order by 采购日期"
    Set rs = cnn.Execute(sql)    '执行查询,并将结果输出到记录集对象

    '3、复制数据库数据

    With ActiveSheet
        .Cells.ClearContents

        For i = 0 To rs.Fields.Count - 1    '填写标题
            .Cells(1, i + 1) = rs.Fields(i).Name
        Next i

        .Range("A2").CopyFromRecordset rs

        '.Cells.EntireColumn.AutoFit  '自动调整列宽
        '.Cells.EntireColumn.AutoFit  '自动调整列宽

    End With


    rs.Close
    cnn.Close
    Set rs = Nothing
    Set cnn = Nothing

End Sub





评分

6

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-2-21 17:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这个可以作为常用的模块还是不错的

TA的精华主题

TA的得分主题

发表于 2018-2-21 23:05 | 显示全部楼层
如果连入的对象是mysql, 应该要用什么方法能够达到近判断新数据并且上传至mysql呢?

TA的精华主题

TA的得分主题

发表于 2018-11-27 06:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
学习。
感谢楼主

TA的精华主题

TA的得分主题

发表于 2019-1-16 12:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
有记号 相当有用

TA的精华主题

TA的得分主题

发表于 2019-1-16 12:38 | 显示全部楼层
我公司都不提供access呢,只用excel作數據庫
但也難保不會用,先收藏了

TA的精华主题

TA的得分主题

发表于 2019-1-27 01:49 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-3-8 11:02 | 显示全部楼层
之前 用了很多方法,都连不上数据库。经测试,楼主方法好用。感谢分享!

TA的精华主题

TA的得分主题

发表于 2019-3-27 10:40 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-3-29 22:28 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-25 16:10 , Processed in 0.045685 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表