Datenbanken - Combobox mit Daten aus Fremdschlüsseltabelle

andi234

Grünschnabel
Hallo,

ich habe (vereinfacht gesehen) folgende Tabellen in einer Access 2000 mdb:


tab_Mitarbeiter
---------------------
ID
Name
Vorname
Abteilungnr (Zahlenwert)



tab_Abteilung
---------------------
ID
Abteilung


Ich habe jetzt folgende Recordsets angelegt:

rsMitarbeiter = "SELECT * FROM tab_Mitarbeiter, tab_Abteilung
WHERE tab_Mitarbeiter.Abteilungsnr = tab_Abteilung.ID"

rsAbteilung = "SELECT * FROM tab_Abteilung"

(tab_Mitarbeiter.Abteilung und tab_Abteilung.ID sind auch in Access miteinander verknüpft)

Mit dem rsMitarbeiter fülle ich jetzt ein Mitarbeiter-Formular und liste in einer Combobox die möglichen Abteilungen für einen Mitarbeiter auf:

Code:
With cmbAbteilung
RsAbteilung.MoveFirst
Do While Not RsAbteilung.EOF
.AddItem RsAbteilung("Abteilung)
.ItemData(.NewIndex) = RsAbteilung("ID")
RsAbteilung.MoveNext
Loop
End With

Bis hierher klappt es auch soweit. Probleme bekomme ich nur, wenn ich:

-die aktuelle Abteilung eines Mitarbeiters anzeigen möchte (ich kann sie ja nicht mit tab_Mitarbeiter.Fields("Abteilungsnr") ausgeben, da ich ja dann nur die Zahl sehe

-einen neuen Mitarbeiter anlege und seine in der Combobox ausgewählte Abteilung speichern möchte (gleiches Problem wie oben).

Wie kann ich das realisieren ohne mit einer DataCombo arbeiten zu müssen?

Vielen Dank für euere Antworten,

Andi
 
Hallo,

ich würde den Mitarbeiter und den Abteilungsnamen über einen Join einlesen, z.B. wie folgt:

Code:
Private Function GetMitarbeiter(MANummer As Long, rs As ADODB.Recordset) As Boolean
   Dim cSQL As String
   
   
   cSQL = "SELECT M.Id,M.Name,M.Vorname,M.AbteilungNr,A.Abteilung"
   cSQL = cSQL + " FROM tab_Mitarbeiter AS M "
   cSQL = cSQL + " LEFT JOIN tab_Abteilung AS A ON A.Id=M.AbteilungNr"
   cSQL = cSQL + " WHERE M.Id=" + Str(MANummer)
   If rs.State = adStateOpen Then
      rs.CancelUpdate
      rs.Close
   End If
   rs.Open cSQL
   If rs.EOF Then
      GetMitarbeiter = False
   Else
      GetMitarbeiter = True
   End If
End Function

Um die Abteilungsnummer in die Combo-Box zu bekommen, würde ich sie dort auch mit anzeigen, z.B.:
Code:
     cmdAbteilung.AddItem Ltrim(Str(rsAbteilungID)+" - "+RsAbteilung!Abteilung

Viele Grüsse
ronaldh
 
Guten Morgen,

sehe ich das richtig, das jeder Mitarbeiter nur in genau einer Abteilung arbeiten kann, oder können mehrere Abteilungen möglich sein?
 
Zurück