Einzelnen Beitrag anzeigen

Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

Bei Insert den neuen Index ermitteln

  Alt 16. Nov 2021, 10:07
Datenbank: SQLite • Version: 3.xxx • Zugriff über: FireDac
Hi zusammen

Nachdem das erstellen einer nicht vorhandenen Datenbank nun klappt, geht es nun darum, die Datenbank auch zu füllen. Das ist, so hoffe ich, kein grösseres Problem - ich kann da auf SQL-Statements als Muster zurückgreifen, die ich mal für eine Bilddatenbank erstellt habe. Denoch sich da eine Frage:
1 : Delphi liefert ein Tutorial für SQLite Namens GettingStartet:
Delphi-Quellcode:
procedure TfrmGettingStarted.btnInsertClick(Sender: TObject);
var
  iID: Integer;
begin
  if not dbMain.Connected then
    Exit;
  // Insert a record
  dbMain.ExecSQL('insert into Categories(CategoryName, Description, Picture) ' +
                 'values(:N, :D, :P)', ['New category', 'New description', $0334]);
  qryCategories.Refresh;

  // Get a scalar value from DB
  iID := dbMain.ExecSQLScalar('select MAX(CategoryID) from Categories');
  sbMain.SimpleText := 'Last CategoryID = ' + IntToStr(iID);
end;

Frage: Die aktuelle ID eines gerade eingefügten Datensatzes ermittelte ich in meiner Bild-DB so:
Delphi-Quellcode:
function TCMSQLiteModul.BildInsertQuery(BJpeg: TJPEGImage; WorkMap : TBitmap; LIdFolder: String): integer;
  var SQLString: string; // BJpeg,
begin
  SQLString := 'Insert Into tbl_bild(Thumbnail, Bitmap, FolderID) Values (:Thumbnail, :Bitmap, :FolderID)';
  FDSQLiteQuery.SQL.Text := SQLString;
  FDSQLiteQuery.ParamByName('Thumbnail').assign(BJpeg); // FDSQLiteQuery.Params[0].Assign(Bjpeg); // := ;
  FDSQLiteQuery.ParamByName('Bitmap').Assign(Workmap);; // FDSQLiteQuery.Params[1].Assign(Workmap);
  FDSQLiteQuery.ParamByName('FolderID').AsString := LIDFolder; // FDSQLiteQuery.Params[2].AsString := LIDFolder;
  FDSQLiteQuery.ExecSQL(false);
  if FDSQLiteQuery.Active then
     FDSQLiteQuery.Close;
  SQLString := 'SELECT LAST_INSERT_ROWID() AS LastID';
  FDSQLiteQuery.SQL.Text := SQLString;
  FDSQLiteQuery.Open; // Den aktuellen Index für den neuen Datensatz ermitteln
  if not FDSQLiteQuery.IsEmpty then
    result := FDSQLiteQuery.FieldByName('LastID').AsInteger; // und an result übergeben
end;
Hat sich das inzwischen geändert, oder ist das eine weitere Möglichkeit?

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat