![]() |
wie bekomme ich die id des zuletzt geschriebenen Datensatzes
hi
ich habe ne IBdatenbank und schreibe nun mit sql strings in eine tabelle, das klappt auch, nun moechte ich gern die zuletzt geschriebene automatisch erzeugt ID herausbekommen, ich hatte mit das in etwa so vorgestellt (zusammengesucht):
Delphi-Quellcode:
beim suchen der id krieg ich ne exception in der steht das into unbekannt ist..
// schreiben der werte
DBForm.SQLI.sql.clear; DBForm.sqli.SQL.Add('insert into IDRECORDS (RECA,RECB,DATNAME,EINSPIELDATUM,EINSPIELER) values ('''+s+''','''+tempstring+''','''+vn+''','''+d+''','''+au+''');'); DBForm.sqli.ExecQuery; DBForm.sqli.sql.clear; DBForm.sqli.SQL.add('commit retain;'); DBForm.sqli.ExecQuery; // suchen der ID DBForm.sqli.sql.clear; DBForm.sqli.SQL.add('Select GEN_ID(GEN_IDRECORDS_ID,1) From RDB$Database into :cid;'); DBForm.sqli.ExecQuery; wie kann man sowas machen ? |
Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
Hi
Delphi-Quellcode:
PS.: Bei der obigen INSERT, üwrde ich trotzdem eher die Variante mit ParamByName bevorzugen, ist einfach viel Übersichtlicher, und nicht so Fehleranfällig (wenn im Text irgendwelche Spezialzeichen vorkommen !!!)
// suchen der ID
DBForm.sqli.sql.clear; DBForm.sqli.SQL.add('Select GEN_ID(GEN_IDRECORDS_ID,1) From RDB$Database;'); DBForm.sqli.Open; id := DBForm.sqli.Fields[0].AsInteger; |
Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
Zitat:
nun krieg ich beim compilieren in der zeile
Delphi-Quellcode:
die fehlermeldung:
DBForm.sqli.Open;
[Fehler] Anweisung erforderlich, aber Ausdruck vom Typ 'Boolean' gefunden was fehlt denn da noch?? |
Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
Zitat:
|
Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
es ist ein TIBSQL
|
Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
Zitat:
|
Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
ok
nun hab ichs so:
Delphi-Quellcode:
nun krieg ich die fehlermeldung, dass er mein feld IDR nicht findet
DBForm.query1.SQL.Clear;
DBForm.query1.SQL.add('Select GEN_ID(GEN_IDRECORDS_ID,1) From RDB$Database'); DBForm.query1.open; cid:=DBForm.query1.FieldByName('IDR').AsInteger; |
Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
Zitat:
Delphi-Quellcode:
oder mit
cid:=DBForm.query1.Fields[0].AsInteger;
Delphi-Quellcode:
DBForm.query1.SQL.Clear;
DBForm.query1.SQL.add('Select GEN_ID(GEN_IDRECORDS_ID,1) AS IDR From RDB$Database'); DBForm.query1.open; cid:=DBForm.query1.FieldByName('IDR').AsInteger; |
Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
danke nun klappt es :-D
allerdings addierte
Delphi-Quellcode:
immer noch ne id dazu...
DBForm.query1.SQL.add('Select GEN_ID(GEN_IDRECORDS_ID,1) From RDB$Database');
deshalb hab ichs in
Delphi-Quellcode:
geaendert... nun krieg ich wirklich die zuletzt geschriebene id raus
DBForm.query1.SQL.add('Select GEN_ID(GEN_IDRECORDS_ID,0) From RDB$Database');
:o |
Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
Zitat:
Wenn du es so machst wie oben, kann es dir passieren, wenn zwei gleichzeitig (von verschiedenen Computern) aus einen Eintrag erzeugen, das dann die ID's falsch sind, die die bekommst (mit GEN_ID(GEN_IDRECORDS_ID,0)) daher vielleicht eher so :
Delphi-Quellcode:
damit hast du 100% die richtige ID ...
DBForm.query1.SQL.add('Select GEN_ID(GEN_IDRECORDS_ID,1) From RDB$Database');
DBForm.query1.Open; id := DBForm.query1.Fields[0].AsInteger; DBForm.query1.SQL.Add('insert into IDRECORDS (ID, s, ...) values (:ID, :s);'); DBForm.query1.ParamByName('ID').AsInteger := id; DBForm.query1.ParamByName('s').AsString := s; DBForm.query1.ExecQuery; nur als Vorschlag Gruss Hans |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:24 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