Condividi tramite

verifica inserimento corretto dei dati nella maschera

Anonimo
2018-10-22T10:04:56+00:00

Buongiorno a tutti, ho una tabella con il campo Ftest numerico e valore predefinito 0. Nella maschera di inserimento dei dati, sull'evento BeforeUpdate della casella CSTest che inserisce i dati in FTest, ho inserto un codice per la verifica dei dati inseriti:

Private Sub CSTest_BeforeUpdate(Cancel As Integer)

If IsNull(Me.CSTest) Or Me.CSTest < 110000 Then

MsgBox "Inserire un numero di richiesta valido"

Me!CSTest.SetFocus

Calcel = True

End If

End Sub

Voglio cioè che venga inserito un valore superiore 110000 e non nullo. Il problema è che durante l'inserimento di un record se semplicemente premo invio confermando il valore predefinito non compare la finestra di messaggio e nemmeno il focus passa al campo successivo, praticamente rimane bloccato sulla casella CSTest fino a quando non inserisco qualcosa. Se inserisco un numero e premo invio la verifica viene eseguita correttamente e in caso di errore compare la finistra di messaggio. Se cancello il valore e riscrivo 0 o nulla tutto funziona correttamente. Praticamente inserendo quel controllo si blocca l'inserimento dei dati fino a quando non scrivo qualcosa nella casella, il che mi potrebbe anche andare bene, però vorrei che venisse eseguita l'apertura della finestra di messaggio

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

5 risposte

Ordina per: Più utili
  1. Anonimo
    2018-10-24T12:53:55+00:00

    Ciao Claudio,

    hai ragione tu ... non ho posto la giusta attenzione alla tua routine e non ho visto che punta all'evento BeforeUpdate del controllo.

    Al suo posto dovresti utilizzare l'evento BeforeUpdate della maschera:


    Private Sub Form_BeforeUpdate(Cancel As Integer)

        If Nz(Me!CSTest.Value, 0) < 110000 Then

            MsgBox "Inserire un numero di richiesta valido"

            Me!CSTest.SetFocus

            Cancel = True

        End If

    End Sub

    Private Sub Form_Current()

        If Me.NewRecord Then

            Me!CSTest.Value = 0

        End If

    End Sub


    In questo modo dovresti poter risolvere

    David

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2018-10-24T10:29:23+00:00

    ciao David, Ho fatto alcune prove, ma niente, ho inserito il codice che mi hai suggerito nell'evento corrente della form ma non risolve il problema: il campo è compilato e il record risulta effettivamente in inserimento, ma se premo invio senza modificare nulla viene accettato il valore senza eseguire la verifica, se invece inserisco qualcosa o solamente cancello lo zero la verifica la fa... è veramente bizzarro questo comportamento, magari sono io a volere qualcosa che non interessa a nessuno (ne dubito), ma non mi sembra così inutile evitare che inavvertitamente venga inserito un valore null o predefinito non corretto.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2018-10-22T15:41:12+00:00

    :-) senza inserire dati non puoi inserire un record, ti puoi spostare sul nuovo record ma non lo hai ancora inserito ...

    Quello che tu vuoi fare è impedire che venga salvato se il valore di un campo (nello specifico CSTest) non rientra in un criterio da te stabilito. Fin qui nessun problema. Tu però ti trovi ancora in uno stadio precedente ovvero non hai ancora inserito il nuovo record, di conseguenza non puoi spostarti da nessun'altra parte se non indietro. Motivo per cui a te sembra di rimanere bloccato.

    Prova in quest'altro modo: invece del valore di default sul campo della tabella, utilizza l'evento corrente della form per impostare il valore di default sul controllo nel momento in cui ti trovi in un nuovo record. Questo implicitamente ne provocherà l'inserimento:


    Private Sub Form_Current()

        If Me.NewRecord Then

            Me!CSTest.Value = 0

        End If

    End Sub


    David

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2018-10-22T15:32:13+00:00

    Ciao David, sì è un nuovo record. Ma come inserisco il record senza inserire dati? Quello è il primo campo della maschera

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2018-10-22T13:47:34+00:00

    Ciao Claudio,

    se ho ben capito il problema nasce dal fatto che quello che tu visualizzi non è un record inserito ma un nuovo record .... in sostanza ancora non è stato fatto alcun inserimento nella tabella e quindi non viene scatenato alcun evento BeforeUpdate. Tanto per esserne certi, prova a fare in questo modo:


    Private Sub Form_Current()

        If Me.NewRecord Then

            MsgBox "Nuovo Record"

        Else

            MsgBox "Record Inserito"

        End If

    End Sub


    Se quello che sospetto è corretto, dovresti vedere il messaggio "Nuovo Record"

    In questo caso devi prima inserire il record, che è esattamente quello che succede quando scrivi il numero e premi invio.

    David

    La risposta è stata utile?

    0 commenti Nessun commento