解决了几乎所有Delphi+Access同仁的问题—动态创建、压缩Access数据库(*.MDB)

原创 2000年12月29日 17:27:00

动态创建、压缩Access数据库(*.MDB)

    声明:这是前无古人,后无来者的解决方案(有点吹,但是我实在太激动了!),希望各位能多多关照
创建Access数据库几乎是所有Delphi+Access所遇到的难题,我经过两头(昨天上午到现在)的艰苦奋战,终于将它全部解开,现在一一奉献给大家:

一、通过OLE方式创建
    相信各位都用通过OLE方式访问Word、Excel文件的经历,具体我不说太多,直接把具体代码写出来就完了
    在引用部分加入:
    uses ComObj;
    实现部分:
    procedure TFormOffice.BitBtn1Click(Sender: TObject);
    var
      CreateAccess:OleVariant;
    begin
      CreateAccess:=CreateOleObject('ADOX.Catalog');
      CreateAccess.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:/Aceco.mdb');
    end;

    说明:
      1、在C:/下创建Aceco.mdb;
      2、是Access2000格式,用Access97打不开;
      3、系统需安装MDAC,这是好消息,客户不需安装Access也可以

二、通过DBEngine创建
    这才是关键中的关键,是我一定要写出来的原因!
    各位是否还记得安装Delphi的时候,如果你选择自定义安装(我一般用Delphi写控件,所以当然是越小越好),会有很多安装选项,让你选择Access97或Access2000,还有MDAC等,问题就在这里!Delphi5.0中早就封装了现成的类,只是大家都没有注意而已它位于:
    $Delphi5/Imports
    目录下!
    其中有DAO97.DCU文件,它是通过DAO350.DLL来完成的,其中的定义部分和DAO350.DLL如出一辙!OK,到现在,所有的一切都明白了(可惜我花了一天时间!)。那么具体实现起来就太方便了,具体过程如下:
    在引用部分加入:
    uses DAO97;
    实现部分:
    procedure TFormOffice.BitBtn4Click(Sender: TObject);
    var
      Engine:DBEngine;
    begin
      Engine:=CoDBEngine.Create;
      Engine.CreateDatabase('c:/NewAccess.mdb',';LANGID=0x0804;CP=936;COUNTRY=0;',dbEncrypt);
    end;

    说明:
        1、在C:/下创建NewAccess.mdb;
        2、语言国家是简体中文;
        3、压缩整理数据库用Engine.CompactDatabase('c:/invoice.mdb','c:/God.mdb','',0,'');就是将c:/invoice.mdb压缩整理成c:/God.mdb,剩下的只是将c:/invoice.mdb删除(DeleteFile('c:/invoice.mdb');),然后将c:/God.mdb重新命名(RenameFile('c:/God.mdb','c:/invoice.mdb');)即可。

三、通过Access97创建,然后拷贝
四、通过ODBC的API函数创建

补充:
    1、通过OLE方式创建时如果是Access97,那么可能是CreateAccess.Create('Provider=Microsoft.Jet.OLEDB.3.5.1;Data Source=c:/Aceco.mdb');,嘿嘿,小弟对VB实在是一窍不通,还望各位再测试一下(可以需要MDAC比较低的版本)。
    2、关于CreateDatabase中国家的设置:
       Module LanguageConstants; // DAO predefined constants.
        dbLangArabic = ;LANGID=0x0401;CP=1256;COUNTRY=0;
        dbLangCzech = ;LANGID=0x0405;CP=1250;COUNTRY=0;
        dbLangDutch = ;LANGID=0x0413;CP=1252;COUNTRY=0;
        dbLangGeneral = ;LANGID=0x0409;CP=1252;COUNTRY=0;
        dbLangGreek = ;LANGID=0x0408;CP=1253;COUNTRY=0;
        dbLangHebrew = ;LANGID=0x040D;CP=1255;COUNTRY=0;
        dbLangHungarian = ;LANGID=0x040E;CP=1250;COUNTRY=0;
        dbLangIcelandic = ;LANGID=0x040F;CP=1252;COUNTRY=0;
        dbLangNordic = ;LANGID=0x041D;CP=1252;COUNTRY=0;
        dbLangNorwDan = ;LANGID=0x0414;CP=1252;COUNTRY=0;
        dbLangPolish = ;LANGID=0x0415;CP=1250;COUNTRY=0;
        dbLangCyrillic = ;LANGID=0x0419;CP=1251;COUNTRY=0;
        dbLangSpanish = ;LANGID=0x040A;CP=1252;COUNTRY=0;
        dbLangSwedFin = ;LANGID=0x040B;CP=1252;COUNTRY=0;
        dbLangTurkish = ;LANGID=0x041F;CP=1254;COUNTRY=0;
        dbLangJapanese = ;LANGID=0x0411;CP=932;COUNTRY=0;
        dbLangChineseSimplified = ;LANGID=0x0804;CP=936;COUNTRY=0;
        dbLangChineseTraditional = ;LANGID=0x0404;CP=950;COUNTRY=0;
        dbLangKorean = ;LANGID=0x0412;CP=949;COUNTRY=0;
        dbLangThai = ;LANGID=0x041E;CP=874;COUNTRY=0;
        dbLangSlovenian = ;LANGID=0x0424;CP=1250;COUNTRY=0;

    3、关于CreateDatabase中数据库版本信息
       Enum DatabaseTypeEnum;
        dbVersion10 = 1;
        dbEncrypt = 2;
        dbDecrypt = 4;
        dbVersion11 = 8;
        dbVersion20 = 16;
        dbVersion30 = 32;

    4、其它方面,希望各位再加补充。


        StarFarm-->Hank(starfarm@263.net)
         2000/12/29

