none
Nachschlagefeld erstellen... RRS feed

  • Frage

  • Hallo,

    ich möchte ein Nachschlagefeld realisieren.

    Tab_Daten mit fld_ID, fld_Name, fld_OrtID
    Tab_Orte mit fld_OrteID, fld_Ort

    Nun möchte ich von Tab_Daten im Feld fld_OrtID auf die Tab_Orte zum fld_OrteID verweisen.

    Ich habe versucht mit der Combobox das Gewünschte zu erreichen - leider ohne Erfolg.
    In der Combobox greife ich jetzt auf die Tab_Orte zu und schreibe dann den selektierten Inhalt in das fld_Ort der Tab_Daten.
    Ich wollte aber über eine Verknüpfung eine Änderung eines Ortsnamens in der Tab_Orte an das Feld fld_OrteID der Tab_Daten "weiterleiten".
    Also mit Fremdschlüssel Definierung usw.

    In MS Access kann man ein Nachschlagefeld erstellen und die Tab/Felder mit Lösch- und Änderungsweitergabe verknüpfen.
    Wie kann man dieses in VBExpress 2008 realisieren. Die Datentabellen befinden sich auf einen SQLServer Express 2005.

    PS: Gibt es weitere Controls welche dieses automatisch anbieten? Gibt es Anbieter welche auch andere DBControls anbieten? (Für Delphi gibt es hunderte Anbieter)

    Vielen Dank für alle Hinweise
    Tom

    Donnerstag, 8. Oktober 2009 05:55

Antworten

  • Hi Tom,
    ein Nachschlagefeld lässt sich in .NET einfach mit unterschiedlicher Bindung realisieren, z.B. ComboBox:

    - DataSource an Master-Tabelle (Nachschlagetabelle)
    - Langtext zur Anzeige (DisplayMember)
    - Referenz (Schlüsselfeld) an ValueMember

    - ausgewählter Eintrag (SelectedValue) an Fremdschlüsselfeld in der Child-Tabelle

    -- 
    Peter 
    Freitag, 9. Oktober 2009 20:52

Alle Antworten

  • Hallo Tom,

    ein Nachschlagefeld in dem Sinne gibt es nicht. In Access gibt es dieses übrigens auch nicht als separates Steuerelement. Dahinter verbirgt sich ein Assistent, der als Datenquelle eine entsprechende SQL-Anweisung für eine Combobox aufbaut.

    Wenn ich dich richtig verstehe, ist dein Ansatz mit den Comboboxen also auch gar nicht so falsch. Du musst eigentlich nur in der Combobox, die zuerst geändert wird, auf das Ereignis SelectedIndexChanged reagieren. Abhängig von der neu ausgewählten ID lädst du dann den Inhalt der zweiten Combobox im ausgelösten Eventhandler neu. Ein automatisiertes Nachschlagefeld würde im Hintergrund auch nichts anderes machen...

    Viele Grüße
    Jan
    Donnerstag, 8. Oktober 2009 08:03
  • Hallo Jan,

    vielen Dank für Deine Antwort.

    In Access kümmert sich die JetEngine um diese Referenzen - soweit ich weiß.
    Die Beschreibung des Beispiels in meinem Posting soll nur das generelle Problem illustrieren.

    Das heißt, wenn in der Tab_Orte irgendwann der Name eines Ortes gändert wird, wird in der Tab_Daten der Inhalt in dem fld_Ort ebenfalls geändert.
    Wenn in der Tab_Orte ein Ort gelöscht wird, wird geprüft ob über eine Verknüpfung zu einer anderen Tab dieser Feldinhalt verwendet wurde. (Aktualisierungsweitergabe / Löschweitergabe)

    usw., usw

    Mit dem SQLServer wird das so einfach nicht sein - das ist mir klar. Wahrscheinlich müssen in der DB irgendwelche Trigger oder dergleichen programmiert werden.
    Meine Frage ist nun, wenn es in VB keine Assistenten dafür gibt, gibt es irgendwo eine EINFACHE SampleDB in welcher dieses demonstriert wird?

    Danke für alle Hinweise.

    Tom
    Donnerstag, 8. Oktober 2009 08:19
  • Hallo Tom,

    die JetEngine führt die Befehle aus, die der Assistent wiederum in SQL hinterlegt hat. Der SQL-Befehl zum Nachschlagen ist auch direkt einsehbar und änderbar und das Feature kann somit auch ohne den Assistenten von Hand gebaut werden.
    Ich gehe nochmal darauf ein, um klarzumachen, dass dies in Access auch nicht automatisiert abläuft und der Assistent nur die notwendigen Schritte abnimmt. Einen Nachschlagefeld in VB gibt es allerdings nicht, sodass du dies von Hand programmieren musst.

    Ein fertiges Beispiel für diesen Anwendungsfall kenne ich nicht, allerdings ist dies auch nicht von der Datenbank abhängig. Was du machen möchtest ist eigentlich recht einfach (wenn ich dich richtig verstanden habe) und ähnliche Beispiele sind in den Büchern über ADO.NET zahlreich enthalten. Datenbank und Oberfläche sind halt nicht wie in Access unter einer Anwendung vereint, sodass du dich selbst um die Verbindung zwischen Oberfläche und Datenbank wie das Löschen der Datensätze kümmern musst.

    Kannst du hier deinen Code posten oder irgendwo die Beispielanwendung hochladen? Dann ist es für mich und andere hier sicherlich leichter, dir konkrete Tipps zu geben...

    Viele Grüße
    Jan
    Donnerstag, 8. Oktober 2009 08:53
  • Hi Tom,
    ein Nachschlagefeld lässt sich in .NET einfach mit unterschiedlicher Bindung realisieren, z.B. ComboBox:

    - DataSource an Master-Tabelle (Nachschlagetabelle)
    - Langtext zur Anzeige (DisplayMember)
    - Referenz (Schlüsselfeld) an ValueMember

    - ausgewählter Eintrag (SelectedValue) an Fremdschlüsselfeld in der Child-Tabelle

    -- 
    Peter 
    Freitag, 9. Oktober 2009 20:52
  • Hallo Peter,

    Deine Anleitung hat mich wirklich weitergebracht! Danke!!

    Tom
    Sonntag, 11. Oktober 2009 11:25