如何使用ODBC .accdb驱动压缩Access数据库?
使用ACE ODBC驱动压缩Access (.accdb) 数据库的正确方法
针对你遇到的问题,ACE ODBC驱动(支持*.accdb)的COMPACT_DB参数格式与旧版.mdb驱动不同,核心区别是用分号分隔源文件、目标文件和选项,而非空格。以下是修正后的实现代码:
const TCHAR *Driver = TEXT("Microsoft Access Driver (*.mdb, *.accdb)"); TCHAR *DatabasePath = GetRegDBPath(); TCHAR sourceDB[MAX_PATH], destDB[MAX_PATH]; _stprintf_s(sourceDB, TEXT("%s%s"), DatabasePath, DBName); _stprintf_s(destDB, TEXT("%s_compacted%s"), DatabasePath, DBName); // 目标文件名需与源文件不同 // 注意格式:COMPACT_DB=源文件;目标文件[;选项] _stprintf_s(Attr, sizeof(Attr)/sizeof(TCHAR), TEXT("COMPACT_DB=%s;%s"), sourceDB, destDB); Ret = SQLConfigDataSource(hPar, ODBC_ADD_DSN, Driver, Attr);
关键调整点:
- 参数分隔符:将旧版的空格分隔改为分号
;,ACE驱动的COMPACT_DB格式为COMPACT_DB=源路径;目标路径 - 目标文件:必须指定一个不存在的文件(或先删除现有目标文件),否则压缩会失败
- 可选参数:如果需要指定压缩选项(如数据库版本、加密),可以追加在目标文件后,例如:
// 压缩为Access 2007-2016格式(.accdb)并加密 _stprintf_s(Attr, sizeof(Attr)/sizeof(TCHAR), TEXT("COMPACT_DB=%s;%s;Version=12;Encrypt=Yes"), sourceDB, destDB);
额外注意事项:
- 确保程序位数与ACE驱动匹配:32位程序需使用32位ACE驱动,64位程序对应64位驱动,否则会出现驱动加载失败的问题
- 目标路径需有写入权限,避免因权限不足导致压缩失败
- 若仍报错,可通过
SQLInstallerError获取更详细的错误代码,结合官方文档排查
内容的提问来源于stack exchange,提问作者fridgemagnet
相关产品推荐
相关产品推荐

