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