Newsgroup: it.comp.appl.access
Titolo: casella combinata su non in elenco

Ho letto molti precedenti post sulla casella combinata ma non trovo la
soluzione...
Ho una classica maschera con i dati anagrafici dei ricoverati e in
sottomaschera i dati relativi a ciascun ricovero del paziente
visualizzato nella maschera. 
Ecco il problema: Tizio si ricovera, 
a) se ha precedenti ricoveri esite la sua maschera e devo aggiornare
solo la parte relativa al nuovo ricovero
b) se è il primo ricovero in assoluto quindi si deve partire da una
nuova maschera.
Con l'autocomposizione ho creato una casella combinata che individua
il record di Tizio qualora esso è già inserito, se invece Tizio non
esiste mi viene dato il messaggio "Il testo immesso non corrisponde ad
una voce dell'elenco". Fin qui mi sta bene!
Desidererei intercettare qusto errore e inserire le istruzioni del
tipo "Vai a nuovo record"
Ho provato a utilizzare l'evento "su pressione"
Private Sub CasellaCombinata47_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
    a =  5  'riga fittizia giusto per mettere un punto di interruzione
End If
End Sub
Digitando i caratteri e premendo Invio, mi dice "Il testo immesso non
corrisponde ad una voce dell'elenco" prima ancora di eseguire l'evento
KeyPress. Io vorrei poter fare qualcosa di simile:
Private Sub CasellaCombinata47_ evento non so(.......)
      se ID casella combinata non esiste allora vai a nuovo record
      Me.PrimoControlloUtile.SetFocus
end sub
Potreste suggerirmi una dritta?
Grazie 1K
NSantini

 Ho provato a utilizzare l'evento "su pressione"
Le caselle combinate hanno un'evento specifico "su non in elenco" ...
OndaMax


OndaMax
Bene, nell'evento "Su non in elenco" ho inserito quanto segue e
funzionicchia, evidentemente c'e ancora qualcosa che non va.
In pratica mi viene aperto un nuovo record, il cursore va sul
controllo Cognome e mi compare il messaggio "Il testo immesso non
corrisponde ad una voce dell'elenco". Immagino perché l'evento Dopo
aggiornamento è ancora attivo. Come vedi ho aggiunto la righe
DoCmd.CancelEvent e Me.CasellaCombinata47 = "",  ma non è sufficiente
a impedire il messaggio. Cosa manca?
Private Sub CasellaCombinata47_NotInList(NewData As String, Response
As Integer)
DoCmd.CancelEvent
Me.CasellaCombinata47 = ""
DoCmd.GoToRecord acActiveDataObject, , acNewRec
DoCmd.GoToControl "Cognome"
End Sub
Grazie per l'aiuto che mi stai dando.
NSantini

 End Sub
Response = acDataErrContinue
Ciao
Marco


Benissimo, funziona. Te ne sono grato ;-)
Ma volendo fare un discorso piů didattico, mi piacerebbe capire il
significato di Response. Il valore associato a Response da dove
deriva? Grazie ancora. Ciao
NSantini

 deriva?
E' una costante intrinseca, peraltro dichiarata nella Sub, se vai a
rivederti l'intestazione del codice che hai postato. Gestisce la reazione
all'evento stesso che, per default, tende a bloccarti e a proporti la
maschera di avviso che tu volevi eliminare.
la costante acDataErrContinue ignora appunto quel messaggio.
Una terza costante inserisce automaticamente il nuovo dato nell'elenco dei
valori proponendotelo alla gestione successiva.
Approfondisci sull'Help in linea, che è straordinariamente chiaro ...
Ciao
Marco