==============================
資料庫應用程式設計一直以來都是 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 所要告訴你的小秘密
![]() |
| 噓!別說出去了哦! 圖片來源 |
新年快樂!

沒有留言:
張貼留言