2026年3月23日 星期一

Delphi FireDAC

 FDManager

var sParams:TStringList;

sParams.Add('Server=xx.xx.xx.xx');
sParams.Add('User_Name=xxxxx');
sParams.Add('Password=xxxxx');
sParams.Add('Database=xxxxx');
sParams.Add('DriverID=MSSQL');
sParams.Add('Pooled=True');
          sParams.Add('ExtendedMetadata=True');  //可以用來取得欄位屬性歸屬
FDManager1.AddConnectionDef('MSSQL_Pool', 'MSSQL', sParams);

FDConnection (與FDManager搭配使用,可以理解是DB Session)

FDConnection1.ConnectionDefName := 'MSSQL_Pool';
FDConnection1.Connected := True;

FDQuery / FDUpdateSQL

with FDQuery1 do
begin
  Connection := FDConnection1;
  CachedUpdates := True;
  UpdateOptions.UpdateTableName := 'Table1';
  UpdateOptions.KeyFields := 'Field1,Field2';
  UpdateOptions.UpdateMode := upWhereKeyOnly;
 
            UpdateObject := Self.FDUpdateSQL1;

  Close;
  SQL.Text :=
    ' select a.*, b.Fiedl5 '+
    ' from Table1 a '+
    ' left join Table2 b on b.field1=a.field1 '+
    ' where ... ';
  Open;
end;

ApplyUpdates

FDQuery1.CheckBrowseMode;
FDQuery1.FetchNext;  //抓資料到本地快取, 確保快取內容有提供回寫的資料
FDQuery1.ApplyUpdates(-1);


取得別名欄位的表格屬性及原欄名稱,需設定連線參數 ExtendedMetadata=True
var column:TFDDatSColumn;
column := FDQuery1.GetFieldColumn(Field);
column.ActualOriginTabName // Field歸屬的Table
column.ActualOriginColName // Field實體表格中的Column Name


FDConnection -> FDQuery,當FDQuery資料是分批讀取還沒完全將資料載入時,FDConnection沒辦法被其他FDQuery操作使用,會出現以下的錯誤訊息。


FDQuery.SourceEOF; //可以知道資料是否已完全載入

提供的建議做法是放二個FDConnection,一個做 Select...,另一個做Update/Insert/Delete/Exec ...
如果沒有閒置的 FDConnection, 就要Create一個FDConnection提供給FDQuery使用。





沒有留言:

張貼留言