Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   sql insert problem, datensatzübergreifend (https://www.delphipraxis.net/168012-sql-insert-problem-datensatzuebergreifend.html)

Serienchiller 30. Apr 2012 13:33

Datenbank: firebird • Version: 2.1 • Zugriff über: ib expert

sql insert problem, datensatzübergreifend
 
hallo liebe community!

ich habe gerade ein riesen problem, an dem ich seit ein paar stunden hänge :(
ich hoffe ihr könnt mir helfen...

also ich muss aus der datenbank alle rechnungen des vorjahres kopieren und als neue datensätze wieder mit erhöhtem datum in die db einsetzen, samt allen verlinkten tabellen.

soweit klappt das schon ganz gut, jetzt bin ich aber auf ein prob gestoßen:

wenn eine rechnung mit einer gutschrift verknüpft ist, hat sie den pk id, und ein weiteres feld mit der id der verknüpften gutschrift. bei der gutschrift ist es genau umgekehrt. so hängt eine gutschrift immer mit einer rechnung zusammen.

mit einer for select anweisung gehe ich nun ds für ds durch und dupliziere jeden ds und lasse dabei per generator eine neue id generieren. nur wie schaffe ich es jetzt, wenn ich einen ds erstelle, das feld gutschriftid zu füllen? diese wird ja erst später erstellt...

und wenn später die gutschrift erstellt wird, weiß ich nicht mehr, wie ich den ds vorher finden soll, der mit der jeweiligen gutschrift verknüpft ist...

ich hoffe das war einigermaßen verständlich :)

würde mich sehr über hilfe freuen...

DeddyH 30. Apr 2012 13:41

AW: sql insert problem, datensatzübergreifend
 
D.h. beide Tabellen enthalten einen Fremdschlüssel auf die jeweils andere Tabelle? Wozu soll das denn gut sein?

mkinzler 30. Apr 2012 13:41

AW: sql insert problem, datensatzübergreifend
 
Grunsätzlich geht das einfacher durch
SQL-Code:
insert into ... select
Das Problem mit der Gutschrift bleibt aber.
Ich würde diese Verknüpfung später setzen.

Ich frage mich aber, ob es sinnvoll ist, die Rechnungen des Vorjahres so vorzutragen. Zudem erscheint mir es fraglich, ob die Gutschriften im Folgejahr genauso zutreffen.

DeddyH 30. Apr 2012 13:42

AW: sql insert problem, datensatzübergreifend
 
Wenn man eine SP verwendet, könnte man sich die "alten" bzw. "neuen" IDs ja auch merken (INSERT INTO ... RETURNING...) und ggf. ersetzen.

Serienchiller 30. Apr 2012 13:45

AW: sql insert problem, datensatzübergreifend
 
es handelt sich nur um demodaten, die automatisch ins nächste jahr übertragen werden sollen, deswegen ist die gültigkeit egal.

es geht nur um die eine tabelle, in der der pk die id ist und ein weiteres feld heißt "rechgutid", wo halt die id des jeweils verknüpften ds drin steht.

das mit dem ds merken ist deswegen problematisch, weil es sein kann, dass die zusammengehörenden ds in der tabelle ganz weit auseinanderliegen...

DeddyH 30. Apr 2012 13:50

AW: sql insert problem, datensatzübergreifend
 
Zitat:

Zitat von Serienchiller (Beitrag 1164290)
das mit dem ds merken ist deswegen problematisch, weil es sein kann, dass die zusammengehörenden ds in der tabelle ganz weit auseinanderliegen...

Verstehe ich nicht. Angenommen, Du hast einen DS mit der ID 10 und einem FK auf ID 42. Dann machst Du ein INSERT INTO mit RETURNING, merkst Dir die zurückgegebene ID, kopierst den referenzierten DS, merkst Dir auch dessen ID und machst dann ein Update der ersten Tabelle, indem Du den FK auf den gerade gemerkten setzt. Dabei ist es doch wurscht, wie weit die auseinander liegen.

Serienchiller 30. Apr 2012 13:56

AW: sql insert problem, datensatzübergreifend
 
das problem is ja, dass gutschriften und rechnungen in EINER tabelle liegen und es folglich keinen foreign key gibt...

die unterscheidung ist lediglich durch das boolean feld "gutschrift" 0 oder 1 gegeben.

DeddyH 30. Apr 2012 13:58

AW: sql insert problem, datensatzübergreifend
 
Und wie sind die DS dann miteinander verknüpft?

BTW: Klemmt Deine Shift-Taste?

Serienchiller 30. Apr 2012 14:02

AW: sql insert problem, datensatzübergreifend
 
in der db garnicht. erst durch das programm kommt die verknüpfung. und das programm merkt, welche ds zusammen gehören, indem es schaut wo die id in dem einen, und "rechgutid" in dem anderen ds den selben wert haben.

DeddyH 30. Apr 2012 14:14

AW: sql insert problem, datensatzübergreifend
 
Also doch ein Fremdschlüssel, wenn auch auf dieselbe Tabelle.


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