Impedire record successivo o precedente (valida dati)

di il
9 risposte

Impedire record successivo o precedente (valida dati)

Ho creato una maschera e tutti i relativi controlli di convalida.
Se la convalida non va a buon fine bisogna correggere il campo.

Se si va su un record successivo o precedente purtroppo la convalida viene ignorata e di conseguenza il record so salva errato.
Come far in modo di rimanere sul record corrente finche la convalidi non dia ok.

9 Risposte

  • Re: Impedire record successivo o precedente (valida dati)

    Devi verificare gli Eventi tipo BeforeUpdate di Form, e verificare se, forzando il Cancel=true leggendo magari la proprietà Dirty(che diventa TRUE su Edit) si annulla la richiesta di Move del Recordset... fai un test e facci sapere.
  • Re: Impedire record successivo o precedente (valida dati)

    Ho provato in questo modo, ma ancora posso scorre tra i record
    
    
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    valida
    End Sub
    
    Function valida()
    Dim isValid As Boolean
    isValid = True
    If (IsNull(Me.DATA_NASC)) Then
    MsgBox "Inserire Data di nascita"
    isValid = False
    Me.DATA_NASC.SetFocus
    Exit Function
    End If
    If (IsNull(Me.CITTA) Or Len(Me.CITTA) < 2) Then
    MsgBox "Inserire citta"
    isValid = False
    Me.CITTA.SetFocus
    Exit Function
    End If
    End Function
    
  • Re: Impedire record successivo o precedente (valida dati)

    Non gestisci il Cancel come ti era stato detto di fare.

    Che te ne fai di isValid ?
  • Re: Impedire record successivo o precedente (valida dati)

    Prima di complicare le cose fai bene le cose essenziali... magari cercando di capire bene come opera il suggerimento.
    Esempio su BeforeUpdate prova a forzare CANCEL=TRUE fisso e vedi che succede se modifichi... poi cerchi di capire a cosa serve Dirty e come usarlo... poi eventualmente se serve ancora tutto il codice di validazione lo implementi.
    Di certo come hai fatto è normale non serva a nulla.
  • Re: Impedire record successivo o precedente (valida dati)

    Non ho idea di come gestire il Cancel.

    Voglio che non sia possibile scorrere trai record se un campo non è valido e in pratica su errore impedire di passare a altri record.
    È raro avere un record non validi però sto lavorando su un Database che permetteva tutto ed ora devo migliorarlo e far in modo di evitare errori
  • Re: Impedire record successivo o precedente (valida dati)

    @Alex ha scritto:


    ...
    Esempio su BeforeUpdate prova a forzare CANCEL=TRUE fisso e vedi che succede se modifichi
    ...
    @Lucavalentino cosa non hai capito di questa? Alex ti ha detto passo-passo quello che devi fare
  • Re: Impedire record successivo o precedente (valida dati)

    lucavalentino ha scritto:


    Non ho idea di come gestire il Cancel.
    Bisogna leggerle le risposte, altrimenti perché fai le domande?
  • Re: Impedire record successivo o precedente (valida dati)

    lucavalentino ha scritto:


    Non ho idea di come gestire il Cancel.
    Ti ho spiegato come semplificare le cose per test, ma tu devi leggere quello che ti viene scritto e se non lo comprendi... devi fare un pezzo in più... perchè noi possiamo darti un suggerimento non FARTI il lavoro.

    lucavalentino ha scritto:


    Voglio che non sia possibile scorrere trai record se un campo non è valido e in pratica su errore impedire di passare a altri record...
    Lo hai detto... il problema di base sono le tue lacune tecniche alle quali non possiamo porre rimedio.
  • Re: Impedire record successivo o precedente (valida dati)

    Ciao.
    Sinceramente non capisco che cosa intendi per convalida del dato.
    Il dato deve essere inserito obbligatoriamente?
    Il dato deve avere una determinata formattazione?
    Il dato deve essere di una determinata lunghezza, solo lettere o solo numeri?
    Per ogni problematica che ho nominato, esistono già funzioni incorporate in access, anche se poco eleganti, oppure esistono diverse soluzioni a livello di codice o di macro.

    Comunque, seguendo il tuo approccio, in base al codice che hai postato, mi sembra di capire che devi solo controllare che le caselle non rimangano vuote.

    La via più semplice è che a livello di struttura di tabella, imposti "richiesto" su "si" per tutti i campi che vuoi che siano obbligatoriamente inseriti.

    Oppure come ha detto @Alex, imposti in vb, cancel su true, prima di uscire dalla funzione, direttamente nel codice che hai postato, che così ad occhio dovrebbe già funzionare per avvertire che la casella è vuota.

    Indipendentemente dalle decine di soluzioni che potresti adottare per fare il controllo dei campi obbligatori, la soluzione di tutto è nella gestione del cancel, che annulla qualsiasi operazione di aggiornamento, compreso il salvataggio, il passaggio tra i record e la chiusura della form (per chiudere il form senza riempire il campo obbligatorio, access ti chiederà conferma 3 volte).

    Poi esiste uno escamotage che si usava con access97, ma che è ancora valido e che usa la proprietà TAG di un controllo e che veniva usato per scrivere un codice univoco per tutti i controlli di una Form, senza dover ripetere il codice per ogni controllo che devi convalidare.
    Ma questa è un'altra storia e non segue il tuo approccio e presumo superi per il momento le tue attuali conoscenze e la cosa potrebbe solo confonderti.

    Aggiunta:

    Ho riletto il tuo codice.
    Scritto in questo modo anche usando il cancel, non ti funzionerà mai, perchè usando una function esterna, non passi nessun valore alla sub afterupdate.
    Quindi scrivi il codice direttamente nella sezione afterupdate, senza richiamare una function (oppure passa il valore del cancel byval o byref o usando una variabile globale)
Devi accedere o registrarti per scrivere nel forum
9 risposte