Autor Beitrag
Josef-B
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 293

2003 Server, Win7, Win8
Delphi 2010 Pro, Firebird 2.5
BeitragVerfasst: Do 10.07.03 15:21 
Ich habe eine Auftragsdatei mit den 'Auftragsdaten' und eine mit den 'Auftragspositionen'

Ich habe einen Fremdschlüssel wie folgt kreiert:

Alter table Auftragspositionen
add foreign key (auftragsnummer)
references auftragsdaten (auftragsnummer);

Wenn ich jetzt Daten speichern will, dann kommt die Fehlermeldung
'violation of FOREIGN KEY constraint 'INTEG_XX' on table auftragspositionen'

Ich kann absolut nicht mit dieser Meldung anfangen. Wer kann mir helfen?

Danke im Voraus.
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Do 10.07.03 16:07 
Du ahst einfach in die Auftragspositionen einen Datensatz eingefügt, der in der auftragsnummer einen Inhalt hatte, den es in der Tabelle auftragsdaten nicht gibt, es muss einen Datensatz in Auftragsdaten geben, der als Auftragsnummer was hat, das du dann in die Datensätze in auftragspositionen verwenden kannst.
Josef-B Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 293

2003 Server, Win7, Win8
Delphi 2010 Pro, Firebird 2.5
BeitragVerfasst: Do 10.07.03 19:20 
Ich denke mal es liegt daran, dass ich immer zuerst die Auftragspositionen abspeichere und danach erst die Auftragsköpfe. Es geht aber nicht andersrum, warum, keine Ahnung. Ich habs mehrmals versucht.
Ich kann schon vor dem Abspeichern das Append nicht andersrum setzen.
Die Tabelle Auftragspositionen hat den Fremdschlüssel, ist doch richtig oder?
Ich habe zwei TIBDATASETS.

Brauche ich eigentlich unbedingt den Fremschlüssel, man kann doch die
Verknüpfung auch über Sql machen, oder?
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Do 10.07.03 19:23 
Du kannst in der Abfrage auch einen "manuellen" Schlüssel machen, klar, aber so ist es sicherer. Trag doch einfach als allererstes, bevor Du irgendwelche Positionen erstellst, die Auftragsdaten ein, dann funktioniert das. Achja, ein Commit solltest Du natürlich auch machen, sonst könnte es schwierig werden.
Josef-B Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 293

2003 Server, Win7, Win8
Delphi 2010 Pro, Firebird 2.5
BeitragVerfasst: Do 10.07.03 21:30 
Ja, es liegt eben daran, dass ich beide Tabelle praktisch gleichzeitig beschreibe. Die Commits habe ich gesetzt. Mit Sql, so wie du sagst manuell gehts aber. Ich möchte eben die Auftragsköpfe und Positionen gleichzeitig in einem Formular erstellen.

Aber dann gleich noch was anderes. Wenn ich das Commit setzte, schreibt Interbase ja die Daten eigentlich fest. Trotz Commit sieht man aber die Daten dann in der IBConsole erst, wenn ich das Formular geschlossen habe. Wie kann ich das einstellen, dass der Satz gleich mit dem Commit entgültig geschrieben wird und dann für andere Benutzer auch schon sichtbar ist? Wir möchten nämlich mit mehreren das gleiche Formular nutzen (gleichzeitig). (Es erfassen gleichzeitig mehrer Benutzer Aufträge). Ich habe es schon über den Transactions-Edit versucht, war aber nicht erfolgreich.

Ich bin mal gespannt, ob ich mal mit Delphi und Interbase gut klar komme.