Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBLookupComboBox bei neuer Dateneingabe (https://www.delphipraxis.net/87985-dblookupcombobox-bei-neuer-dateneingabe.html)

Salomon 8. Mär 2007 14:07

Datenbank: MS SQL Server Express • Zugriff über: ADO

DBLookupComboBox bei neuer Dateneingabe
 
Hallo,
ich möchte das der Benutzer in einer Eingabemaske in einem Dropdownfeld Werte auswählen kann und zwar alle Werte eines Feldes einer anderen Tabelle als die in die die eingegebenen Formulardaten aufgenommen werden sollen.


TBPerson
------------
Name
...
FK_AnredeID (FK)

TBAnrede
--------------
AnredeID (PK)
Anrede

In dem Beispiel möchte ich z.B. in die Tabelle TbPersonen die passende FK_AnredeID für z.B. "Herr" aufnehmen. Wie bekomme ich es hin das in der DBLookupComboBox alle Anreden aus der TBAnrede Tabelle stehen, in TBPerson jedoch die FK_AnredeID richtig geschrieben wird. Das ganze bei einem neu hinzugefügten Datensatz mittels append.

Ich weiß das es hier im Forum viele ähnliche Fragen gibt, leider bekomme ich es trotzdem nicht hin :(

Gruß
Marcus

marabu 8. Mär 2007 16:55

Re: DBLookupComboBox bei neuer Dateneingabe
 
Hallo Marcus,

nehmen wir an, du hättest zwei Datenbank-Tabellen Personen (ID, ANR_ID, ...) und Anreden (ID, TEXT). Setzen wir weiter zwei ADOTable-Komponenten PersonenTable und AnredenTable und mit diesen verbundene DataSource-Komponenten PersonenSource und AnredenSource voraus.

Um einen Personeneintrag zu bearbeiten setzt du die Eigenschaft DataSource aller datensensitiven Komponenten auf PersonenSource und die Eigenschaft DataField nach Wunsch. Bei der DBLookupComboBox setzt du zusätzlich die Eigenschaft ListSource auf AnredenSource, die Eigenschaft ListField benennt das anzuzeigende Feld (TEXT) und die Eigenschaft KeyField benennt das verknüpfende Schlüsselfeld (ID).

Wie du die ComboBox in ein DataGrid integrieren kannst erfährst du hier: klick

Freundliche Grüße

Salomon 9. Mär 2007 09:00

Re: DBLookupComboBox bei neuer Dateneingabe
 
Hi marabu,
danke für die super Erklärung :) Mittlerweile habe ich das alles so eingestellt. Leider werden in der DBLookupComboBox immer noch keine Werte angezeigt... Irgendetwas scheint da immer noch nicht zu passen. Hast du noch eine Idee woran das liegen könnte?

Wenn ich DBEdits mit den beiden Datasource Komponenten der Tables verbinde werden Daten angezeigt.

Gruß
Marcus

mkinzler 9. Mär 2007 09:05

Re: DBLookupComboBox bei neuer Dateneingabe
 
Zeig mal deine Einstellungen.
Ist Quelldataset aktiv?

Salomon 9. Mär 2007 09:19

Re: DBLookupComboBox bei neuer Dateneingabe
 
Guten morgen mkinzler,
als Quelldataset meinst du die ADOTabel Komponente?

Ich habe jetzt bei beiden Table Komponenten Active auf true gesetzt. Dann scheint es zu funktionieren :) Zumindest zeigen die Comboboxen die richtigen werte.

Ich habe die DBKomponenten in einem Datenmodul. Sollte ich dort bei allen Komponenten "Active" auf true setzen?
Geöffnet habe ich die Datensätze immer mit dem Open Befehl, ohne vorher active auf true zu setzen...

mkinzler 9. Mär 2007 09:25

Re: DBLookupComboBox bei neuer Dateneingabe
 
Das DataSet auf welches die ListSource zeigt muß natürlich geöffnet sein.

Salomon 9. Mär 2007 09:43

Re: DBLookupComboBox bei neuer Dateneingabe
 
Ja, ziemlich dumm von mir mit einer geschlossenen Datenmenge zu arbeiten... Naja, bin halt Anfänger. Wird aber schon besser :)

Kann ich ein KeyField vorgeben das standardmäßig angezeigt werden soll?

marabu 9. Mär 2007 12:55

Re: DBLookupComboBox bei neuer Dateneingabe
 
Angezeigt werden die Felder, welche du bei ListField einträgst. Über KeyField wird nur die Schlüsselbeziehung realisiert (Anreden.ID <-> Personen.ANR_ID).

Freundliche Grüße

Salomon 9. Mär 2007 13:07

Re: DBLookupComboBox bei neuer Dateneingabe
 
Ähm, ich habe mich etwas undeutlich ausgedrückt. Ich meine das in der Combobox schon ein Wert drin steht. z.B. Datensatz Nummer x.

marabu 9. Mär 2007 13:27

Re: DBLookupComboBox bei neuer Dateneingabe
 
Aber die Anzeige geschieht doch automatisch, sobald du die Komponente richtig konfiguriert hast. Oder meinst du beim Neuanlegen eines Datensatzes? Da musst du den gewünschten Anzeigewert im OnNewRecord-Ereignis der Personen-Tabelle vorgeben, indem du den richtigen Schlüsselwert in das entsprechende Feld einträgst.

Freundliche Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:23 Uhr.
Seite 1 von 2  1 2      

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