Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Nach insert aktuellen Datensatz herausfinden (https://www.delphipraxis.net/158428-nach-insert-aktuellen-datensatz-herausfinden.html)

Jumpy 17. Feb 2011 09:59

Datenbank: Oracle • Version: 10g • Zugriff über: TADOQuery

Nach insert aktuellen Datensatz herausfinden
 
Hallo,

hab eine Eingabemaske gebastelt, mit DBEdit-Feldern und kann damit schön meine Tabelle bearbeiten (Zeigt jeweils einen Datensatz an).
Hab nun einen Button neu erstellt, der meine Datenquelle in den Insert-Modus versetzt.
Ich geb die Daten ein und beim drücken auf einen Button speichern wird gepostet.

Das Problem ist nun, das die ID des Datensatze dabei automatisch per Trigger erstellt wird, d.h. in der Datenbank ist alles richtig angelegt. Aber in meiner Eingabemaske ist diese ID noch nicht sichtbar. Dies wäre erst nach einem Requery der Fall, aber dann zeigt meine Eingabemaske wieder auf den ersten Datensatz. Und da ich die ID nicht kenne, kann ich nicht über diese zum gerade erstellten Datensatz springen.

Kann mir mal jemand sagen, wo ich da einen Denkfehler mache? Das kann doch nicht so schwierig sein, wie mir das gerade vorkommt?

DeddyH 17. Feb 2011 10:03

AW: Nach insert aktuellen Datensatz herausfinden
 
http://coding.derkeiler.com/Archive/.../msg00008.html

Jumpy 17. Feb 2011 10:59

AW: Nach insert aktuellen Datensatz herausfinden
 
Die Lösung schlägt, wie ich es verstehe, vor, gar nicht TADOQuery.Insert zu benutzen, sondern manuell einen Insert per SQL abzusetzen?

DeddyH 17. Feb 2011 11:05

AW: Nach insert aktuellen Datensatz herausfinden
 
Ja, entweder so oder anschließend den aktuellen Wert der Sequence auszulesen.
Zitat:

Another alternative is to submit 2 queries - the first would be to retrieve
the sequence "nextval":

SELECT [sequence name].NEXTVAL as my_seq_nextval FROM dual

and the next would be the INSERT where you actually provide the
value you just SELECT'ed. It does involve an initial SELECT query to get
the value of the sequence nextval, but with this approach you don't need
to use the dbi last_insert_id.
[edit] Im zitierten Text macht er es andersherum: erst den nächsten Wert ermitteln, dann einfügen. Im Kern macht das aber keinen Unterschied, man muss lediglich darauf achten, dass das innerhalb derselben Transaktion geschieht. [/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 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