c++ 如何使用ODBC .accdb驱动程序压缩Access数据库

w46czmvw  于 2023-02-20  发布在  其他
关注(0)|答案(1)|浏览(206)

我正在尝试确定如何使用.accdb ODBC驱动程序压缩Access数据库。请注意,我知道如何使用旧的.mdb驱动程序完成此操作,基本上类似于以下内容:

const TCHAR *Driver = TEXT("Microsoft Access Driver (*.mdb)");
  TCHAR *DatabasePath = GetRegDBPath() ;

  _stprintf_s(Attr, sizeof(Attr)/sizeof(TCHAR), TEXT("COMPACT_DB=%s%s %s%s General"), DatabasePath,
                                                  DBName,
                                                  DatabasePath,
                                                  DBName ) ;
  Ret = SQLConfigDataSource(hPar,
                            ODBC_ADD_DSN,
                            Driver,
                            Attr);

但是,如果将Driver字符串替换为 Microsoft Access Driver(.mdb,.accdb),则调用将失败,调用 SQLInstallerError * 以获取错误信息时将返回(非常无用的)消息: 驱动程序的ConfigDSN、ConfigDriver或ConfigTranslator失败 *。
我已经尝试了上述语法的变体,使用不同的输出数据库路径,省略General参数,所有这些都产生了相同的结果。
This link表示无法执行此操作,但我对此表示怀疑,因为可以从ODBC管理器面板执行此操作。另外,查看ACEODBC.DLL中的字符串内容,可以看到COMPACT_DB字符串的存在:
jon@monolith:~/临时$字符串-t x -e l ACEODBC.DLL|grep -i压缩395 f0压缩数据库39978压缩数据库=%s
所有这些都表明,如果我知道正确的语法是什么,这应该是可能的。

xesrikrc

xesrikrc1#

据我所知,没有,ODBC从来没有能够压缩访问数据库。
你发布的代码做了一个printf(简单输出一些文本),当然不会也不会做一个紧凑的数据库。下一行代码"可能" C + R的数据库,但该代码没有发布。
例如:

SQLConfigDataSource

我想上面使用的TEXT()方法也可能有一些代码,但是同样,您必须提供TEXT()方法的功能。
从我能找到的?
必须创建Access数据库引擎的"com"对象示例(JET用于mdb文件,ACE用于accDB文件)。

相关问题