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

worldblog發表於2007-12-03
解決了幾乎所有Delphi+Access同仁的問題—動態建立、壓縮Access資料庫(*.MDB) (轉)[@more@]

動態建立、Access(*.M)

  宣告:這是前無古人,後無來者的解決方案(有點吹,但是我實在太激動了!),希望各位能多多關照
建立Access資料庫幾乎是所有+Access所遇到的難題,我經過兩頭(昨天上午到現在)的艱苦奮戰,終於將它全部解開,現在一一奉獻給大家:

一、透過OLE方式建立
  相信各位都用透過OLE方式訪問、的經歷,具體我不說太多,直接把具體程式碼寫出來就完了
  在引用部分加入:
  uses ComObj;
  實現部分:
  procedure TForm.BitBtn1Click(Sender: T);
  var
  CreateAccess:OleVariant;
  begin
  CreateAccess:=CreateOleObject('ADOX.Catalog');
  CreateAccess.Create('Provr=.Jet.OLEDB.4.0;Data =c:Aceco.mdb');
  end;

  說明:
  1、在C:下建立Aceco.mdb;
  2、是格式,用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的建立

補充:
  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;
  dbLaordic = ;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--&gtHank(to:starfarm@263">starfarm@263.net)
  2000/12/29


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-987673/,如需轉載,請註明出處,否則將追究法律責任。

相關文章