Ich stehe schon wieder einmal an.
Folgendes Problem:
Ich habe die Kundendaten euren Anleitungen folgend in PLZ, Adresse... aufgeteilt.
Bei der Tabelle Auftraege habe ich den Auftragsstatus in einer eigenen Tabelle abgelegt.
Nun möchte ich zb alle offenen Aufträge abfragen. Soweit kein Problem.(qryOffeneAuftraege)
Nur sollte bei diese Abfrage dann die Möglichkeit bestehen, den Status des Auftrages zu ändern.(zB auf nicht erhalten)
Sobald ich aber den Kundennamen in die Abfrage mit aufnehme,(brauche ich um dem Anwender den Kunden anzuzeigen) kann ich den Status nicht mehr ändern.
Dieses Problem habe ich immer wenn ich mehrere Tabellen in eine Abfrage aufnehme.
Wo habe ich hier einen Denkfehler.
Günther
Zitat von: gsaccess am März 10, 2024, 18:16:59Sobald ich aber den Kundennamen in die Abfrage mit aufnehme,(brauche ich um dem Anwender den Kunden anzuzeigen) kann ich den Status nicht mehr ändern.
Dieses Problem habe ich immer wenn ich mehrere Tabellen in eine Abfrage aufnehme.
Das ist ein Hinweis darauf, dass die Beziehungen zwischen den Tabellen nicht klar über Primär- und Fremdschlüssel definiert sind.
Zeig mal einen Screenshot des Beziehungsfenster, in dem die o.a. Tabellen sichtbar sind.
Hallo,
Die Abfrage sollte nur die Tabellen enthalten, die Du auch brauchst. Außerdem ist der Verknüpfungstyp 1 zu wählen.
Siehe Bild
Beziehungen sind verwirrend.
Bei den Adressen verwendest Du die KundenID schreibst aber KundenNr_F
Im Auftrag verwendest Du die KundenNr für die Beziehungen es sollte aber die KundenID sein.
Das hatte ich schon mal bemängelt, hast Du aber ignoriert.
ZitatZeig mal einen Screenshot des Beziehungsfenster, in dem die o.a. Tabellen sichtbar sind.
In der Anlage die Beziehungen der DB.
ZitatDie Abfrage sollte nur die Tabellen enthalten, die Du auch brauchst. Außerdem ist der Verknüpfungstyp 1 zu wählen.
Siehe Bild
Beziehungen sind verwirrend.
Bei den Adressen verwendest Du die KundenID schreibst aber KundenNr_F
Im Auftrag verwendest Du die KundenNr für die Beziehungen es sollte aber die KundenID sein.
Das hatte ich schon mal bemängelt, hast Du aber ignoriert.
Ich brauche den Ort und die Straße , da sonst der Kunde nicht eindeutig ist (tblPLZ)
Die Felder habe ich angepasst. siehe Beziehungsbild.
Die Statusfelder kann ich aber sobald die tblAdresse oder tblPlz in der Abfrage aufgenommen wird, nicht mehr ändern.
Zitat von: gsaccess am März 11, 2024, 12:56:07Ich brauche den Ort und die Straße , da sonst der Kunde nicht eindeutig ist (tblPLZ)
[...]
Die Statusfelder kann ich aber sobald die tblAdresse oder tblPlz in der Abfrage aufgenommen wird, nicht mehr ändern.
Da liegt bei dir ein Denkfehler vor. Der Kunde wird (technisch) eindeutig über seine KundenId identifiziert. Das hat nichts mit Adressen und PLZ zu tun.
In deiner Abfrage ordnest du jetzt aber jedem Kundendatensatz eine unbestimmte Anzahl von Adressen zu. - Damit sind die Ergebnisdatensätze der Abfrage
*nicht mehr eindeutig*.
Du kannst das DISTINCTROW Schlüsselwort in der Abfrage verwenden, um Access dazu zu bringen eindeutige Datensätze anzuzeigen, auch wenn diese eigentlich identisch sind. (Hier würdest du dann evtl. tatsächlich Datensätze *scheinbar* doppelt sehen, wenn es mehrere Adressen gibt.)
Wenn du dann noch dafür sorgst, dass in deiner Abfrage alle Joins ausgehend von tblKunden in dieselbe Richtung gehen, dann sollte deine Abfrage auch aktualisierbar werden.
Vielen Dank für die Rückmeldungen.
ZitatDu kannst das DISTINCTROW Schlüsselwort in der Abfrage verwenden, um Access dazu zu bringen eindeutige Datensätze anzuzeigen, auch wenn diese eigentlich identisch sind. (Hier würdest du dann evtl. tatsächlich Datensätze *scheinbar* doppelt sehen, wenn es mehrere Adressen gibt.)
Wenn du dann noch dafür sorgst, dass in deiner Abfrage alle Joins ausgehend von tblKunden in dieselbe Richtung gehen, dann sollte deine Abfrage auch aktualisierbar werden.
Distictrow habe ich bisher nicht gekannt. Ich habe damit experimentiert und eine Lösung gefunden.
Dazu habe ich in einer Abfrage tblKunde, tblAdresse, tblPlz (qryKundenAdressePlz) kombiniert, da ich diese Kombination immer wieder brauche.
Dann habe ich die Abfrage qryOffeneAuftraege erstellt und distictrow in SQL eingefügt. So kann der AuftragStatus geändert werden.
Ich hoffe, dass das so gemeint war. Siehe Bild und Test DB.
Wenn die Lösung stimmt, könnte diese auch anderen im Forum helfen.
Ich kann distictrow auf alle Fälle auch an anderen Stellen in der DB verwenden.
Günther
Ich habe mich doch zu früh gefreut. Wenn ich in der Abfrage qryOffeneAuftraege, Daten aus der Kundenadresse einfüge kann ich den Auftragstatus wieder nicht mehr verändern.
Vielleicht kann mir jemand helfen?! Wo habe ich hier noch einen Denkfehler? Siehe DB Test2 in der Anlage.
Würde mich über eine funktionierende Abfrage sehr freuen.
Günther
Da es für dieses Problem offensichtlich keine Lösung gibt, werde ich wohl die Straße und den Ort in die Tabelle Kunden aufnehmen müssen um in den Aufträgen diese anzuzeigen und trotzdem den AuftragStatus ändern zu können?!