热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Access2000数据库压缩与修复

Access2000数据库压缩与修复我找了好多文章,均没做成功,那位朋友有现成的单元送一个,小弟不胜感激,klcui@21cn.com
Access2000数据库压缩与修复我找了好多文章,均没做成功,那位朋友有现成的单元送一个,小弟不胜感激,klcui@21cn.com

14 个解决方案

#1


我有例子,要用到 dao360.dll

 就可以了

#2


procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
   dao:OLEVariant;
   tstr1,tstr2:string;
   winpath:pchar;
begin
    my_locate_conn.Close;
    GetMem(WinPath,255);
    GetWindowsDirectory(WinPath,255);
    Tstr1:=WinPath;
    dao:=CreateOleObject('DAO.DBEngine.36');
    Tstr2:=Tstr1+'\_tem5.bak';
    Tstr1:=Tstr1+'\_tem5.tem';  //解密后的文件--正常文件
    dao.CompactDatabase(tstr1,tstr2);
    deletefile(tstr1);
    RenameFile(tstr2,tstr1);
    tstr2:=ExtractFilePath(ParamStr(0))+'db\l_song.mdb';


你看看吧,这就可以了,但在使用前要将 DAO360。DLL注册,这个文件在安装OFFICE2000后会自动注册

#3


我已经安装了office xp,和前几次一样都是在编译到dao:=CreateOleObject('DAO.DBEngine.36');处不能通过。提示Undeclared identifier:'CreateOleObject'
另外,你怎么把他写在Form的Closequery事件里。我不明白!谢谢你!

#4


ACCESS2000数据库提供的函数只有一个压缩函数即:CompactDatabase说是压缩和修复合在一起了,事实上,我试验过,当数据库真的发生了问题需要修复时,这个函数不起作用,只有在ACCESS2000中的数据库实用工具中的修复才起作用。你要想修复数据库也可以下载一个ACCESS2000的数据库修复工具:JETCOMP.exe在网上可以搜到。

#5


用我的函数
Function CompactAndRepair(sOldMDB:String;sNewMDB:String;psw:string;password:boolean):Boolean;
const
  sProvider='Provider=Microsoft.Jet.OLEDB.4.0;';
var
  oJetEng:JetEngine;
begin
  if password then
    sOldMDB:=sProvider+'Data Source='+sOldMDB+';jet oledb:database password="'+psw+'"'
  else
    sOldMDB:=sProvider+'Data Source='+sOldMDB;
    
  if password then
     sNewMDB:=sProvider+'Data Source='+sNewMDB+';jet oledb:database password="'+psw+'"'
  else
     sNewMDB:=sProvider+'Data Source='+sNewMDB;
  try
    oJetEng:=CoJetEngine.Create;
    oJetEng.CompactDatabase(sOldMDB, sNewMDB);    
    oJetEng:=Nil;
    Result:=True;
  except
    oJetEng:=Nil;
    Result:=False;
  end;
end; 

{10.CompactAndRepair(压缩Access数据库,用到JRO_TLB单元,可按下面方法加入)   }
{ a) 在Delphi IDE中选择Project - Import Type Library.                      }
{ b) 往下翻直到你找到“Microsoft Jet and Replication Objects 2.1 Library”.}

#6


onclick事件中调用的例子(菜单里的,不是你所要求的btn,但我想应该是一样的吧):

procedure Tmainform.N31Click(Sender: TObject);
begin
  if application.MessageBox('压缩数据库可以节省硬盘空间,但系统的性能可能会略微下降,确实要压缩数据库吗?','询问',mb_yesno+mb_defbutton2+mb_iconquestion)=idyes then
     begin
       datamodule1.ADOConnection1.Connected:=false;
       if CompactAndRepair('junhua.9sky', 'junhua1.mdb','jiutiankaifabuchupin',true) then
          begin
            if copyfile('junhua1.mdb','junhua.9sky',false) then
               deletefile('junhua1.mdb');
            ShowMessage('数据库压缩成功!系统即将关闭。');
            application.Terminate;
          end
       else
         ShowMessage('压缩数据库出错!');
     end; 
end;

#7


在Delphi中用ADO压缩Access数据库之不引用JRO类型库方法
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1268352

#8


打不开,能帖出来吗?

#9


问题:在Delphi中用ADO压缩Access数据库之不引用JRO类型库方法 ( 积分:0, 回复:15, 阅读:550 )
分类:数据库-文件型 ( 版主:hbezwwl, 吴剑明 )  
来自:ysai, 时间:2002-8-16 10:56:00, ID:1268352 | 编辑 [显示:小字体 | 大字体]  
看到很多富翁提出类似问题,给出一个比较好的解决方法
第一个参数为原始数据库文件名(完整路径),第二个参数为密码
修改后可以实现压缩后与压缩前有不同的密码!
//引用ComObj,ActiveX
function CompactDatabase(AFileName,APassWord:string):boolean;
//压缩与修复数据库,覆盖源文件
const
  SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'
      +'Jet OLEDB:Database Password=%s;';
var
  SPath,SFile:Array [0..254] Of Char;
  STempFileName:String;
  JE:OleVariant;
begin
  GetTempPath(40,SPath);//取得Windows的Temp路径
  GetTempFileName(SPath,'~CP',0,SFile);//取得Temp文件名,Windows将自动建立0字节文件
  STempFileName:=SFile;//PChar->String
  DeleteFile(STempFileName);//删除Windows建立的0字节文件
  try
    JE:=CreateOleObject('JRO.JetEngine');//建立OLE对象,函数结束OLE对象超过作用域自动释放
    OleCheck(JE.CompactDatabase(format(SConnectionString,[AFileName,APassWord]),
        format(SConnectionString,[STempFileName,APassWord])));//压缩数据库
    //复制并覆盖源数据库文件,如果复制失败则函数返回假,压缩成功但没有达到函数的功能
    result:=CopyFile(PChar(STempFileName),PChar(AFileName),false);
    DeleteFile(STempFileName);//删除临时文件
  except
    result:=false;//压缩失败
  end;
end;

#10


多谢ysai(赛赛),又多学了一招。

#11


你们都是我的老师,要好好向你们学习才是呀

#12


其实归根到底还是要使用JetEngine的,只不过是在uses里不用添加那些单元而已。不过这样使用更方便些,但运行的效率没有直接使用JRO类型库的效率好。

#13


to lzf1010(深宇)
我编译通过了,但压缩失败,CompactAndRepair('junhua.9sky', 'junhua1.mdb','jiutiankaifabuchupin',true)括号内的东西不明白,给讲解一下好吗,我备份与恢复功能是正常的,说明数据库没有被使用。

#14


我仔细看了深宇函数,才知道是新旧数据库名,修改了一下就压缩成功了,到此终于完成,多谢深宇不厌其烦的帮助,谢谢上面的各位

推荐阅读
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
author-avatar
路很长别太狂_297
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有