Visualstudio 2019 VB Anbindung einer Combobox an eine Access-Datenbank

  • VB.NET
  • .NET 4.5

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Visualstudio 2019 VB Anbindung einer Combobox an eine Access-Datenbank

    Hallo !
    Bin blutiger Anfänger. Ich versuche schon länger eine Combobox an eine Access-Datenbank anzubinden, immer wieder erfolglos.
    Gegeben sei eine Datenbank mit drei Tabellen:
    1. Tabelle: Personen
    • Felder ID, Nachname, Vorname, Wohnort_ID, Land_ID
    2. Tabelle: Orte
    • Felder Ort_ID, Ort
    3. Tabelle: Länder
    Felder Land_ID, Land

    Tabellen 2 und 3 sind Nachschlagetabellen für den Wohnort und das Land und in Access bestehen Beziehungen untereinander.
    Wenn ich nun diese Datenbank als Datenquelle im Visualstudio dazufüge und die Tabelle "Personen" auf eine Form ziehe (in Detail-Ansicht), nachdem ich die Felder Ort_ID und Land_ID als Kombinationsfeld eingestellt habe, werden nur die Schlüssel der Tabellen Orte und Länder angezeigt.Eine Angliederung über das kleine Pfeilfeld habe ich bisher nicht hinbekommen !!°
    Wer kann mir helfen und mir erklären wier das funktioniert mit der Anbindung einer Combobox an verknüpfte Tabellen.

    Danke im voraus. :) :) :)


    schaffner66
    Willkommen im Forum.
    Die Detail-Ansicht gibt Dir genau das: Alle Daten des Datensatzes roh. Das heißt, dass in Deinen ID-Feldern immer nackte Zahlen stehen. Wenn Du es anders haben willst, musst Du es anders machen. Entweder mit viel Eigencode oder indem Du z.B. statt den TextBoxen, die für die IDs erzeugt werden, ComboBoxen auf's Form ziehst. z.B: Bei der Wohnort-ComboBox legst Du mittels "Pfeilfeld" (damit dürfte wohl der Smarttag oben rechts an der ComboBox gemeint sein) fest, dass die Datenquelle die Wohnorttabelle ist, Display-Member ist Ort (ich hoffe, dass das vom Typ String ist), Value-Member ist ID und Ausgewählter Member ist Personentabelle -> Wohnort_ID. Alernativ machst Du es über ein DGV statt über den Detailview. Dann musst Du mit ComboBox-Spalten arbeiten.
    Zur Erläuterung: Display-Member ist das, was angezeigt werden soll, wenn ein ComboBox-Wert festgelegt wurde, Value-Member und Ausgewählter Wert arbeiten zusammen: Wenn Du also festlegst, was der Ausgewählte Wert ist, hier also aus der Personentabelle die Wohnort-ID, wird bei Personenveränderung dessen Wohnort-ID mitgeändert. Dadurch wird in der ComboBox auch der Wert für Value-Member geändert, denn der soll ja immer gleich der Wohnort-ID der aktuell ausgewählten Person sein. Und mit der Änderung des Value-Member-Wertes ändert sich eben auch der Display-Member-Wert. Es wird dann eben in der Ortetabelle nachgeschaut, welcher Ort nun die ID hat, die der ausgewählte Personendatensatz in Wohnort_ID stehen hat und der Name des Ortes wird in der ComboBox gezeigt (Display).
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Ich danke dir erst einmal ganz herzlich, dass du überhaupt geantwortet hast. Komme recht blöd vor mit meiner Frage. Habe das mal soweit probiert aber immer noch nicht so wie ichs gern möchte. Habe die Datenbank als Datenquelle hinzugefügt und die Felder Nachname und Vorname der Tabelle 'Personen' auf die Form gezogen (als Textbox) die Felder Wohnort und Land der Tabelle 'Personen' habe ich als Combobox auf die Form gezogen und über den Smarttag der Combobox so eingestellt wie du geschrieben hast. Gleich nach dem Start der Anwendung erscheint die Windows-Form und in den Comboboxen werden nur die ID des Wohnortes und die ID des Landes angezeigt. Erst nach betätigen der Navigationsbutton erscheint wenigstens der Wohnort bei Land tut sich gar nichts. Änderungen werden nicht angenommen, im Gegenteil der Ablauf friert ein, neue Datensätze können nicht angelegt werden. Vielleicht ist es besser wenn ich mal die Testdatenbank hochlade.
    Danke schon im voraus für alle weiteren Antworten.

    ;( ?( ?( TestCombobox.zip
    Das liegt daran, dass man die ComboBox umstellen muss: Die Eigenschaft DropDownStyle musst Du auf DropDownList stellen, dann klappt's. Liegt daran, dass be DrowpDown (also jetziger Ist-Zustand) alles mögliche als Text eingetragen werden kann. Auch 1 und 2 und so. Nach dem Umstellen wird der Ort bzw. das Land korrekt angezeigt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    schaffner66 schrieb:

    Habe die Datenbank als Datenquelle hinzugefügt ...
    Das ist so kurz gesagt, aber im Hintergrund ist da überaus viel passiert:
    Der Assistent hat die Datenbank ausgelesen und dir ein strukturidentisches typisiertes Dataset erzeugt.
    Und zusätzlich TableAdapter, mit denen du das Dataset aus der Datenbank befüllen kannst, und auch andersrum: im Dataset vorgenommene Änderungen in die DB speichern.

    Und nun willst du mit Databinding arbeiten, also du willst Controls ans Dataset binden - nicht an die Datenbank!
    Man muss sich das klarmachen, was da passiert, sonst wird das nix.

    Klar kann man im weitesten Sinne sagen: Die Datenbank ist Datenquelle. Aber im Kontext von Databinding ist das die Datenquelle, wo das Programm zur Laufzeit die Daten im Speicher vorhält, also das typisierte Dataset.
    Jo, mit so einem typisierten Dataset kann man wunderbar arbeiten, dazu habe ich allerlei Filme verzapft - da sollte auch für deine Problematik was nützliches mit dabei sein:
    vier Views-Videos