Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi wie bekomme ich die id des zuletzt geschriebenen Datensatzes (https://www.delphipraxis.net/28161-wie-bekomme-ich-die-id-des-zuletzt-geschriebenen-datensatzes.html)

Grumble 20. Aug 2004 10:28


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:
       // 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;
beim suchen der id krieg ich ne exception in der steht das into unbekannt ist..

wie kann man sowas machen ?

Gruber_Hans_12345 20. Aug 2004 10:32

Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
 
Hi

Delphi-Quellcode:
// 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;
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 !!!)

Grumble 20. Aug 2004 10:37

Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
 
Zitat:

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 !!!)
gut dann werd ich die parambyname variante nehmen...

nun krieg ich beim compilieren in der zeile

Delphi-Quellcode:
DBForm.sqli.Open;
die fehlermeldung:
[Fehler] Anweisung erforderlich, aber Ausdruck vom Typ 'Boolean' gefunden

was fehlt denn da noch??

Gruber_Hans_12345 20. Aug 2004 10:40

Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
 
Zitat:

Zitat von Grumble
Delphi-Quellcode:
DBForm.sqli.Open;
die fehlermeldung:
[Fehler] Anweisung erforderlich, aber Ausdruck vom Typ 'Boolean' gefunden

was fehlt denn da noch??

Was ist den sqli für ein Typ ?

Grumble 20. Aug 2004 10:41

Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
 
es ist ein TIBSQL

Gruber_Hans_12345 20. Aug 2004 10:43

Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
 
Zitat:

Zitat von Grumble
es ist ein TIBSQL

Probiers mal mit einem TIBQuery. Mit dem sollte beides funktionieren (ExecSQL und Open)

Grumble 20. Aug 2004 10:57

Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
 
ok

nun hab ichs so:
Delphi-Quellcode:
       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;
nun krieg ich die fehlermeldung, dass er mein feld IDR nicht findet

Gruber_Hans_12345 20. Aug 2004 11:14

Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
 
Zitat:

Zitat von Grumble
ok

nun hab ichs so:
Delphi-Quellcode:
       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;
nun krieg ich die fehlermeldung, dass er mein feld IDR nicht findet

entweder mit
Delphi-Quellcode:
       cid:=DBForm.query1.Fields[0].AsInteger;
oder mit

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;

Grumble 20. Aug 2004 11:23

Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
 
danke nun klappt es :-D

allerdings addierte
Delphi-Quellcode:
DBForm.query1.SQL.add('Select GEN_ID(GEN_IDRECORDS_ID,1) From RDB$Database');
immer noch ne id dazu...

deshalb hab ichs in
Delphi-Quellcode:
DBForm.query1.SQL.add('Select GEN_ID(GEN_IDRECORDS_ID,0) From RDB$Database');
geaendert... nun krieg ich wirklich die zuletzt geschriebene id raus

:o

Gruber_Hans_12345 20. Aug 2004 11:28

Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
 
Zitat:

Zitat von Grumble
danke nun klappt es :-D

allerdings addierte
Delphi-Quellcode:
DBForm.query1.SQL.add('Select GEN_ID(GEN_IDRECORDS_ID,1) From RDB$Database');
immer noch ne id dazu...

deshalb hab ichs in
Delphi-Quellcode:
DBForm.query1.SQL.add('Select GEN_ID(GEN_IDRECORDS_ID,0) From RDB$Database');
geaendert... nun krieg ich wirklich die zuletzt geschriebene id raus

:o

wo wird den die ID verwendet und in die Tabelle geschrieben ?
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:
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;
damit hast du 100% die richtige ID ...

nur als Vorschlag

Gruss
Hans


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:22 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz