Datenbank: Firebird • Version: 2.5 • Zugriff über: UniDac
Master-/Detail wie am Besten
Hallo Leute,
ich beschäftige mich seit langem mal wieder mit Delphi und möchte gleich mal meine erste Frage loswerden. Welche Ansätze gibt es zur Umsetzung von einer Oberfläche die das Editieren von Master-/Detail Datensätzen ermöglicht ? Aktuell habe ich gerade das Problem. Es sind folgende 2 bzw. 3 Table gegeben : - Table Benutzer (MasterTable) ID Integer PK AutoInc(Generator) Name Varchar(45) ......... - Table Benutzer2Gruppe (Detail-table) ID Integer PK AutoInc(Generator) BENUTZER_ID FK auf Benutzer/ID BENUTZERGRUPPEN_ID FK auf BENUTZERGRUPPEN/ID ......... - Table BenutzerGruppen ID Integer PK AutoInc(Generator) Name Varchar(45) ......... Bei DetailTable wurde : - MasterSource auf den BenutzerTable gesetzt - MasterField auf "ID" - DetailField auf "BENUTZER_ID" - CachedUpdates auf True Damit funktioniert fast alles so wie es soll, nur ich bekomme es um's verrecken nicht hin, das wenn im Mastertable ein neuer Datensatz angelegt wird auch die neuen Datensätze des Detailtable erfolgreich mitgepostet werden. Die neue ID wird im OnBeforePost des MasterTables aus einem Generator gelesen und gesetzt. Die neue Benutzer ID wird im DetailTable im OnNewRecord/BeforeInsert gesetzt, somit müssten eigentlich alle Felder gefüllt sein. Wenn ich aber MasterTable.Post aufrufe, werden die MasterDaten gespeichert, die Detail-Daten aber nicht, es kommt keine Fehlermeldung nichts. Hat jemand eine Idee/Tipp für mich ? Welche Alternative Lösungsansätze gibt es noch ? Querys für die Detail-Daten ? (Vor-/Nachteile) Für ein paar Denkanstöße wäre ich sehr dankbar, Gruß ByteAngel |
AW: Master-/Detail wie am Besten
Das ist auch keine Master-Detail-Beziehung sondern eine N:M-Beziehung.
Ein Benutzer kann Mitglied in mehren Gruppen sein. Eine Gruppe kann mehrere Benutzer haben. Dies wird durch die 3. Tabelle "Benutzer2Gruppe" abgebildet. Wenn du ein Formular hast in dem die Benutzer angelegt und editiert werden, dann könnte man dort für den aktuell selektierten User eine Liste der Gruppen anzeigen in denen der User Mitglied ist. Allerdings wäre diese Liste read-only; man kann sie nicht direkt editieren.
SQL-Code:
Es gibt dann 2 Buttons "zu Gruppe hinzufügen" und "aus Gruppe entfernen".
SELECT BenutzerGruppen.Name FROM
BenutzerGruppen INNER JOIN Benutzer2Gruppe ON BenutzerGruppen.ID=Benutzer2Gruppe.BENUTZERGRUPPEN_ID WHERE Benutzer2Gruppe.BENUTZER_ID = :IdUser Beim Hinzufügen wird ein SQL INSERT ausgeführt und beim Entfernen ein DELETE. Genau das Gleiche kann man in dem Formular machen in dem die BenutzerGruppen editiert werden. Du wirst um SQL-Kenntnisse nicht drumrumkommen. Die Tabelle Benutzer2Gruppe braucht übrigens nur 2 Felder; das Autoinc-Feld kannst du löschen und im Gegenzug den Primärschlüssel auf die beiden verbleibenden Felder legen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:08 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