Zum Inhalt dieser Seite

Access - 'Kombinationsfeld erweitern'

In einem Formular soll ein Feld (Long Integer) mittels eines Kombinationsfeldes ausgefüllt werden. Das Kombinationsfeld basiert auf einer Tabelle (im Beispiel heisst die Tabelle 'Auswahltabelle'), wobei die Schlüsselspalte (Autowert - im Beispiel 'AuswahlAutoWert') ausgeblendet ist und der Wert der Schlüsselspalte (AutoWert) in das Feld ('MeinFeld') der Haupttabelle eingetragen wird. Um während der Eingabe neue Einträge im Kombinationsfeld (im Beispiel 'MeinFeld') erzeugen zu können, muss die Eigenschaft 'Nur Listeneinträge' für das Kombinationsfeld auf 'Ja' stehen. Bei dem Ereignis/der Eigenschaft 'Bei Nicht in Liste' wird der weiter unten stehende Code eingegeben. Wenn es mit dieser Erklärung immer noch Schwierigkeiten gibt, so kann man durch Klick auf den folgenden Link eine Demodatenbank runterladen: (53 kByte) .

Private Sub MeinFeld_NotInList(NewData As String, Response As Integer)
 
Dim MLaenge As Byte 'Länge des Stringfeldes 'AuswahlText' der Auswahltabelle
Dim ctl As Control
Dim NeuID As Long 'Nimmt den neu angelegten Autowert auf
Dim Tabelle As New ADODB.Recordset
Dim Meldung As String
Dim TruncNewdata As String
 
'Anpassen
Tabelle.Open "Auswahltabelle",CurrentProject.Connection, _
             adOpenKeyset, adLockOptimistic
MLaenge = 20
Set ctl = Me!MeinFeld 'Name des Kombinationsfeldes
'Ende Anpassen
 
 
If Len(NewData) > MLaenge Then
  TruncNewdata = Left(NewData,MLaenge)
  Meldung = "Der eingegebene Wert '" & NewData & "' fehlt." _
  & "Da nur maximal " & CStr(MLaenge) & " Zeichen zugelassen sind," _
  &" wird versucht '" & TruncNewdata & "' hinzuzufügen."
 Else
  TruncNewdata = NewData
  Meldung = "Der eingegebene Wert '" & NewData & "' fehlt. Hinzufügen?"
End If
 
'Den Benutzer fragen, ob ein neuer Wert hinzugefügt werden soll.
If MsgBox(Meldung, vbOKCancel + vbDefaultButton2, _
          "Kombinationsfeld aktualisieren") = vbOK Then
  Response = acDataErrContinue
  Tabelle.AddNew
  On Error GoTo WertVorhanden:
  Tabelle!Auswahltext = TruncNewdata
  'Anpassen
  NeuID = Tabelle!AuswahlAutowert
  'Ende Anpassen
   Tabelle.Update
  ctl = NeuID
  ctl.Requery
WertVorhanden:
  If Err.Number<>0 Then
    NeuID = MsgBox(Err.Description, vbCritical, _
    "Fehler beim Aktualisieren des Kombinationsfeldes" _
    & " - Eingaben werden rückgängig gemacht.")
    Response = acDataErrContinue
    ctl.Undo
  End If
 Else
  'Der Benutzer hat "Abbrechen" gewählt: die Fehlermeldung
  'unterdrücken und die Änderungen rückgängig machen.
  Response = acDataErrContinue
  ctl.Undo
End If
 
End Sub