![]() |
Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
danke fuer die vielen tipps :)
ich dachte aber das beim insert wieder der generator anspringt und ne neue id erzeugt und ich somit nicht die richtige erhalte... es ist eigentlich nie der fall dass 2 gelichzeitig zugreifen... es geht erstmal nur um das fuellen der datenbank, es wird textdatei eingelesen und das in datenbank geschrieben... |
Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
Zitat:
Der Output Parameter (sollte auch als solcher definiert werden ;) ) enthält jetzt den PK des neuen DS. Nachtrag: @Gruber_Hans_12345 Dein Vorschlag würde zwar theoretisch funktionieren, vertößt aber IMHO gegen die Grundregel einen PK immer aus einem BEFORE INSERT Trigger zu beziehen. ;) |
Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
Zitat:
Insert von Computer 1 ... (bekommt ID 12) Insert von Computer 2 ... (bekommt ID 13) GEN_ID(..., 0) bekommst ID 13 GEN_ID(..., 0) bekommst ID 13 Die ID's in der Datenbank sind und bleiben eindeutig, nur den ID den du dir danach rausholst könnte sein, das der falsch ist ... Da auch die Generatoren nicht über Transaktionen laufen ! Aber wennst nur von einem PC aus das ganze machst (und auch keine Threads verwendets) dann sollte es auch kein Problem geben ! Gruss Hans |
Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
@Rober_G
ich hab das jetzt so:
Delphi-Quellcode:
nur krieg ich jetzt die fehlermeldung das er returning nicht kennt...
DBForm.SQLI.SQL.Add('INSERT INTO IDRECORDS (RECA,RECB,DATNAME,EINSPIELDATUM,EINSPIELER) values (:s, :tempstring,:vn,:d,:au) RETURNING IDR INTO :cid;');
??? |
Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
Ich glaube, das das nur mit einer Stored PRocedure funktioniert .. aber das müßte Robert_G besser wissen....
@Robert_G In meinem Projekt find ich die Version mit ID's holen und dann im Insert String einfügen besser (habe mir einfach eine neue IBQuery erzeugt die das Standardmäßig macht) Generator name = TabellenName + _ID ... daher funktioniert das ganze ganz gut. und bei über 300 Tabellen ist es mir zu viel aufwand / Wartung ... jedesmal eine Stored Procedure zu verwenden ... ausser ich habe etwas übersehen, wie es besser funktioniert ... Dann würde ich mich freuen, wenn du eine Lösung dafür hast. Gruss Hans |
Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
Ich kriege etwas Bauchschmerzen, wenn ich so was sehe :
Delphi-Quellcode:
wieso verwendest du dafür keine STored Procedure und übergibst die Parameter in deinem Delphi-Programm ?
DBForm.SQLI.SQL.Add('INSERT INTO IDRECORDS (RECA,RECB,DATNAME,EINSPIELDATUM,EINSPIELER) values (:s, :tempstring,:vn,:d,:au) RETURNING IDR INTO :cid;');
Noch schlimmer ist das hier :
Delphi-Quellcode:
Wieso nicht :
DBForm.sqli.sql.clear;
DBForm.sqli.SQL.add('commit retain;'); DBForm.sqli.ExecQuery;
Delphi-Quellcode:
:gruebel:
TransAction.CommitRetaining;
|
Re: wie bekomme ich die id des zuletzt geschriebenen Datensa
Zitat:
Zitat:
Niemand legt heute noch Trigger für einen PK per Hand an. Dafür gibt es dynamisches SQL. ;) Wenn du per Trigger die PK festlegst, ist es vollkomen egal wie auf die Daten zugegriffen wird -> Du bekommst immer einen konsistenten PK. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:37 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-2025 by Thomas Breitkreuz