Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi M:N Relation GUI Realisierung (https://www.delphipraxis.net/103824-m-n-relation-gui-realisierung.html)

Salomon 22. Nov 2007 11:41

Datenbank: MS SQL • Zugriff über: ADO

M:N Relation GUI Realisierung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich muss in meinem Program eine Realtion zwischen Teams und Aktivitäten darstellen. Ein Team kann mehrere Aktivitäten haben. Eine Aktivität kann ebenfalls von mehreren Teams genutzt werden. Folglich eine M:N Beziehung die ich mit folgenden Tabellen abgebildet habe:

TB_Teams
========
TeamID
Name
etc-

TB_Teams_Activity
===================
FK_TeamID
FK_ActivityID
Active


TB_Activities
=============
ActivityID
Name

Mir ist noch nicht ganz klar wie ich die Oberfläche so hinbekommen soll wie im Anhang. Links habe ich bereits dei Activitäten gelistet. Rechts müssen nun alle Teams aufgeführt werden und die Checkbox aktiviert werden wenn das Team diese Aktivität nutzt.

Soll ich die Team Tabelle lesen, für jedes team dynamisch eine Checkbox erstellen? Dann müsste ich zur Checkbox noch den primärschlüssel der TB_Teams_activity speichern., wenn es bereits einen Datensatz gibt...?!? Beim Speichern dann alle Checkboxen durchgehen und evtl. nen Update oder Insert auf die DB.

Sorry wenn das alles noch etwas unstrukturiert ist. Ich weiß halt noch gar nicht wie ich das machen soll...

Thanx
Marcus

Jelly 22. Nov 2007 12:17

Re: M:N Relation GUI Realisierung
 
Du musst doch nicht für jedes de m Teams und n Aktivitäten einen Record in der Zwischentabelle speichern (m*n einträge). Die Arbeit wird dadurch erschwert, wenn auch immer ein Team oder Aktiv. hinzukommt, du entsprechend auch in der Mappingtabelle hantieren musst.

Machs doch so: Ist ein Häkchen gesetzt (Team x für Akt. y), dann erstelle eine Record in der MT, ansonsten lösche ihn... Das Active Flag sparst du dir dadurch dann auch noch.

Salomon 22. Nov 2007 13:37

Re: M:N Relation GUI Realisierung
 
Das hatte ich mir auch schon überlegt. Wenn du das vorschlägst werde ich das so probieren.

Doch wie kann ich an die Checkbox den Primärschlüssel der Mappingtabelle hängen?

shmia 22. Nov 2007 13:41

Re: M:N Relation GUI Realisierung
 
Ich habe ein vergleichbares Problem so gelöst:
Bei mir war es so, dass eine bestimmte Aktion mit einem Kundenstamm, der viele Tausende Kunden enthält,
verknüpft werden sollte.
Die Verknüpfungen werden in einem DBGrid angezeigt.
Es gibt folgende Menüpunkte zum ändern der Verknüpfungen
Code:
Alle löschen
Alle einfügen
mehrfach Einfügung (man gibt die Nummern in einem weiteren Formular ein)
mehrfach Löschen (man gibt die Nummern in einem weiteren Formular ein)
per Jokerzeichen einfügen (hier ist ? und * erlaubt)
per Jokerzeichen löschen  (hier ist ? und * erlaubt)

Jelly 22. Nov 2007 14:37

Re: M:N Relation GUI Realisierung
 
Zitat:

Zitat von Salomon
Doch wie kann ich an die Checkbox den Primärschlüssel der Mappingtabelle hängen?

Du kannst z.B. eine TCheckedListBox verwenden. Di kannst du verwenden wie eine ListBox, und mittels der Methode AddObject ganze Objekte als Items anhängen. So kannst du also zu jedem einzelnen Eintrag beliebige zusätzliche Informationen hinterlegen.

Salomon 22. Nov 2007 14:48

Re: M:N Relation GUI Realisierung
 
Hört sich ähnlich wie meine Sache an. Bei mir werden es nur sehr wenige Datensätze geben, so das Checkboxen schon schön ausschauen. Ich erstelle diese jetzt dynamisch in einer Scrollbox. Den PK der Mappingtablle speichere ich als Tag.

Falls das mit dem Tag nicht hinhaut, ist die TCheckedListBox ein super Tipp :) Objecte habe ich bereits an Listboxen gehängt.

Jetzt Loop ich durch die Mappingtabelle und aktivire die entsprechenden Checkboxen.



Das Speichern wird noch einmal Tricky....

Kann ich alle dynamisch erzeugten Checkboxen ein "OnClick" oder "OnChange" Ereignis zuweisen??

Dann könnte man bein Klicken auf eine Box direkt den entsprechenden Eintrag in der DB vornehmen, oder löschen.

DeddyH 22. Nov 2007 14:56

Re: M:N Relation GUI Realisierung
 
Zitat:

Zitat von Salomon
Kann ich alle dynamisch erzeugten Checkboxen ein "OnClick" oder "OnChange" Ereignis zuweisen??

Kurz und knapp: ja

Jelly 22. Nov 2007 14:57

Re: M:N Relation GUI Realisierung
 
Zitat:

Zitat von Salomon
Kann ich alle dynamisch erzeugten Checkboxen ein "OnClick" oder "OnChange" Ereignis zuweisen??

Natürlich kannst du das... Nach dem Erzeugen der CheckBox:

Delphi-Quellcode:
chk := TCheckBox.Create(Self) ;
chk.Parent := self ;
chk.OnClick := CheckBoxOnClick ;



procedure TForm1.CheckBoxOnClick (sender : TObject)
begin
     // Mach was... sender ist die Checkbox, die geklickt wurde.
end ;
Ich würde aber trotzdem die CheckListBox bevorzugen. Das erspart dir das manuelle Erstellen der Checkboxen, die Scrollbox usw.

Salomon 22. Nov 2007 15:10

Re: M:N Relation GUI Realisierung
 
Die Checklistbox kannte ich noch gar nicht. Scheint aber ganz praktisch zu sein.

Naja, habe die jetzt soweit schon dynamisch erstellt. Wenn das mit dem Event noch so hinhaut wie ich mir das vorstelle habe ich es dank eurer Hilfe fast geschafft :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz