FireDAC 数据库开发笔记(4. FireDAC 进阶)
FireDAC 进阶
-
存取MetaData
💡 程序员可存取数据库的MetaData,例如数据库的Catalog. Schema, Package等信息,或是数据库中的数据表,字段等信息。
TFDConnection组件提供了数个方法可让程序员存取数据库中的MetaData
procedure TfmMainForm.GetTableMetaData;
var
aSL : TStringList;
begin
aSL := TStringList.Create;
try
dmConn.fdConnection.GetTableNames('','','',aSL);
DisplayMetaData(aSL) ;
finally
aSL.Free;
end;
end;
-
宏功能(Macro)
FireDAC提供了丰富的Macro功能让开发人员使用,简单的说所谓的宏就是FireDAC在把SQL命令送到后端执行时会根据宏功能定义先把SQL中使用的宏替换成相对应的字符串之后再把替换的SQL命令送出。
💡 要使用FireDAC的宏功能,要先把TFDQuery.ResourceOptions.MacroCreate 和 ResourceOptions.MacroExpand 特性值设为 True
💡 FireDAC使用 '!' 或 '&' 符号代表宏
FDQuery.SQL 命令为
SELECT * FROM &TableName
procedure TForml.ButtonlClick(Sender: TObject);
begin
FDQueryl.Active := False;
FDQueryl.MacroByName('TableName').AsRaw := Editl.Text;
FDQueryl.Active := True;
end;
宏SQL命令
SELECT &FieldList FROM &TableName
-
Update SQL 客制化数据
💡 TUpdateSQL组件
-
- 允许程序员定义客制化更新
- 允许程序员在FireDAC 无法处理类似 Join SQL 的数据更新时提供更新数据的能力
💡 Update SQL 客制化数据 (139页)
1. 用 TUpdateSQL Editor 来产生 SQL 语句, TUpdateSQL的 ModifySQL 属性 填写 产生的SQL语句
2. FDQuery 组件的 CachedUpdates 属性 = True
procedure TForml .ButtonlClick(Sender:TObject);
Var
NumErrors:Integer;
begin
SeminarsTable.OnUpdateRecord := nil;
SeminarsTable.UpdateObject := FDUpdateSQLl;
NumErrors := SeminarsTable.ApplyUpdates(0);
if NumErrors =0 then
begin
SeminarsTable.CommitUpdates;
ShowMessage('更新数据成功!');
end
else
ShowMessage('产生'+ intToStr(NumErrors)+,'个更新错误');
end;
因此ApplyUpdates就会使用 FDUpdateSQL1 组件中的 ModifySQL 特性中的 Update SQL.
-
使用TUpdateSQL组件处理复杂数据更新 (143页)
SQL Join 数据是只读的,打开CachedUpdates功能也只能让用户可修改主数据表的数据,而无法修改从数据表
因此要允许可修改从数据表,除了开启CachedUpdates功能程序员必须再开启TFDQuery组件的UpdateOptions.UpdateNonBaseFields = True
TFDQuery组件的 CachedUpdates := True
TFDQuery组件的 UpdateNonBaseFields := True
- 异步处理数据
要使用 FireDAC 的异步数据处理功能,程序员必须 增加 TFDManager 组件, 再设定 FDQuery 组件的 ResourceOptions.CmdExcMode 特性值