BCB中如何来压缩 mdb 数据库
来源:互联网 发布:汇知中学在哪 编辑:程序博客网 时间:2024/05/20 18:15
数据库用的时间长了,体积会膨胀许多,删除的记录其实也没有真正被删除掉,怎样才能有效将数据库压缩呢?请各抒已见,畅所欲言。
--------------------------------------------------------------------------------
bool CompactAccessDatabase(WideString MDB, WideString Password)
{
AnsiString TMP = ExtractFilePath(MDB);
if (TMP == "")
TMP = GetCurrentDir();
TMP = TMP + AnsiString(DY_APPNAME) + "_$$$.MDB";
if (FileExists(TMP))
DeleteFile(TMP);
WideString Provider1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDB +
";Jet OLEDB:Database Password=" + Password;
WideString Provider2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + TMP +
";Jet OLEDB:Database Password=" + Password;
Variant AdoObj = Variant::CreateObject("JRO.JetEngine");
AdoObj.OleProcedure("CompactDatabase", Provider1, Provider2);
AdoObj.Clear(); // 释放ADO对象
if (DeleteFile(MDB))
{
RenameFile(TMP, MDB);
return true;
}
return false;
}
//---------------------------------------------------------------------------
--------------------------------------------------------------------------------
不要讨论了! 快结贴!!
void __fastcall TDMod::ADODatabaseCompact()
{
if( DirectoryExists( ExtractFilePath(Application->ExeName)+"DATAS//Backup//" ) )
ForceDirectories( ExtractFilePath(Application->ExeName) + "DATAS//Backup//" );
TCOM_DBEngine Engine=new CoDBEngine->Create(); //数据整理
WideString BakMDB,SourceMDB,TargetMDB;
if(Application->MessageBox("Do you want do compress now?", "compress",MB_YESNO + MB_DEFBUTTON2 + MB_ICONQUESTION) == IDYES)
{
ADOConnection->Connected=false;
BakMDB = ExtractFilePath(Application->ExeName)+"DATAS//Backup//aaa.bk";
SourceMDB = DBFileName;
TargetMDB = ExtractFilePath(Application->ExeName)+"~TempTarget.dat";
if(!CopyFile(((AnsiString)SourceMDB).c_str(),((AnsiString)BakMDB).c_str(),0))
{
DeleteFile(((AnsiString)TargetMDB).c_str());
Application->MessageBox("Compress Error","compress",MB_OK);
ADOConnection->Connected=true;
return;
}
try
{
Engine->CompactDatabase(SourceMDB.c_bstr(),TargetMDB.c_bstr());//,NULL,0,NULL);
if(CopyFile(((AnsiString)TargetMDB).c_str(),((AnsiString)SourceMDB).c_str(),0))
{
DeleteFile(((AnsiString)TargetMDB).c_str());
Application->MessageBox("Successful!","compress",MB_OK+MB_ICONINFORMATION);
}
else
{
Application->MessageBox("Unsuccessful!","compress",MB_OK+MB_ICONINFORMATION);
}
}
catch(...){ShowMessage("Unsuccessful!");}
delete Engine;
}
else
delete Engine;
ADOConnection->Connected=true;
}
//----------------------------------------------------------------------------
--------------------------------------------------------------------------------
忘了说:
#include <DAO_2k.h>
#pragma link "DAO_2K"
--------------------------------------------------------------------------------
bool CompactAccessDatabase(WideString MDB, WideString Password)
{
AnsiString TMP = ExtractFilePath(MDB);
if (TMP == "")
TMP = GetCurrentDir();
TMP = TMP + AnsiString(DY_APPNAME) + "_$$$.MDB";
if (FileExists(TMP))
DeleteFile(TMP);
WideString Provider1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDB +
";Jet OLEDB:Database Password=" + Password;
WideString Provider2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + TMP +
";Jet OLEDB:Database Password=" + Password;
Variant AdoObj = Variant::CreateObject("JRO.JetEngine");
AdoObj.OleProcedure("CompactDatabase", Provider1, Provider2);
AdoObj.Clear(); // 释放ADO对象
if (DeleteFile(MDB))
{
RenameFile(TMP, MDB);
return true;
}
return false;
}
//---------------------------------------------------------------------------
--------------------------------------------------------------------------------
不要讨论了! 快结贴!!
void __fastcall TDMod::ADODatabaseCompact()
{
if( DirectoryExists( ExtractFilePath(Application->ExeName)+"DATAS//Backup//" ) )
ForceDirectories( ExtractFilePath(Application->ExeName) + "DATAS//Backup//" );
TCOM_DBEngine Engine=new CoDBEngine->Create(); //数据整理
WideString BakMDB,SourceMDB,TargetMDB;
if(Application->MessageBox("Do you want do compress now?", "compress",MB_YESNO + MB_DEFBUTTON2 + MB_ICONQUESTION) == IDYES)
{
ADOConnection->Connected=false;
BakMDB = ExtractFilePath(Application->ExeName)+"DATAS//Backup//aaa.bk";
SourceMDB = DBFileName;
TargetMDB = ExtractFilePath(Application->ExeName)+"~TempTarget.dat";
if(!CopyFile(((AnsiString)SourceMDB).c_str(),((AnsiString)BakMDB).c_str(),0))
{
DeleteFile(((AnsiString)TargetMDB).c_str());
Application->MessageBox("Compress Error","compress",MB_OK);
ADOConnection->Connected=true;
return;
}
try
{
Engine->CompactDatabase(SourceMDB.c_bstr(),TargetMDB.c_bstr());//,NULL,0,NULL);
if(CopyFile(((AnsiString)TargetMDB).c_str(),((AnsiString)SourceMDB).c_str(),0))
{
DeleteFile(((AnsiString)TargetMDB).c_str());
Application->MessageBox("Successful!","compress",MB_OK+MB_ICONINFORMATION);
}
else
{
Application->MessageBox("Unsuccessful!","compress",MB_OK+MB_ICONINFORMATION);
}
}
catch(...){ShowMessage("Unsuccessful!");}
delete Engine;
}
else
delete Engine;
ADOConnection->Connected=true;
}
//----------------------------------------------------------------------------
--------------------------------------------------------------------------------
忘了说:
#include <DAO_2k.h>
#pragma link "DAO_2K"
- BCB中如何来压缩 mdb 数据库
- C# 压缩MDB数据库
- 如何将access mdb数据库导入到mysql中 .mdb转mysql
- 压缩和修复mdb数据库的方法
- C#进行MDB数据库的压缩
- 数据库,XML,MDB --- 我们来TXT...
- pb中压缩整理access数据库文件(mdb)
- pb中压缩整理access数据库文件(mdb)
- 数据库(mdb)、表、字段的自动创建,以及如何得到数据库中所有表的名字
- 用程序实现压缩access(*.mdb)数据库的方法.
- 用程序实现压缩access(*.mdb)数据库的方法
- VC++中 ado 访问mdb数据库
- perl中动态创建access数据库mdb
- IIS中禁止下载MDB数据库
- MDB压缩方法
- BCB中工程路径如何表示?
- BCB中如何实现控件半透明
- BCB中如何使用四舍五入的方法
- DEBUG实用小程序集锦
- 〖数据库知识〗在Delphi中的Access技巧集
- Eclipse反编译插件--Jode Decompiler
- 推荐:麻省理工学院“开放式课程网页”和莱斯大学“Connexions”
- 让程序作为服务运行!
- BCB中如何来压缩 mdb 数据库
- 实例JSP入门(一)Html简介与JSP的世界
- 参考:跨浏览器无刷新二级联动
- 8.3 声明符的含义
- MD5之C语言源代码
- 美化你的菜单
- 个人职业生涯规划发展的一些图
- datagrid 设定列宽
- 从数据库中读数据建立菜单