AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi wie bekomme ich die id des zuletzt geschriebenen Datensatzes

wie bekomme ich die id des zuletzt geschriebenen Datensatzes

Ein Thema von Grumble · begonnen am 20. Aug 2004 · letzter Beitrag vom 20. Aug 2004
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von Grumble
Grumble

Registriert seit: 19. Mär 2003
Ort: Dresden
203 Beiträge
 
Delphi 6 Enterprise
 
#11

Re: wie bekomme ich die id des zuletzt geschriebenen Datensa

  Alt 20. Aug 2004, 11:32
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...
gruss
Grumble

... moege der code mit dir sein ...
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#12

Re: wie bekomme ich die id des zuletzt geschriebenen Datensa

  Alt 20. Aug 2004, 11:35
Zitat von Grumble:
DBForm.query1.SQL.add('Select GEN_ID(GEN_IDRECORDS_ID,0) From RDB$Database'); geaendert... nun krieg ich wirklich die zuletzt geschriebene id raus
Es ist aber nicht sichergestellt, dass es auch der DS war, den du eingefügt hast.
  • Tabelle:
    • PK -> Prim. Key
    • A
    • B
    • C
  • INSERT:
    SQL-Code:
    INSERT INTO Tabelle
      (A
      ,B
      ,C)
    VALUES
      (:iA
      ,:iB
      ,:iC)
     RETURNING PK
       INTO :oPK

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.
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#13

Re: wie bekomme ich die id des zuletzt geschriebenen Datensa

  Alt 20. Aug 2004, 11:36
Zitat von Grumble:
ich dachte aber das beim insert wieder der generator anspringt und ne neue id erzeugt und ich somit nicht die richtige erhalte...
schon aber es könnte "theoretisch" sein das :

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
  Mit Zitat antworten Zitat
Benutzerbild von Grumble
Grumble

Registriert seit: 19. Mär 2003
Ort: Dresden
203 Beiträge
 
Delphi 6 Enterprise
 
#14

Re: wie bekomme ich die id des zuletzt geschriebenen Datensa

  Alt 20. Aug 2004, 11:48
@Rober_G

ich hab das jetzt so:
DBForm.SQLI.SQL.Add('INSERT INTO IDRECORDS (RECA,RECB,DATNAME,EINSPIELDATUM,EINSPIELER) values (:s, :tempstring,:vn,:d,:au) RETURNING IDR INTO :cid;'); nur krieg ich jetzt die fehlermeldung das er returning nicht kennt...

???
gruss
Grumble

... moege der code mit dir sein ...
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#15

Re: wie bekomme ich die id des zuletzt geschriebenen Datensa

  Alt 20. Aug 2004, 12:16
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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#16

Re: wie bekomme ich die id des zuletzt geschriebenen Datensa

  Alt 20. Aug 2004, 12:50
Ich kriege etwas Bauchschmerzen, wenn ich so was sehe :

DBForm.SQLI.SQL.Add('INSERT INTO IDRECORDS (RECA,RECB,DATNAME,EINSPIELDATUM,EINSPIELER) values (:s, :tempstring,:vn,:d,:au) RETURNING IDR INTO :cid;'); wieso verwendest du dafür keine STored Procedure und übergibst die Parameter in deinem Delphi-Programm ?

Noch schlimmer ist das hier :

Delphi-Quellcode:
 DBForm.sqli.sql.clear;
       DBForm.sqli.SQL.add('commit retain;');
       DBForm.sqli.ExecQuery;
Wieso nicht :

TransAction.CommitRetaining;
Gruß
Hansa
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#17

Re: wie bekomme ich die id des zuletzt geschriebenen Datensa

  Alt 20. Aug 2004, 13:03
Zitat von Grumble:
nur krieg ich jetzt die fehlermeldung das er returning nicht kennt...
Sorry, ich erinnere mich gerade an einen ähnlichen Thread. Es gibt in Interbase oder Firebird keine hübsche und konsistente Lösung dafür.

Zitat:
...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.
Warum unbedingt eine SP? (Obwohl die SP geändert werden kann ohne den Client neu zu kompostieren. )
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.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:31 Uhr.
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