selbst wenn nur ein "where" dazukommt gibt's schon Unterschiede. Bei einigen kann man generell "like" nehmen, bei anderen nur dann wenn auch ein Joker vorkommt.Patito hat geschrieben:Bei Datenbanken ist jenseits von "SELECT * FROM Table" Schluß mit der Kompatibilität und spätestens wenn man Inserts
macht ist der Spass mit der Portabilität vorbei.
[gelöst]AutoIncrement-Wert beim INSERT ermitteln(geht das?)
Re: AutoIncrement-Wert beim INSERT ermitteln(geht das?)
Re: AutoIncrement-Wert beim INSERT ermitteln(geht das?)
Ich hatte den befehl
LAST_INSERT_ID()
mal probiert, aber da bekomme ich eine "1" als rückgabewert.
das stimmt aber nicht mit dem autoincrementwert überein.
LAST_INSERT_ID()
mal probiert, aber da bekomme ich eine "1" als rückgabewert.
das stimmt aber nicht mit dem autoincrementwert überein.
-
- Beiträge: 203
- Registriert: Di 22. Sep 2009, 13:08
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: AutoIncrement-Wert beim INSERT ermitteln(geht das?)
Sollte er aber...hubblec4 hat geschrieben:Ich hatte den befehl
LAST_INSERT_ID()
mal probiert, aber da bekomme ich eine "1" als rückgabewert.
das stimmt aber nicht mit dem autoincrementwert überein.
Machst Du den SELECT LAST_INSERT_ID() über dieselbe Connection?
Gibt es mehr als ein Autoincrement-Feld?
Beim Insert sollte der Insert-Wert auch wirklich über das Autoincrement gekommen sein. Wenn man selbst beim Insert einen
Wert angibt (SELECT Max ...), geht das normalerweise am Autoincrement-Mechanismus vorbei.
Trigger bringen in manchen Datenbanken ebenfalls den Mechanismus durcheinander, aber bei MySQL sollte es eigentlich funktionieren.
Re: AutoIncrement-Wert beim INSERT ermitteln(geht das?)
ich hatte heute etwas hilfe von einem freund.
das mit dem LAST_INSERT_ID() funktioniert soweit recht gut.
ich gebe mir den wert in eine variable aus
SET @last_id = LAST_INSERT_ID();
und kann dann alle anderen records mit dem @last_id wert befüllen.
jetzt möchte ich noch in einer anderen tabelle die last_id als text ablegen. daran hängst noch gerade etwas.
das mit dem LAST_INSERT_ID() funktioniert soweit recht gut.
ich gebe mir den wert in eine variable aus
SET @last_id = LAST_INSERT_ID();
und kann dann alle anderen records mit dem @last_id wert befüllen.
jetzt möchte ich noch in einer anderen tabelle die last_id als text ablegen. daran hängst noch gerade etwas.
Re: AutoIncrement-Wert beim INSERT ermitteln(geht das?)
Um das ganze abzuschliessen würde ich noch kurz erwähnen wollen das man mit der normalen SQLQuery-Komponente nicht weit kommt.
Damit das ganze funktioniert benötigt man
TSQLScript
somit kann man dann mehrere SQL-Befehle aufeinmal abfeuern.
Hatte da gestern lange gesucht bis ich im netz ein thema mit zwei beträgen gefunden hatte.
Damit das ganze funktioniert benötigt man
TSQLScript
somit kann man dann mehrere SQL-Befehle aufeinmal abfeuern.
Hatte da gestern lange gesucht bis ich im netz ein thema mit zwei beträgen gefunden hatte.
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: [gelöst]AutoIncrement-Wert beim INSERT ermitteln(geht da
Funktioniert denn TMySQL51Connection.GetInsertID() nicht?
Re: [gelöst]AutoIncrement-Wert beim INSERT ermitteln(geht da
für die Connection nutze ich nicht direkt eine TMySQLConnection-Komponente. Ich nehme immer den TSQLConnoctor wo man dann nach belieben die MYSQL connection einstellen kann, je nach dem was für eine MySQL Datenbank vorhaden ist.mse hat geschrieben:Funktioniert denn TMySQL51Connection.GetInsertID() nicht?
beim TSQLConnector gibt es diese funktion GetInsertID() leider nicht.
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: [gelöst]AutoIncrement-Wert beim INSERT ermitteln(geht da
Hmm. Die MSEgui Ausführung von tmysqlconnection läuft mit allen Versionen ab 5.0.
Hinter TSQLConnector.Proxy steckt die eigentliche connection Komponente. Man könnte doch die gemeinsamen Teile der verschiedenen tmysqlconnections in eine Grundklasse vereinen und dann mit tmysqlconnection(proxy) darauf zugreifen? Oder mache in TSQLConnection eine "GetInsertID() virtual; abstract;" welche in den MySQL connections überschrieben wird. In MSEgui gibt es eine getinsertid() Funktion in tcustomsqlconnection welche eine exception wirft wenn die spezifische Datenbank die Funktion nicht unterstützt. Aber wie bereits erwähnt, normalerweise braucht man das nicht, da die Werte automatisch in die Felder zurückgeschrieben werden.
Hinter TSQLConnector.Proxy steckt die eigentliche connection Komponente. Man könnte doch die gemeinsamen Teile der verschiedenen tmysqlconnections in eine Grundklasse vereinen und dann mit tmysqlconnection(proxy) darauf zugreifen? Oder mache in TSQLConnection eine "GetInsertID() virtual; abstract;" welche in den MySQL connections überschrieben wird. In MSEgui gibt es eine getinsertid() Funktion in tcustomsqlconnection welche eine exception wirft wenn die spezifische Datenbank die Funktion nicht unterstützt. Aber wie bereits erwähnt, normalerweise braucht man das nicht, da die Werte automatisch in die Felder zurückgeschrieben werden.
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: [gelöst]AutoIncrement-Wert beim INSERT ermitteln(geht da
Eine weitere Möglichkeit wäre etwa so:
Code: Alles auswählen
type
tsqlconnector1 = class(tsqlconnector);
function getinsertid(const conn: tsqlconnector): int64;
begin
with tsqlconnector1(conn) do begin
checkproxy();
if proxy is tmysql56connection then begin
result:= tmysql56connection(proxy).getinsertid();
end
else begin
if proxy is tmysql55connection then begin
result:= tmysql55connection(proxy).getinsertid();
end
else begin
if proxy is tmysql51connection then begin
result:= tmysql51connection(proxy).getinsertid();
end
else begin
if proxy is tmysql50connection then begin
result:= tmysql50connection(proxy).getinsertid();
end
else begin
raise exception.create(conn.name+': getinsertid() not supported');
end;
end;
end;
end;
end;
end;
Re: [gelöst]AutoIncrement-Wert beim INSERT ermitteln(geht da
ok sieht auch sehr gut aus.
danke für den code.
danke für den code.