Access 7.0:
Kombinationsfelder automatisch ergΣnzen

Kombinationsfelder haben den Vorteil, da▀ man oft ben÷tigte EintrΣge nicht jedesmal neu eingeben mu▀, sondern bequem aus einer Liste auswΣhlen kann. Oft ist es jedoch erforderlich, diese Liste zu erweitern.
Dies lΣ▀t sich mit einer Ereignisprozedur erledigen. Um den Tip nachzuvollziehen, ben÷tigen Sie eine Tabelle »Kategorie«, die nur das Feld »Name_Kategorie« enthΣlt. Ein PrimΣrschlⁿssel ist nicht erforderlich. Die aus dieser Liste ⁿbernommenen Werte werden in der dem Formular zugrundeliegenden Tabelle im Feld »Kategorie« abgelegt.
Anschlie▀end erstellen Sie im gewⁿnschten Formular ein Kombinationsfeld, das seine Werte aus der Tabelle »Kategorie« bezieht; dabei hilft Ihnen der Steuerelement-Assistent. Mit einem rechten Klick auf das neue Feld gelangen Sie zu dessen »Eigenschaften«. Legen Sie unter »Daten« fest, da▀ »Nur ListeneintrΣge« auf »Ja« steht. Im Register »Ereignis« wΣhlen Sie »Ereignisprozedur« und weisen ihr die abgedruckte Prozedur zu.
Wenn Sie jetzt einen neuen Wert in das Kombinationsfeld eintragen, erscheint eine Dialogbox, die nachfragt, ob die Kategorie hinzugefⁿgt werden soll. Mit »Ja« ⁿbernimmt die Prozedur den Eintrag in die Liste der Kategorien.
In einigen Punkten mⁿssen Sie das Listing Ihren Formular- und Feldnamen anpassen. In der Zeile »Set ct = Forms!Eingabemaske!Kategorie« wird etwa davon ausgegangen,
da▀ der Name des Formulars »Eingabemaske« und der des Feldes »Kategorie« lautet.
Ereignisprozedur fⁿr Kombinationsfelder:
Private Sub Kategorie_NotInList(neuer_wert As String, intResponse As Integer)
Dim x As Integer, db As DATABASE, rs As Recordset, ct As Control
'Frage, ob eine neue Kategorie erstellt werden soll
x = MsgBox("Soll eine neue Kategorie hinzugefⁿgt -->
werden?", 36, "Kategorie nicht in Liste")
If x = 6 Then 'Wenn JA...
Set db = CurrentDb()
Set rs = db.OpenRecordset("Kategorie", dbOpenTable)
Set ct = Forms!Eingabemaske!Kategorie 'das Listenfeld
rs.AddNew
rs!Name_Kategorie = neuer_wert
rs.UPDATE
rs.Close
DoCmd.DoMenuItem acFormBar, acEdit, acUndo
intResponse = acDataErrAdded
Else 'Wenn NEIN...
DoCmd.DoMenuItem acFormBar, acEdit, acUndo
intResponse = acDataErrContinue
End If
End Sub
["-->" bedeutet, da▀ diese Befehlszeile hier nicht endet, sondern in der
nΣchsten Druckzeile fortgesetzt wird.]