![]() |
AW: LastRowID wie auslesen?
[QUOTE=AlexII;1269947]
Delphi-Quellcode:
Das halte ich nicht für optimal. Die möglichen Werte für
Form1.SQLQuery1.ParamByName('fk_category_id').AsInteger := Integer(CategoryComboBox.Items.Objects[CategoryComboBox.ItemIndex])
Code:
sollten aus der DB kommen und nicht aus Deinem Programm. Das kann gut gehen, dafür muß aber sicher gestellt werden, daß
fk_category_id
Code:
und
fk_category_id
Delphi-Quellcode:
immer gleich sind (für gleiche zugehörige Inhalte).
Integer(CategoryComboBox.Items.Objects[CategoryComboBox.ItemIndex])
Null-Werte würde ich nicht über Parameter, sondern explizit übergeben:
Code:
Gruß
'INSERT INTO tbcategory VALUES(NULL, NULL)'
K-H |
AW: LastRowID wie auslesen?
Jah... da muss man sehr aufpassen, aber ich habe alles soweit logisch durchgespielt, es muss gehen. So lade ich die ComboBoxen:
Delphi-Quellcode:
Auch wenn in der ComboBox was gelöscht wird, kommen die IDs nicht durcheinander.
// Kategorie laden
Form2.CategoryComboBox.Clear; Form2.CategoryComboBox.Items.AddObject(' ', TObject(0)); SQLQuery1.Close; SQLQuery1.SQL.Text := 'SELECT id_tbcategory, category FROM tbcategory'; SQLQuery1.Open; while not SQLQuery1.Eof do begin Form2.CategoryComboBox.Items.AddObject(SQLQuery1.FieldByName('category').AsString, TObject(SQLQuery1.FieldByName('id_tbcategory').AsInteger)); SQLQuery1.Next; end; |
AW: LastRowID wie auslesen?
Zitat:
Statt
SQL-Code:
INSERT INTO tabelle VALUES( NULL, :Wert);
SQL-Code:
INSERT INTO tabelle Wert VALUES(:Wert);
|
AW: LastRowID wie auslesen?
Dann musst Du aber auch die Felder angeben:
Delphi-Quellcode:
INSERT INTO tabelle(Feld1, Feld2) VALUES(:Wert1, :Wert2);
|
AW: LastRowID wie auslesen?
Zitat:
Delphi-Quellcode:
Die MSEgui SQLdb Version schreibt die serverseitig generierten Werte übrigens automatisch in die Feldwerte zurück, entweder mittels "LASTINSERTID" für primary keys oder der "RETURNING" clause im SQL statement für beliebige Felder.
TSQLite3Connection.GetInsertID().
|
AW: LastRowID wie auslesen?
Ich habe ein ähnliches Problem, wenn ich mittels Insert / Post einen Datensatz anlege und RowId des neu angelegten Datensatzes bestimmen möchte:
Code:
Da kommt leider immer nur #0#0#0#0... heraus. Was mache ich falsch?
FDQuery.Insert;
FDQuery.FieldByName( 'Name' ).value := 'Müller'; ... FDQuery.Post; RowId := FDConnection.ExecSQLScalar( 'select top 1 LastRowId() LastRowId from Personen' ); |
AW: LastRowID wie auslesen?
Das sieht nach FireDAC aus, dann versuch mal:
Delphi-Quellcode:
FDConnection.GetLastAutoGenValue('');
|
AW: LastRowID wie auslesen?
Klappt leider nicht :( . NULL ist der Rückgabewert.
|
AW: LastRowID wie auslesen?
Hat denn die Tabelle einen Primärschlüssel, der automatisch hochgezählt wird?
|
AW: LastRowID wie auslesen?
Nein, hat sie nicht. Das Problem ist, dass ich die Datenstruktur nicht so einfach ändern kann, da mit einem alten Programm noch mindestens 7 Monate (parallel über den Datenbankserver) darauf zugegriffen werden muß und das alte Programm äußerst empfindlich auf Änderungen in den Tabellen reagiert :shock: . Deshalb auch der Lösungsansatz über LastRowId() (es handelt sich um den Advantage DataBase Server).
Folgendes funktioniert:
Code:
Nur ich brauche eine Lösung mittels FDQuery.Insert...FDQuery.Post und anschließend die RowId.
cRowId := FDConnection.ExecSQLScalar(
'insert into TableName( Name ) values( ''Müller'' );'+ 'select top 1 LastRowId() LastRowId from TableName' ); Vielleicht habe ich einen Fehler, wenn FDQuery.Post ausgeführt wird (da passiert noch einiges mehr) und dadurch die RowId nicht mehr verfügbar ist... Mal sehen, was ich heute Nacht oder morgen noch hinbekomme 8-) . |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz