![]() |
Tabelleninhalt in Checklistbox anzeigen
Hallo, ich stehe vor folgendem Problem.
Ich möchte in einer Kundendatenbank diverse Kategorien mit abspeichern. d. h. in einer eigenen Tabelle sind die div. Kategorien abgelegt - z. B. Bau,Metall,Holz usw. Diese sollen dann in einer Eingabemaske einem Kunden zugeordnet werden können. Es wäre am einfachsten, wenn das über eine Checklistbox geht. Zu einem Kunden können aber auch mehrere Kategorien gehören. (m:n - Beziehung) Kann mir jemand helfen dies zu realisieren ? |
Re: Tabelleninhalt in Checklistbox anzeigen
Hallo needatip,
wo genau brauchst du Hilfe. Willst du wissen wie man einen Eintrag in eine Listbox schreibt? Willst du wissen wie man auf eine Datenbanktabelle zugreift (dann sag uns noch welche DB und ggf. welche Komponentensammlung du nutzt)? |
Re: Tabelleninhalt in Checklistbox anzeigen
Hab mich zu ungenau ausgedrückt.
Benutze Paradox Datenbanken. Habe 2 Tabellen; eine davon enthält die Adresse und die andere unterschiedliche Branchen. Nun habe ich eine Eingabemaske erstellt, die auf der einen Seite die Adressdaten enthält und auf der anderen sollen die jeweils zugehörigen Branchen in einer Checklistbox angekreuzt werden. Die Datenbankanbindung über die Table-Komponente funktioniert ja. Nur wie stelle ich es an, dass die zu einer bestimmten Adresse die jeweiligen Branchen in einer Checklistbox angezeigt werden. Oder gibt es vielleicht eine elegantere Lösung hierzu, als diese in einer Checklistbox anzeigen zu lassen ? Hab mir halt die vorgestellt, weil man hier nur die entspr. Haken setzen muss. Diese sollen dann in der Branchen Tabelle gespeichert werden. Gibt es so was wie eine DBCheckListBox ? Ich hoffe, dass ich es nun besser erklären konnte. |
Re: Tabelleninhalt in Checklistbox anzeigen
Hallo needatip,
das sind zwei Probleme. Zunächst einmal willst du jeder beliebigen Adresse m verschiede Branchen aus der Branchentabelle zuordnen. Das macht man in der Regel über eine dritte Tabelle. Nenne die dritte Tabelle einfach AdressenBranchen. Diese hat nur 2 Felder, nämlich die ID der Adresse und die ID der Branche. Beide Felder zusammen bilden den Schlüssel. Alternativ dazu kannst du noch eine eigene ID in der dritten Tabelle definieren, die den Schlüssel darstellt. Jetzt könntest du in deinem Formular einfach eine Master-Detail Verbindung herstellen, wobei der Master die Adresstabelle ist und die neue AdressenBranchen Tabelle die Detaildatensätze zur Verfügung stellt. Über einen Lookup zeigst du aber nicht die ID der Branche, sondern die Bezeichnung an. Die Anzeige über eine Checklist ist natürlich auch eine gute Lösung. Dazu fügst du zunächst alle möglichen Branchen als Items ein. Dann gehst du durch die Detail Tabelle und stellst fest, welche Branchen für diese Adresse bereits eingetragen sind und markierst diese in der ChecklistBox. Bei jeder Änderung in der Checklistbox fügst einen Datensatz in die Detailtabelle ein oder löscht den entsprechenden Eintrag. Eine DBCheckList bietet sich hier nicht an, weil dieses nur den Zustand eines Feldes darstellt, der in der Regel ein Boolscher Wert ist. |
Re: Tabelleninhalt in Checklistbox anzeigen
OK, vielen Dank,
den Lösungsweg hab ich verstanden, hab aber noch einige Fragen dazu. Soll ich in der AdressenBranchen-Tabelle einen zusammengesetzen Schlüssel (Adr_ID + BR_ID) definieren? Kannst du mir noch genau angeben wie das mit der Master/Detailverbindung genau funktioniert ? Hab jetzt folgende 3 Tabellen: 1. Tabelle Adressen Nr : Zähler Name : String 2. Tablelle AdressenBranchen Nr : Zähler Adr_ID : LongInt Bra_ID : LongInt 3. Tablle Branchen Nr : Zähler Gruppe : Integer Bez : String Was stelle ich genau bei MasterSource in welcher Tabelle ein. Wei mache ich es dann mit dem Lookup ? Für ein paar mehr Details wäre ich dir sehr dankbar. |
Re: Tabelleninhalt in Checklistbox anzeigen
Hallo needatip,
zunächst musst du für Tabelle AdressenBranchen noch einen SekundärIndex definieren. Nenne ihn "nachAdressen" und wähle das Feld Adr_ID aus. Jetzt packst du 3 TTable Objekte auf dein Formular und 2 Sourcen. Verbinde die 3 Tabellen Objekte mit je einer Tabelle. Setze jetzt MasterSource von TabAdrBra auf SrcAdressen (DataSource auf die Adressentabelle). Wähle MasterField aus und selektiere dort zunächst den neuen Index "nachAdressen", den du mit dem Nr Feld aus Adressen verbindest. Wenn du jetzt noch 2 DBGrids auf das Formular packst und mit SrcAdressen bzw. SrcAdrBra verbindest, kannst du nach dem Öffnen der Tabellen schon einmal sehen, wie die Verbindung funktioniert. Füge über den Feldeditor alle Felder von Adressen und AdressenBranchen hinzu. Klicke mit der rechten Taste im Feldeditor der Tabelle TabAdrBra und wähle "Neues Feld": Name = Branchen, Typ = (gleicher Typ wie Bez in Tabelle Branchen), Größe (wie Bez in Branchen), FeldTyp = Nachschlagen, Schlüsselfelder = Adr_Br, Datenmenge = TabBranchen, Schlüssel = Nr, ErgebnisFeld = Bez. Jetzt setzt du noch die Eigenschaft Visible von den Feldern aus TabAdrBra auf false, die nicht angezeigt werden sollen. Und FERTIG! :mrgreen: |
Re: Tabelleninhalt in Checklistbox anzeigen
Super,
bin jetzt schon einen riesen Schritt weiter; Aber wie man die Branchen dann in einer Checklisbox auswählen kann, könntest du mir noch verraten. Und wie verknüpft man die dann ? |
Re: Tabelleninhalt in Checklistbox anzeigen
Hallo needatip,
zur Initialisierung der Checklistbox läufst du z.B. beim OnCreate des Formulars durch die Branchentabelle und fügst alle Einträge zur Items Eigenschaft hinzu. Das DataSource Object, dass der Adressen Tabelle zugeordnet ist, zeigt an, wenn ein anderer Datensatz aktiviert wird und zwar über sein OnDataChange Event. In diesem Fall läufst du durch die Detailtabelle TabAdrBra und aktivierst für alle gefundenen Einträge die entsprechende CheckBox in der CheckBoxList, damit sind diese beiden Elemente zunächst synchronisiert. Jetzt musst du nur noch auf das OnClickCheck Event der CheckListBox reagieren und die Änderung, die der Benutzer in der CheckListBox durchgeführt hat in die TabAdrBra Tabelle übernehmen. |
Re: Tabelleninhalt in Checklistbox anzeigen
Tausend Dank erstmal,
werde das gleich mal probieren. |
Re: Tabelleninhalt in Checklistbox anzeigen
Hat alles geklapt, nur mit der letzten Problematik komm ich noch nicht ganz klar.
Wie setzt man den Haken in der CheckListBox beim Durchlaufen der TabAdrBra ? Und wie sieht die OnClickCheck Routine aus ? Wie aktualisiere ich dann die TabAdrBra Tabelle ? Kannst du mir hier vielleicht nochmals behilflich sein ? Vielleicht ein paar Codeschnipsel oder so. Besten Dank im voraus. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 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