Hallo Kagome,
deine Tabellen und Beziehungen sehen doch jetzt gut aus. Die neue Tabelle mit den Zuordnungen von Anbieter und System ist notwendig, da du ja nur die Systeme des ausgewählten Anbieters auswählen möchtest. Das kann das Programm nicht riechen, somit ist die Tabelle notwendig. Die Systeme und die Anbieter in getrennten Tabellen zu halten ist aufwendiger, aber eine gute Idee. Dafür kannst du dir ja ein einfaches Endlosformular bauen, um diese Zuordnungen administrieren zu können.
Aus deinen Zeilen entnehme ich, dass du gerne die "elegante" Variante realisieren willst. Finde ich gut, da heut zu Tage dem Anwender in Formularen oft unsinniger Schrott angeboten wird. Im Prinzip habe ich das Vorgehen schon beschrieben, jedoch nicht, hatte ich nicht über die IDs referenziert sondern direkt über die Namen (für Anbieter und System). Deshalb hier die Lösung über deine IDs
Ich gehe davon aus, dass du eine Tabelle RSAnbeiterUndSysteme wie von dir beschrieben angelegt hast und die Systeme den Anbietern entsprechend zugeordnet hast. Ich habe statt Anbietername das Feld AnbieternameID genannt, sonst ist das etwas verwirrend, entsprechend beim Systemfeld.
Ich habe die Felder mal gefüllt, wie es nach deinen Angaben aussehen müsste:
RPAnbieter:
ID AnbieterName
1 Swisslog
2 Aerocom
3 Sumetzberger
RPSystem:
ID Systemname
1 TranspoSmart
2 TranspoNet
3 AC 3000
4 PowerControl
5 Unbekannt
RPAnbeiterUndSystem:
ID AnbieternameID SystemnameID
1 1 1
2 1 2
3 1 5
4 2 3
5 2 5
6 3 4
7 3 5
In der Beziehungsdefinition habe ich ein Beziehungen mit referenzieller Integrität von der ID des Anbieters zu der entsprechenden ID in der Tabelle Krankenhaus und zur Tabelle RSAnbieterUndSystem definiert, entsprechend auch für die SystemID.
In deinem Krankenhausformular hast du neben dem "Krankenhausnamen" die Auswahlfelder "Anbieter" und "System" und was du sonst noch so brauchst angelegt und mit den entsprechenden Felder der Tabelle Krankenhaus verknüpft.
So, das ist jetzt die Ausgangssituation für die weiteren Einstellungen.
1. Als Datenherkunft für die Anbieter hinterlegst du einfach die Tabelle RSAnbieter, gebundene Spalte = 1, im Format stellst du Spalenanzahl auf "2" und die Spaltenbreite auf "0cm".
2. Den System hinterlegst du erst einmal gar nichts, das machen wir nach der Auswahl eines Anbieters im Modul. Du stellst allerdings das Feld gebundene Spalte = 1, im Format stellst du Spalenanzahl auf "2" und die Spaltenbreite auf "0cm", wie beim Anbieterfeld.
3. Beim Anbieterfeld gehst du Auf den Reiter "Ereignis"und wählst bei "Vor Aktualisierung" die Auswahl "Code Generator" bzw. aus der Auswahlbox "[Ereignisprozedur]" und gehst in VB über "..."
4. Die VB sollte der Eintrag dann so aussehen:
Private Sub Anbieter_AfterUpdate()
Me!System.RowSource = "SELECT t1.ID, t1.Systemname from RPSystem t1 inner join RPAnbieterundSystem t2 on t1.ID = t2.SystemnameID where AnbieternameID = " & Me!Anbieter
Me!System = Null
End Sub
Danach schließt du den VB-Editor
So was passiert jetzt. Sobald du einen Anbieter auswählst wird das Feld System gelöscht (sofern was drin stand) und die Systeme des Anbieters (und nur diese) stehen dir zur Auswahl.
Probiere es aus. Achte auf meine Feldnamen, die musst du ggf deiner Definition anpassen. Ich habe es so implementiert und erfolgreich getestet.
Viel Erfolg. Sollte es nicht passen, melde dich.
Gruß
Ralf