邀朋友种豆,一起分享吧
喜欢购买正品行货?那就去品牌街

ACCESS 数据库数据删除后数据库文件没变小的解决办法

来自:种豆 时间:2017-12-29 阅读:494次 原文链接
    在一个access文件中,删除若干条记录后(Delete from tableName),记录是全部删除了, 但数据库文件(.mdb)的size 没有变小。这是因为Access数据库当你删除记录后,空间并没有释放。你可以尝试采用以下办法解决。
1.点击菜单【工具】->【数据库实用工具】->【压缩和修复数据库】。
2.新建一个.mdb文件,在文件菜单里有个导入数据,然后选择原来的数据库,把表导入进去。
3.VFP中Access数据库压缩代码
lole=CREATEOBJECT( 'JRO.JetEngine ')
strS1
= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\TEMP\TEST.MDB;;Persist Security Info=False;Jet OLEDB:Database Password=;"
strT1= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\TEMP\NewTable.MDB;Jet OLEDB:Engine Type=5;"
lole.CompactDatabase(strS1,strT1)
RELEASE lole

4.C/C++Access数据库压缩代码
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
= WideString("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=") + MDB +
  WideString(
";Jet OLEDB:Database Password=") + Password;
  WideString Provider2
= WideString("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=") + TMP +
  WideString(
";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;
}

5.BCB5中Access数据库压缩代码
void Mdb_Reduce (String s_FileName,String s_PassWord)
{
  TCOM_DBEngine Engine
= new CoDBEngine->Create();
  WideString p1
= s_FileName;
  WideString p2
= s_FileName+".bpk";
  Engine
->CompactDatabase(p1.c_bstr(), p2.c_bstr(), 0, 0, ";pwd=" + s_PassWord);
  DeleteFile(s_FileName);
  String f2
= p2;
  MoveFile(f2.c_str(), s_FileName.c_str());
  delete Engine;
}

6.在BCB6中可以加入一个控件用来压缩Access数据库




 
关于种豆 ┊ 联系我们 ┊ 免责声明 ┊ 发帖须知 ┊ 请提意见 ┊ 站点地图
本站为个人爱好兴趣分享网站,不代表本人观点,如有侵权请联系QQ3033380280进行处理
sowsoy.com 版权所有 Copyright©2010-2021 备案号:蜀ICP备2020025376号-3
Email:sowsoy#hotmail.com