在C++BUILDER中如何压缩access数据库?(300分)

  • 主题发起人 主题发起人 yuanboshi
  • 开始时间 开始时间
Y

yuanboshi

Unregistered / Unconfirmed
GUEST, unregistred user!
我查了一些关于delphi 压缩access的资料,通常的办法是利用compactdatabase函数,但我在c++builder 中未能找到相应的函数,请各位高手帮忙解决,我愿意出300分!
 
你必须先装入Microsoft Jet and Replication Objects 这个库,他才可以进行access的压缩工作。
在bcb中选择Project->Import Type Library选项,然后选择
Microsoft Jet and Replication Objects 2.5 Library或
Microsoft Jet and Replication Objects 2.5 Library然后install
你可以在ActiveX页看到JetEngin这个控件。
他就可以压缩数据库
JetEngin1->CompactDatabass();
 
关于各个专题,老兄可否提供多一些信息资源以便我等进一步提高?
 
大家要什么样的信息
 
关于Import Type Library的技术,在公开文献上很少见到,导入成为OCX控件之后,
需要进行数据类型转换,比如w_char到AnsiString的转换,BCB这方面的资料较少。可以提
供一点这方面的信息吗?
自己试了一下,运行没有奏效,过程也没有什么提示。也许,使用微软的东西,还必须
要看MSDN才行的吧?
我自己以前碰到过这个问题,是参考论坛里面的信息用Delphi解决的。转换过来怎么做
到现在还不明白,也没有时间自己尝试。有空希望和大家多交流。
 
to lujun
你想用纯代码执行吗,说实话在delphi上调用jro很方便,但在bcb下必须用到com的方法才能实现
那个控键你用了没效果吗,设置改改也不行吗
 
to jemyzhang:
主要是进行数据类型转换的问题,比如w_char到AnsiString的转换,还有就是执行出错滞后的问题(是不是可以参考MSDN?),BCB这方面的资料较少。可以提供一点这方面的信息吗?
一直没有解决这个问题,只有向大家请教,不好意思。
 
关于数据转换其实差别很大的,bcb和vc在这些地方采用的函数不同,如果你要转换w-char到ansistring的话,可以看看相应的操作付重载,bcb的帮助多少会提到的。
执行出错滞后问题你指那方面的
 
错误找到,输入的控制字符串不对。查找MSDN有关于这个主题的说明:
src = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C://Database.mdb";
des = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D://Database.mdb";
多谢楼上的!
 
完整的代码如下,BCB6编译,事先Import Type Library,使用JetEngin这个控件。
被压缩的数据库是Access2000格式的。以下代码已经测试过正常。
**********************************************************
WideString src, des;
HRESULT result;
src = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C://Database.mdb";
des = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D://Database.mdb";
try
{
JetEngine1->CompactDatabase(src.c_bstr(), des.c_bstr());
}
catch(Exception &e)
{
ShowMessage(e.Message);
}
***********************************************************
MSDN的实例代码如下:
try
{
IJetEnginePtr jet(__uuidof(JetEngine));
jet->CompactDatabase(
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d://nwind2.mdb",
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d://abbc.mdb;" /
"Jet OLEDB:Engine Type=4");
}
catch(_com_error &e)
{
::MessageBox(NULL, (LPCTSTR)e.Description( ), "", MB_OK) ;

}
传入的参数不同!奇怪的是前面BCB程序的代码不能捕捉错误(这个可以人为做一下试验)就知道了。为什么呢?
 
非常感谢,我已解决该问题,散分!
 
后退
顶部