Delphi连接Access数据库图文教程(1)

前几天,有个网友刚开始学Delphi,想学一下Delphi连Access数据库,可是怎么都连不成功,我就答应给他做个图文教程,现在闲下来了,就来做一个教程。首先我们来确认一下所用到的环境Delphi7...
  • www1157763637qqcom
  • www1157763637qqcom
  • 2013年11月15日 22:48
  • 3375

asp,access数据库备份压缩还原代码

   新建代码到data_s.asp文件 数据库管理系统
  • mastermanager
  • mastermanager
  • 2008年04月24日 14:10
  • 805

用程序实现压缩access(*.mdb)数据库的方法

下面的函数用来压缩access数据库 需要增加ComObj单元 function CompactDatabase(AFileName,APassWord:string):boolean; //压缩...
  • my98800
  • my98800
  • 2016年07月20日 12:51
  • 280

C++ 调用Access数据库接口,压缩数据库

1. Access数据库频繁的插入、查询操作之后,会生成大量的垃圾数据,造成该数据库mdb文件增大,从而影响软件的读取等操作; 2. Access数据库软件自带了“压缩/修复”功能,通过这个功能可以删...
  • zyjj_99
  • zyjj_99
  • 2017年02月10日 17:29
  • 748

[收藏]用C++动态创建一个Access数据库

以下VC++6.0下调试通过//获取主程序所在路径,存在sPath中CString sPath;GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX...
  • pfboy
  • pfboy
  • 2006年10月19日 18:41
  • 1485

VB压缩/修复Access数据库操作源代码

在Access数据库操作时经常数据库经常会由于操作频繁而出现各种问题.以及数据库无限的增大.为了不影响使用我们需要对数据库进行压缩/修复.以下代码就是用VB压缩并且修复Access数据库德 代码.大家...
  • cncco
  • cncco
  • 2007年09月27日 18:36
  • 3046

解决Access数据库突然变得很大的方法

其实这是因为Access不能及时把已删除的项目清空,需要进行修复一下就OK了,方法如上:     1、打开刚刚那个大容量的Access数据库     2、依次点击Access菜单中的工具→...
  • oYuHuaChen
  • oYuHuaChen
  • 2017年01月18日 09:08
  • 633

C#压缩Access数据库

        ///         /// 压缩数据库        ///         /// 数据库链接        /// 要压缩的MDB文件的全名        static voi...
  • rjzhang
  • rjzhang
  • 2006年07月31日 17:26
  • 618

得到Access数据库中的所有表名

///          /// 返回Mdb数据库中所有表表名          ///          public string[] GetShemaTableName(string da...
  • ffei060828
  • ffei060828
  • 2014年06月10日 23:39
  • 2045

C#动态创建Access数据库及表的方法

本文实例讲述了C#动态创建Access数据库及表的方法。分享给大家供大家参考。 具体实现方法如下: //添加两个com组件引用 //Microsoft ADO Ext. 2.8 for D...
  • u011981242
  • u011981242
  • 2016年03月06日 23:00
  • 365
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解决了几乎所有Delphi+Access同仁的问题—动态创建、压缩Access数据库(*.MDB)
举报原因:
原因补充:

(最多只允许输入30个字)