==============================
資料庫應用程式設計一直以來都是 Delphi 的強項之一。
Dbx 的目標是為了要讓所有資料庫存取方式統一,在核心上用了很多技巧。
在【dbExpress MetaData 徹底攻略】 文中便大量的應用到 DBX 的獨特設計方法。
例如:【如何取得資料表的所有欄位?】
SQL Server:
Firebird:
如果每一套資料庫都寫一份這樣的指令,你可能會這樣寫:
{$IFDEF 'M$SQL'}
{$ENDIF}
{$IFDEF 'FIREBIRD'}
{$ENDIF}
這看起來有點笨,那麼,DBX 會怎麼寫呢?
不管換了哪一家的資料庫,只要使用 DBX,一招吃遍天下!
其中,為了要活用 DBX 細節的設定,DBXCommon 單元在背後發揮很大的參考功能,以 Data.DBXCommon.TDBXMetaDataCommands 類別和它的成員為例:
我們可以發現定義的內容全都是常數字串,如此一來便完成 DBX MetaData 的資料字典,一來也不怕名字打錯,二來也方便後續的除錯。
所以我們也可以這樣寫:
資料字典的設計方法值得學習,這也是 Dbexpress 所要告訴你的小秘密
新年快樂!
在【dbExpress MetaData 徹底攻略】 文中便大量的應用到 DBX 的獨特設計方法。
例如:【如何取得資料表的所有欄位?】
SQL Server:
select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = '大匠之風'
Firebird:
select rdb$field_name from rdb$relation_fields where rdb$relation_name='大匠之風';
如果每一套資料庫都寫一份這樣的指令,你可能會這樣寫:
{$IFDEF 'M$SQL'}
{$ENDIF}
{$IFDEF 'FIREBIRD'}
{$ENDIF}
這看起來有點笨,那麼,DBX 會怎麼寫呢?
procedure TMainForm.Button2Click(Sender: TObject); var Cmd: TDBXCommand; R: TDBXReader; begin DBCon.Open; Cmd := DBCon.DBXConnection.CreateCommand; Cmd.CommandType := TDBXCommandTypes.DbxMetaData; Cmd.Text := 'GetColumns 大匠之風'; R := Cmd.ExecuteQuery; while R.Next do begin Memo1.Lines.Add(R.Value['ColumnName'].AsString); end; R.Free; Cmd.Free; end;
不管換了哪一家的資料庫,只要使用 DBX,一招吃遍天下!
其中,為了要活用 DBX 細節的設定,DBXCommon 單元在背後發揮很大的參考功能,以 Data.DBXCommon.TDBXMetaDataCommands 類別和它的成員為例:
TDBXMetaDataCommands=class const ... GetColumns= 'GetColumns'; ... end;// TDBXMetaDataCommands
我們可以發現定義的內容全都是常數字串,如此一來便完成 DBX MetaData 的資料字典,一來也不怕名字打錯,二來也方便後續的除錯。
所以我們也可以這樣寫:
procedure TMainForm.Button2Click(Sender: TObject); var Cmd: TDBXCommand; R: TDBXReader; begin DBCon.Open; Cmd := DBCon.DBXConnection.CreateCommand; Cmd.CommandType := TDBXCommandTypes.DbxMetaData; Cmd.Text := TDBXMetaDataCommands.GetColumns + ' 大匠之風'; R := Cmd.ExecuteQuery; while R.Next do begin Memo1.Lines.Add(R.Value[TDBXColumnsColumns.ColumnName].AsString); end; R.Free; Cmd.Free; end;
資料字典的設計方法值得學習,這也是 Dbexpress 所要告訴你的小秘密
噓!別說出去了哦! 圖片來源 |
新年快樂!
沒有留言:
張貼留言