程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 解決了幾乎所有Delphi+Access同仁的問題—動態創建、壓縮Access數據庫(*.MDB)

解決了幾乎所有Delphi+Access同仁的問題—動態創建、壓縮Access數據庫(*.MDB)

編輯:Delphi

動態創建、壓縮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中早就封裝了現成的類,只是大家都沒有注意而已它位於:
    $Delphi5Imports
    目錄下!
    其中有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([email protected])
         2000/12/29

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved