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