Newsgroup: it.comp.appl.access
Titolo: Re: evento "su uscita" che non fa il suo dovere

 La domanda è: perchè?
 
[cut]
 
Perché il dato che immetti nella combinata fa parte dell'elenco, per cui 
non può verificarsi l'evento 'Su non in elenco'. Se vuoi memorizzare 
questo dato nella tabella sottostante la sottomaschera, devi usare 
l'evento 'Dopo aggiornamento'.
 
Diverso il caso in cui questo dato lo modifichi. In questo caso il dato 
modificato non fa parte dell'elenco ed ecco che scatta l'evento 'Su non 
in elenco'.
 
 


No, non funziona come mi dici tu. E ho provato anche usando altri eventi ma senza successo. 
Quindi mi ripropongo sperando di trovare la soluzione (che sono sicuro ci sia)
 
Allora, la maschera in questione ha questi campi:
[IDVettore], [IDCamion], [IDTariffa], [DataCarico]
dopo avere inserito i primi 2 campi IDVettore e IDCamion, nel campo IDTariffa ho scritto le seguenti routine:
 
Private Sub IDTariffaF_GotFocus()
 Me.IDTariffa = "quello che voglio"
End Sub
 
una volta che da IDCamion si va sul campo IDTariffa, appare la stringa "quello che voglio"
e non essendo presente nell'elenco della combo dovrebbe andare in esecuzione l'evento "non in elenco", 
ma ciò non succede. Se invece la inserisco a mano o la modifico ed esco dal campo IDTariffa l'evento "non in elenco" va in esecuzione.
 
La routine scritta su non in elenco è la seguente:
 
Private Sub IDTariffa_NotInList(NewData As String, Response As Integer)
Me!ZPippo = NewData
DoCmd.OpenForm "M_TariffeVettori", , , , acFormAdd, acDialog, "GotoNew"
  Me!IDTariffa.Requery
Response = acDataErrAdded
End Sub
 
Ho provato a mettere la routine anche negli altri eventi, ma senza successo.
Come si fa?
 
Andrea

 
 
In effetti gli altri eventi non rispondono.
Una soluzione potrebbe essere questa:
 
Private Sub IDTariffaF_GotFocus()
     If IsNull(Me.IDTariffa) Then
         Me.IDTariffa.Text = "quello che voglio"
     End If
End Sub
 
In questo modo se "quello che voglio" non è già esistente, scatta subito
l'evento 'Su non in elenco', appena IDTariffa riceve il focus.
 
Io ho assunto che l'origine riga di IDTariffa sia tabella/query non 
elenco valori. Corretto?
 


Ho provato sia con l'origine riga basata sulla query che su elenco valori, ma non ci sono differenze. Quando appare il valore "quello che voglio" nella combo e andando al campo successivo, non va in esecuzione l'evento 'Su non in elenco'.


O non ci capiamo o c'è qualcosa che mi sfugge.
La routine che t'ho postato si comporta come l'evento 'su non in elenco' 
quando tu, tramite codice, passi un valore nel momento in cui il 
controllo IDTariffa riceve il focus. Il confronto di questo valore, 
variabile o meno che sia, con l'elenco che è all'origine riga della 
combo viene fatto immediatamente e... a questo punto deve seguire, 
ovviamente, una procedura per la gestione di questo nuovo valore.
 
Come fai a dire che non funziona? Io l'ho testato e funziona correttamente.
Prova a mettere, dopo la riga Me.IDTariffa.Text sopra riportata e sempre 
all'interno del blocco If, la riga MsgBox "Valore inesistente". Vedrai 
che appena passi una variabile stringa che contiene un valore non 
presente in elenco apparirà il msgbox che sta ad indicare che la stringa 
che tu hai passato non si trova in elenco.
A questo punto, va da sè, devi attivare una procedura per l'accettazione 
di questo nuovo valore.
 
 

 ovviamente, una procedura per la gestione di questo nuovo valore.
 
M'è venuto un dubbio! Ma tu ti aspetti che qui scatti l'evento 'Non in 
elenco' della dotazione di access? Ma no, cribbio!
Sei tu che devi attivarti per gestire questo valore...


 di questo nuovo valore.
Ti voglio incollare tutto il codice di questa mia sottomaschera dove c'è la combo, perchè a questo punto non voglio tralasciare nemmeno una virgola al caso, ma ho controllato 1000 volte e non vedo motivo perchè non debba funzionare...
 
Option Compare Database
 
Private Sub DataCarico_GotFocus()
If IsNull(Me!IDTariffaF) Then
Me!IDTariffaF.SetFocus
Else
Me!DataCarico.SetFocus
End If
End Sub
 
Private Sub DataCarico_LostFocus()
If IsNull(Forms!M_SubOrdiniInCorso2!DataInizioTrasporto) Then
Forms!M_SubOrdiniInCorso2!DataInizioTrasporto = Me!DataCarico
End If
DoCmd.RunCommand acCmdSaveRecord
 
End Sub
 
 
Private Sub DataScarico_LostFocus()
If Me.Descrizione Like "*" & Forms!M_SubOrdiniInCorso2!CittaDestinatario And Not IsNull(Me.DataScarico) Then
Forms!M_SubOrdiniInCorso2!DataFineTrasporto = Me!DataScarico
End If
DoCmd.RunCommand acCmdSaveRecord
Forms!M_SubOrdiniInCorso2!DataInizioTrasporto.SetFocus
DoCmd.RunCommand acCmdSaveRecord
Forms!M_SubOrdiniInCorso2!Comando67.SetFocus
 
