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 的程式如下:
 
procedure TForm1.Button1Click(Sender: TObject);
var
    DataSource : string;
    dbName     : string;
begin
    dbName := 'd:\test.mdb';

    DataSource := 'Provider=Microsoft.Jet.OLEDB.4.0'
                + ';Data Source=' + dbName
                + ';Jet OLEDB:Engine Type=4';

    ADOXCatalog1.Create1(DataSource);
end;
 


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

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

Button2 寫入新增資料表的程式,並為資料表建立關聯:
 
procedure TForm1.Button2Click(Sender: TObject);
var
    DataSource : string;
    cs         : string;
begin
    // 連線 test 資料庫
    DataSource := 'Provider=Microsoft.Jet.OLEDB.4.0'
                + ';Data Source=d:\test.mdb'
                + ';Persist Security Info=False';

    ADOConnection1.ConnectionString := DataSource;
    ADOConnection1.LoginPrompt := False;
    ADOCommand1.Connection := ADOConnection1;

    // 新建資料表 types
    cs := 'CREATE TABLE types (typename TEXT(50))';
    ADOCommand1.CommandText := cs;
    ADOCommand1.Execute;

    // 新建資料表 authors
    cs := 'CREATE TABLE authors ('
        + 'authorname TEXT(50),'
        + 'email TEXT(50),'
        + 'web TEXT(50))';
    ADOCommand1.CommandText := cs;
    ADOCommand1.Execute;

    // 建立資料表 types 的主鍵欄
    cs := 'CREATE INDEX idxPrimary '
        + 'ON types (typename) WITH PRIMARY';
    ADOCommand1.CommandText := cs;
    ADOCommand1.Execute;

    // 建立資料表 authors 的主鍵欄
    cs := 'CREATE INDEX idxPrimary '
        + 'ON Authors (authorname) WITH PRIMARY';
    ADOCommand1.CommandText := cs;
    ADOCommand1.Execute;

    // 關聯資料表
    cs := 'CREATE TABLE Applications ('
        + '  Name TEXT(50),'
        + '  Description TEXT(50),'
        + '  Author TEXT(50) CONSTRAINT idxauthor '
        + 'REFERENCES Authors (authorname),'
        + '  Type TEXT(50) CONSTRAINT idxtype '
        + 'REFERENCES Types (typename),'
        + '  [Size] FLOAT,'
        + '  Cost CURRENCY,'
        + '  DateUpl DATETIME,'
        + '  Picture LONGBINARY)';
    ADOCommand1.CommandText := cs;
    ADOCommand1.Execute;
end;
 

沒有留言:

張貼留言