DBMS:
Es ist Access. Ich greife aber über Borland C++ builder darauf zu, über odbc eben. Sprich SQL Syntax.
Obiges Beispiel mit den Tabellen war nur abstrakt. Hier jetzt das konkrete Beispiel.
Was soll erreicht werden?
Also. In der T03 Tabelle befinden sich Baugruppen. Diese werden geprüft. Das Testergebnis wird dann in T02 abgelegt.
Daher sind T02 und T03 miteinander verknüpft.
Da eine baugruppe mehrmals geprüft werden kann gilt folgende Relation:
T02_BAUGRUPPE_FK <n>---<1> T03_KUNDE_FK
T02_PRUEFUNG hat den bool T02_PRUEFUNG_ERFOLGREICH. Hier wird gespeichert, ob die Prüfung der Baugruppe ok war, oder nicht.
DAS UPDATE STATEMENT.
Das Update Statement soll nun T03_KUNDENAUFTRAGSNUMMER updaten und zwar für alle Baugruppen die eine bestimmte T03_BEZEICHNUNG haben!
Das habe ich so weit realisiert.
Aber nun kommt der verzwickte Part.
T03_KUNDENAUFTRAGSNUMMER darf nur zugewiesen werden, wenn in der Tabelle T02_PRUEFUNG das Attribut T02_PRUEFUNG_ERFOLGREICH true ist. Und zwar nicht irgendwann, sondern zur aktuellsten Version.
Wie gesagt können zu einer Baugruppe mehrere Prüfungen durchgeführt werden.
So kann bei Prüfung 1, 2 und 3 der Wert falsch sein.
Bei Prüfung 4 kann dann der Wert dann true sein, für die Baugruppe. Und erst dann soll eben die Baugruppe ihre Kundenauftragsnummer zugewiesen bekommen.
Hintergrund:
Einer Baugruppe die die Prüfuing nicht bestanden hat, soll mit diesem Update keine Kundenauftragsnummer zugewiesen werden.
Falls es nicht durch Abfragen lösbar sein sollte, dann ziehe ich in Erwäögung, dass halt noch in der Baugruppentabelle gespeichert wird, ob der Test erfolgreich war, doer nicht.
Aber elegant wäre dieser Ansatz sicher nciht.
//EDIT
Und noch was.
Falls das zu kompliziert ist habe ich noch eine zweite Alternative.
Es gibt auch noch eine T05_KUNDE mit dem Attribut T05_KUNDENNUMMER
Jede Baugruppe hat eine Kundennummer.
D.h. T03_BAUGRUPPE <n>----<1> T05_KUNDE, weil ein Kunde ja mehrer Baugruppen beziehen kann, aber eine Baugruppe nur an einen Kunden geschickt wird.
Wenn eine Prüfung nciht erfolgreich geprüft wird, dann wird die Kundennummer auf 0, doer -1 gesetzt. Somit ist sie keinenm Kunden zugewiesen.
Das heisst dann beogen auf obiges Problem: Wenn ich überprüfen könne, ob die Auftragsnummer der Baugruppe stimmt UND die Baugruppe eine Kundennummer besitzt, wäre das schon meine Lösung...
// End EDIT
Gruß, Basti...
Anbei dann noch die Struktur der Tabellen, Vielen Dank
T02_PRUEFUNG
LONGINT T02_AUTO_ID
DATE/TIME T02_PRUEFDATUM
DATE/TIME T02_PRUEFZEIT
JA / NEIN T02_PRUEFUNG_ERFOLGREICH
MEMO T02_PRUEFERGEBNIS
TEXT T02_PRUEFPLATZ
TEXT T02_PRUEFPROG_VERSION
LONGINT T02_PERONAL_NR_FK
LONGINT T02_BAUGRUPPE_FK
T03_BAUGRUPPE
LONGINT T03_PK
TEXT T03_SERIENNUMMER
TEXT T03_BEZEICHNUNG
TEXT T03_KUNDENAUFTRAGSNUMMER
LONGINT T03_AUFTRAGSNUMMER_FK
LONGINT T03_KUNDE_FK