ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请教各位老师指点,压缩数据库代码怎么写

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-3-8 15:17 | 显示全部楼层 |阅读模式
office版本=office2010 32位
在access2010创建数据库(access 2007-2010)
access选项 客户端设置:使用旧版加密
数据库以独占方式打开设置加密密码
ExcelVBA操控access数据库,连接代码见下
With con         
.Provider = "Microsoft.Ace.Oledb.12.0;Jet Oledb:Database Password=123456"         
.ConnectionString = "Data Source=" & ThisWorkbook.Path & "\abcd.accdb"         
.Open     
End With

问题,压缩数据库代码怎么写,需要引用什么?
要求压缩后的新数据库文件与压缩前的属性(数据库版本,文件后缀,密码,加密方式)一致。

TA的精华主题

TA的得分主题

发表于 2024-3-8 15:57 | 显示全部楼层
在Access 2010中,没有直接通过VBA代码压缩数据库文件的内置功能。但是,你可以使用CompactDatabase方法来减少数据库文件的大小,并移除未使用的空间。不过,这个方法不会改变数据库的加密方式或密码。

要压缩Access数据库并保持其加密方式、密码和其他属性不变,你可以使用以下步骤:

确保数据库以独占方式打开:在压缩之前,确保没有其他用户或进程正在访问数据库。

使用CompactDatabase方法:在Access VBA中,你可以使用CompactDatabase方法来减少数据库文件的大小。

保持加密方式和密码:由于CompactDatabase方法不会改变加密方式或密码,你不需要做额外的操作来保持这些属性。但是,请确保在连接字符串中正确指定了密码。

下面是一个示例VBA代码,展示了如何在Access VBA中压缩数据库:

vba
Sub CompactDatabaseExample()  
    Dim dbPath As String  
    Dim newDbPath As String  
    Dim db As DAO.Database  
    Dim conn As ADODB.Connection  
      
    ' 设置数据库路径  
    dbPath = ThisWorkbook.Path & "\abcd.accdb"  
    newDbPath = ThisWorkbook.Path & "\abcd_compact.accdb"  
      
    ' 创建一个新的ADO连接以独占方式打开数据库  
    Set conn = New ADODB.Connection  
    With conn  
        .Provider = "Microsoft.ACE.OLEDB.12.0"  
        .Properties("Data Provider").Value = "Microsoft.ACE.OLEDB.12.0"  
        .Properties("Jet OLEDB:Database Password").Value = "123456" ' 设置数据库密码  
        .Open "Data Source=" & dbPath & ";"  
    End With  
      
    ' 使用DAO对象模型打开数据库以进行压缩  
    Set db = DBEngine.OpenDatabase(dbPath, False, False, "Microsoft.ACE.OLEDB.12.0;Jet OLEDB:Database Password=123456;")  
      
    ' 压缩数据库到新的文件  
    db.CompactDatabase newDbPath, "Microsoft.ACE.OLEDB.12.0;Jet OLEDB:Database Password=123456;"  
      
    ' 关闭数据库和连接  
    db.Close  
    conn.Close  
    Set db = Nothing  
    Set conn = Nothing  
      
    ' 可选:删除原始数据库并将新数据库重命名为原始名称  
    ' Kill dbPath ' 删除原始数据库文件(谨慎使用)  
    ' Name newDbPath As dbPath ' 重命名新数据库为原始名称  
End Sub
请注意以下几点:

这个示例使用了ADO和DAO对象模型来操作数据库。你可能需要在VBA编辑器中通过“工具”->“引用”来添加对Microsoft ActiveX Data Objects x.x Library和Microsoft DAO x.x Object Library的引用。
CompactDatabase方法需要一个目标文件路径作为第一个参数,以及一个连接字符串作为第二个参数(在这个连接字符串中,你需要指定数据库密码以保持加密)。
在压缩完成后,你可以选择删除原始数据库文件并将新数据库文件重命名为原始名称。但是,在执行这样的操作之前,请确保备份所有重要数据,因为Kill命令会永久删除文件。
确保在压缩数据库之前没有其他用户或进程正在访问它,否则可能会遇到错误。
最后,请确保你的Excel VBA代码中的连接字符串与Access数据库的加密方式和密码相匹配。在你的代码中,你已经正确设置了密码,但是请注意Provider的值应该是Microsoft.ACE.OLEDB.12.0而不是Microsoft.Ace.Oledb.12.0(注意大小写和空格)。正确的连接字符串应该类似于:

vba
.Provider = "Microsoft.ACE.OLEDB.12.0"  
.ConnectionString = "Data Source=" & ThisWorkbook.Path & "\abcd.accdb;Jet OLEDB:Database Password=123456;"

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-9 01:08 | 显示全部楼层
在Access 2010中,没有直接通过VBA代码压缩数据库文件的内置功能。但是,你可以使用CompactDatabase方法来减少数据库文件的大小,并移除未使用的空间。不过,这个方法不会改变数据库的加密方式或密码。

要压缩Access数据库并保持其加密方式、密码和其他属性不变,你可以使用以下步骤:

确保数据库以独占方式打开:在压缩之前,确保没有其他用户或进程正在访问数据库。

使用CompactDatabase方法:在Access VBA中,你可以使用CompactDatabase方法来减少数据库文件的大小。

感谢您的及时回复!求助的代码是要在ExcelVBA运行的(可能没交代清楚)。您提供的这段代码运行了一下,在连接数据库那行就报错了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-11 00:13 | 显示全部楼层
不能沉啊,顶上去让高手看到。有同样问题的同学吗,助力啊!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-29 20:24 , Processed in 0.035932 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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