2015-09-13

【Delphi】讓 Delphi 具有新建 Access 資料庫的能力

資料來源 -- New...Access Database from Delphi

按功能表 "Component" 選項
==> Import Component
圖一


圖二
 

Pallette Page 是選擇建立好的元件,要放在工具盤的哪個頁籤,我選擇 dbGo

Unit Dir Name 是檔案存放處,我選擇放在 C:\Embarcadero\RAD Studio\版本\Imports\,純粹是基於個人喜好。
按一下 Class Name(s) 最右方的 ... 鈕,出現圖四的畫面。

 圖三


將各個 classClass Name 都插入 ADOX,例如:Table ==> TADOXTableTColumn ==> TADOXColumnTIndex ==> TADOXIndexTKey ==> TADOXKeyTGroup ==> TADOXGroupTUser ==> TADOXUserTCatalog ==> TADOXCatalog

圖四



 圖五


選擇存放位置並輸入 package name
圖六


圖七












關閉、重新啟動 Delphi,再去看 dbGo 頁籤,就會看到多了 7 個元件了。





新建一個專案,在 Form 上放置 2TButton1TADOXCatalog1TADOConnection1TADOCommand

Button1 的程式如下:
  1.  
  2. procedure TForm1.Button1Click(Sender: TObject);
  3. var
  4. DataSource : string;
  5. dbName : string;
  6. begin
  7. dbName := 'd:\test.mdb';
  8.  
  9. DataSource := 'Provider=Microsoft.Jet.OLEDB.4.0'
  10. + ';Data Source=' + dbName
  11. + ';Jet OLEDB:Engine Type=4';
  12.  
  13. ADOXCatalog1.Create1(DataSource);
  14. end;
  15.  


Engine type 4 是建立 Access 97 的資料庫, type 5Access 2000

當您按下 Button1,就會看到在 D:\ 下產生了 test.mdb,這只是個空的 mdb,並且本段程式並不會檢查 mdb 檔是否已建立,所以若您再按一次 Button1,會出現錯誤訊息 "資料庫已存在"。

Button2 寫入新增資料表的程式,並為資料表建立關聯:
  1.  
  2. procedure TForm1.Button2Click(Sender: TObject);
  3. var
  4. DataSource : string;
  5. cs : string;
  6. begin
  7. // 連線 test 資料庫
  8. DataSource := 'Provider=Microsoft.Jet.OLEDB.4.0'
  9. + ';Data Source=d:\test.mdb'
  10. + ';Persist Security Info=False';
  11.  
  12. ADOConnection1.ConnectionString := DataSource;
  13. ADOConnection1.LoginPrompt := False;
  14. ADOCommand1.Connection := ADOConnection1;
  15.  
  16. // 新建資料表 types
  17. cs := 'CREATE TABLE types (typename TEXT(50))';
  18. ADOCommand1.CommandText := cs;
  19. ADOCommand1.Execute;
  20.  
  21. // 新建資料表 authors
  22. cs := 'CREATE TABLE authors ('
  23. + 'authorname TEXT(50),'
  24. + 'email TEXT(50),'
  25. + 'web TEXT(50))';
  26. ADOCommand1.CommandText := cs;
  27. ADOCommand1.Execute;
  28.  
  29. // 建立資料表 types 的主鍵欄
  30. cs := 'CREATE INDEX idxPrimary '
  31. + 'ON types (typename) WITH PRIMARY';
  32. ADOCommand1.CommandText := cs;
  33. ADOCommand1.Execute;
  34.  
  35. // 建立資料表 authors 的主鍵欄
  36. cs := 'CREATE INDEX idxPrimary '
  37. + 'ON Authors (authorname) WITH PRIMARY';
  38. ADOCommand1.CommandText := cs;
  39. ADOCommand1.Execute;
  40.  
  41. // 關聯資料表
  42. cs := 'CREATE TABLE Applications ('
  43. + ' Name TEXT(50),'
  44. + ' Description TEXT(50),'
  45. + ' Author TEXT(50) CONSTRAINT idxauthor '
  46. + 'REFERENCES Authors (authorname),'
  47. + ' Type TEXT(50) CONSTRAINT idxtype '
  48. + 'REFERENCES Types (typename),'
  49. + ' [Size] FLOAT,'
  50. + ' Cost CURRENCY,'
  51. + ' DateUpl DATETIME,'
  52. + ' Picture LONGBINARY)';
  53. ADOCommand1.CommandText := cs;
  54. ADOCommand1.Execute;
  55. end;
  56.  

沒有留言:

張貼留言