27. Prosty sposób na dodawanie nowych wpisów do pola kombi.

W Accessie istnieje metoda dynamicznego dopisywania nowych pozycji na liście kombi oparta na zdarzeniu NotInList (Wykrywamy, że nie ma jeszcze takiego wpisu, otwieramy ekran do edycji nowych rekordow i odświeżamy listę kombi - dokładny opis w bazie Metody). Niestety nie jet to sposób wygodny w użyciu.

W wielu prostych przypadkach można ten sam efekt osiągnąć znacznie prościej, w sposób całkowicie automatyczny, który nie wymaga żadnych nakładów pracy. Cała tajemnica tkwi w słowie DISTINCT, które użyte w kwerendzie, jako źródło wierszy dla pola kombi, wybiera tylko unikalne wartości.

Cala metoda wygląda tak:

  1. Formularz opieramy na tabeli Tabela1
  2. Nasze kombi wiążemy z polem Pole1 (w tabeli Tabela1)
  3. W polu kombi ustawiamy Ogranicz do listy = Nie
  4. Jako źródło wierszy dla pola kombi wpisujemy:
    SELECT DISTINCT Pole1 FROM Tabela1;
    
  5. Cieszymy się, że wszystko samo działa i samo się aktualizuje.

Uzupełnienie:
Warto wiedzieć o tej prostej metodzie, niemniej jednak jej możliwości są rownież 'proste'. Do bardziej zaawansowanych celów służy zdarzenie NotInList oprogramowane np. tak, jak proponuje Paweł P. Baran:

Jak obsłużyć zdarzenie 'Przy wartości spoza listy'? Np. tak: Na formularzu mam kombi z różnymi rodzajami wykształcenia, wziętymi z tabelki 'Wykształcenie', ale oczywiście - zawsze znajdzie się ktoś inaczej wykształcony, więc trzeba dopisać... :-)
Private Sub Kombi2_NotInList(NewData As String, Response As Integer)
Dim rec As Recordset
If MsgBox("Dodać nową wartość?", vbOKCancel) = vbOK Then
  Response = acDataErrAdded
  Set rec = CurrentDb.OpenRecordset("Wykształcenie")
  With rec
        .AddNew
            !Wykształcenie = NewData
            'klucz Access sam doda
        .Update
    End With
Else
  Response = acDataErrContinue
  Kombi2.Undo
End If
End Sub