Benutzer mit den meisten Antworten
Nachschlagefeld erstellen...

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
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- Als Antwort vorgeschlagen Peter Fleischer Freitag, 9. Oktober 2009 20:54
- Als Antwort markiert Robert Breitenhofer Montag, 12. Oktober 2009 11:59
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- Als Antwort vorgeschlagen Peter Fleischer Freitag, 9. Oktober 2009 20:53
-
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 -
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 -
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- Als Antwort vorgeschlagen Peter Fleischer Freitag, 9. Oktober 2009 20:54
- Als Antwort markiert Robert Breitenhofer Montag, 12. Oktober 2009 11:59