压缩Access时为什么出现[C++ Error] Unit1.cpp(22): E2451 Undefined symbol 'TCOM_DBEngine'(

  • 主题发起人 主题发起人 lovebcb
  • 开始时间 开始时间
L

lovebcb

Unregistered / Unconfirmed
GUEST, unregistred user!
压缩Access时为什么出现[C++ Error] Unit1.cpp(22): E2451 Undefined symbol 'TCOM_DBEngine'(100分)<br />压缩Access时为什么出现[C++ Error] Unit1.cpp(22): E2451 Undefined symbol 'TCOM_DBEngine'
我是按照论坛里的相关帖子弄的,哪里不对?
已经将位于C++Builder6.0安装目录下的Source/Comservers/Office2k中的dao_2k.cpp添加到工程中,然后编译,生成DAO_2K.obj,然后将这个文件拷贝到C++Builder6.0的安装目录下的Lib/Obj子目录下。
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma link "DAO_2K" //已经加入了。
#pragma resource "*.dfm"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TCOM_DBEngine Engine=new CoDBEngine->Create();
//......
delete Engine;
}
 
上不去CSDN才贴在这里,想不到这里人气这么弱,唉![:(!]
 
下面是我的压缩Access代码:
没有特别包含其它头文件,不过我的窗体上有个AdoConnection控件。我没有试验去掉adoConnection是否能编译。
如果你编译通不过,尝试加个AdoConnection组件吧
//---------------------------------------------------------------------------
int CompactDatabase(String f1,String psw1, String f2,String psw2)
{
String Provider1="Provider=Microsoft.Jet.OLEDB.4.0" ";Data Source="+f1+ ";Jet OLEDB:Database Password="+psw1;
String Provider2="Provider=Microsoft.Jet.OLEDB.4.0" ";Data Source="+f2+ ";Jet OLEDB:Database Password="+psw2;
try
{
Variant Adoobj=Variant::CreateObject("JRO.JetEngine");
Adoobj.OleProcedure("CompactDatabase",WideString(Provider1),WideString(Provider2));
Adoobj.Clear();
}
catch(Exception &amp;e)
{
Application->MessageBox(e.Message.c_str(),"错误");
return -1;
}
return 0;
}
void __fastcall TForm1::BitBtn4Click(TObject *Sender)
{
String asCurDir,asBackupDir,asSourceFile,asDestFile;
String f1="Data.mdb";
// 源库1
String psw1="123";
// 密码1
String f2="temp.mdb";
// 新目的库2
String psw2="123";
// 新密码2
asCurDir=ExtractFilePath(Application->ExeName);
f1=asCurDir+f1;
f2=asCurDir+f2;
if(!FileExists(f1))
{
Application->MessageBox(("数据文件不存在:"+asSourceFile).c_str(),"错误!");
return;
}
if(FileExists(f2)) // 不允许目的库存在
DeleteFile(f2);
if(CompactDatabase(f1,psw1,f2,psw2)==0)
if(CopyFile(f2.c_str(),f1.c_str(),FALSE)!=0)
{
RenameFile(f2,f1);
Application->MessageBox("压缩完成!","信息");
sb1->SimpleText="压缩完成!";
}
}
 
接受答案了.
 
后退
顶部