將數據插入具有自動增量字段的數據庫表中時的常見模式是使用 SQL 查詢來選擇新創建的記錄的最后插入ID。使用 TFDQuery 運行 INSERT 查詢后,您可以運行第二個查詢來獲取新插入的自動增量 ID。例如,MySQL 具有一個 SELECT 查詢函數,您可以運行該函數,稱為 LAST_INSERT_ID(),比如:SELECT LAST_INSERT_ID() ,但是,這種方法耦合度太高,不同的數據庫,使用的函數也不一樣。 FireDAC 提供了一個函數,您可以通過 TFDConnection 組件調用該函數,稱為GetLastAutoGenValue。它將返回最后插入的 ID,支持許多不同的數據庫,包括 Oracle、InterBase/Firebird、MySQL、MSSQL 和其他一些數據庫。它使用每個不同數據庫的任何唯一 SQL 查詢來返回上次插入的 ID。 以SQLite數據庫為例: procedure TForm1.FormCreate(Sender: TObject); begin FDConnection1.Params.Clear; // 設置數據庫驅動類型為 SQLite FDConnection1.Params.Add('DriverID=SQLite'); // 為了測試方便,設置為內存數據庫 FDConnection1.Params.Add('Database=:memory:'); FDConnection1.Connected := True; // 創建一個名為 TBL1 的數據表 FDConnection1.ExecSQL('CREATE TABLE TBL1(ID INTEGER PRIMARY KEY AUTOINCREMENT, F1 VARCHAR(15), F2 VARCHAR(20))'); Memo1.Clear; end; procedure TForm1.Button1Click(Sender: TObject); begin // 使用 FDQuery 插入一條數據 FDQuery1.SQL.Text := 'INSERT INTO TBL1(F1, F2) VALUES (:F1, :F2)'; FDQuery1.ParamByName('F1').AsString := 'Delphi'; FDQuery1.ParamByName('F2').AsString := 'Object Pascal'; FDQuery1.ExecSQL; // 方法一、 通過 GetLastAutoGenValue 獲取自增字段值 Memo1.Lines.Add(FDConnection1.GetLastAutoGenValue('TBL1')); // 方法二、通過查詢 last_insert_rowid 函數獲取 FDQuery1.Open('SELECT last_insert_rowid()'); Memo1.Lines.Add(FDQuery1.Fields[0].Value); // 打開表 FDQuery1.Open('SELECT * FROM TBL1'); end;
Delphi4Linux Delphi三層/FireDAC 技術群:734515869 ![]() |
|