End Sub
 
Private Sub EmailVettore_Click()
If Not IsNull(Me!EmailVettore) Then
DoCmd.SendObject , , , Me!EmailVettore, , , _
"Incarico trasporto " & Forms!M_SubOrdiniInCorso2!IDOrdine & "." & Me!IDSubOrdine & "." & Me!IDTratta, _
"Indirizzo di carico: " & vbCrLf & _
Forms!M_SubOrdiniInCorso2!NomeMittente & vbCrLf & _
Forms!M_SubOrdiniInCorso2!IndMittente1 & vbCrLf & _
Forms!M_SubOrdiniInCorso2!IndMittente2 & vbCrLf & _
Forms!M_SubOrdiniInCorso2!CapMittente & " " & Forms!M_SubOrdiniInCorso2!CittaMittente _
& vbCrLf & vbCrLf & _
"Luogo di consegna: " & vbCrLf & _
Forms!M_SubOrdiniInCorso2!NomeDestinatario & vbCrLf & _
Forms!M_SubOrdiniInCorso2!IndDestinatario1 & vbCrLf & _
Forms!M_SubOrdiniInCorso2!IndDestinatario2 & vbCrLf & _
Forms!M_SubOrdiniInCorso2!CapDestinatario & " " & Forms!M_SubOrdiniInCorso2!CittaDestinatario _
& vbCrLf & vbCrLf & _
"Elenco veicoli: " & vbCrLf & _
Forms!M_SubOrdiniInCorso2!DescrizioneMerce, _
True
Forms!M_SubOrdiniInCorso2!Comando67.SetFocus
End If
End Sub
 
Private Sub Form_Current()
Me!ZPippo = Null
Me!WPippo = Null
End Sub
 
 
Private Sub IDCamion_GotFocus()
If Me!IDVettore > 99 Then
Me.IDCamion = 0
Else
Me!IDCamion.SetFocus
End If
End Sub
 
Private Sub IDCamion_LostFocus()
Dim curZ As Integer
If IsNull(Me!IDTratta) Then
    Me!IDTratta = DMax("[IDTratta]", "t_Tratte") + 1
End If
 
If Not IsNull(Me!DataCarico) Then
    Me.DataScarico.SetFocus
    Else
    DoCmd.RunCommand acCmdSaveRecord
    If Me!IDVettore < 100 Then
        curZ = 0
        Else
        curZ = Me!IDVettore
    End If
    Me!WPippo = curZ
    Dim curM As String
    curM = Forms!M_SubOrdiniInCorso2!IDCliente & Left(Forms!M_SubOrdiniInCorso2!CittaMittente, 3) _
    & Left(Forms!M_SubOrdiniInCorso2!CittaDestinatario, 3) & Me!WPippo & "?"
End If
 
End Sub
 
Private Sub IDTariffaF_DblClick(Cancel As Integer)
DoCmd.OpenForm "M_TariffeVettori", , , , acFormAdd, acDialog, "GotoNew"
Me!IDTariffaF.Requery
Response = acDataErrAdded
End Sub
 
 
Private Sub IDTariffaF_GotFocus()
If IsNull(Forms!M_SubOrdiniInCorso2!DataInizioTrasporto) Then
        Dim curM As String
        curM = Forms!M_SubOrdiniInCorso2!IDCliente & Left(Forms!M_SubOrdiniInCorso2!CittaMittente, 3) _
        & Left(Forms!M_SubOrdiniInCorso2!CittaDestinatario, 3) & Me!WPippo & "?"
        If IsNull(Me!IDTariffaF) Then
            Me.IDTariffaF = curM
            msgbox ("togliere il carattere ? prima di proseguire al campo successivo"), vbOKOnly
        Else
            Me!IDTariffaF.SelStart = Len("" & Me!IDTariffaF)
        End If
Else
Me!IDTariffaF.SelStart = Len("" & Me!IDTariffaF)
End If
 
End Sub
 
Private Sub IDTariffaF_KeyPress(KeyAscii As Integer)
    Dim strCar As String
    strCar = Chr(KeyAscii)
    KeyAscii = Asc(UCase(strCar))
End Sub
 
 
Private Sub IDTariffaF_LostFocus()
Me!DataCarico.SetFocus
End Sub
 
Private Sub IDTariffaF_NotInList(NewData As String, Response As Integer)
Me!ZPippo = NewData
DoCmd.OpenForm "M_TariffeVettori", , , , acFormAdd, acDialog, "GotoNew"
  Me!IDTariffaF.Requery
Response = acDataErrAdded
End Sub
 
Private Sub IDVettore_DblClick(Cancel As Integer)
DoCmd.OpenForm "M_Vettori"
End Sub
 
 
 

[CUT]
 
Non ci siamo.
Ho dato un'occhiata al listato e vedo solo un susseguirsi di GotFocus... 
LostFocus con riferimenti continui alla maschera e dei Saverecord sparsi 
in giro.
 
La routine oggetto di questo thread manco prende in considerazione il 
suggerimento che ti avevo dato nonostante tu affermi di aver provato e 
riprovato. Io non mi ci raccapezzo in questo modo di agire. Mi dispiace, 
ma non posso esserti di aiuto.