Forms

3.39 Si può aggiungere un record alla tabella che è origine riga di una casella combinata senza usare una maschera?
  Roberto
E’ possibile aprendo un recordset sulla tabella a fronte dell’evento “Su non in elenco” della casella combinata.
Il database di esempio allegato a questa FAQ è stato creato in Access 97 facendo riferimento alle librerie DAO.
La tabella che è codice riga della casella combinata si chiama Prodotti e contiene due campi: IDProdotto (di tipo Contatore e chiave primaria) e Prodotto (di tipo Testo).
La casella combinata si chiama MiaCombo: ha due colonne, di cui visibile solo la seconda.
La proprietà “Solo in elenco” della casella combinata va impostata a Si.
Quello che segue è il codice VBA che va generato a fronte dell’evento “Su non in elenco” della casella combinata:
Private Sub MiaCombo_NotInList(NewData As String, Response As Integer)
   Dim IntNuovo As Integer, strTitolo As String
   Dim IntFinestraMsg As Integer, strMsg As String
   strTitolo = "Prodotto digitato non in elenco"
   strMsg = "Vuoi aggiungere" & Chr(13) & Chr(10) & NewData & Chr(13) & Chr(10) & "in elenco?"
   IntFinestraMsg = vbYesNo + vbQuestion
   IntNuovo = MsgBox(strMsg, IntFinestraMsg, strTitolo)
   If IntNuovo = vbYes Then
       Dim miorst As DAO.Recordset
       Set miorst = CurrentDb.OpenRecordset("Prodotti")
       miorst.AddNew
       miorst!Prodotto = NewData
       Me![MiaCombo] = miorst![IdProdotto]
       miorst.Update
       miorst.Close
       strTitolo = "Inserimento nuovo Prodotto in elenco"
       strMsg = "Inserimento in elenco di" & Chr(13) & Chr(10) & NewData & Chr(13) & Chr(10) & "con successo"
       IntFinestraMsg = vbOKOnly + vbExclamation
       IntNuovo = MsgBox(strMsg, IntFinestraMsg, strTitolo)
       Response = acDataErrAdded
       Me![MiaCombo].Requery
   Else
       strTitolo = "Nome del prodotto errato"
       strMsg = NewData & " non č in elenco." & Chr(13) & Chr(10) & "Seleziona un prodotto dall'elenco"
       IntFinestraMsg = vbOKOnly + vbExclamation
       IntNuovo = MsgBox(strMsg, IntFinestraMsg, strTitolo)
       Response = acDataErrContinue
       Me![MiaCombo].Undo
   End If
End Sub

Nota
Il codice VBA di cui sopra fa riferimento alla libreria Microsoft DAO quindi, se si usa una versione di Access successiva ad Access 97, è necessario aggiungere al database i riferimenti a Microsoft DAO 3.6 Object Librery.

Download:
 
  NonInElenco.zip (19Kb) MSAccess97 database


Se pensate di avere del materiale freeware interessante e volete pubblicarlo, allora leggete qui.