Pulsante salvataggio

di il
13 risposte

Pulsante salvataggio

Chiedo aiuto perché sono diversi giorni che stò impazzendo con questo problema.

In una maschera inserimento dati , ho inserito un controllo in tabella 

ho un primo problema che l'errore viene evocato solo quando premo un salva, e non come pensavo passando sopra con il tab.

Il secondo problema e che quando premo tab e faccio questi controlli 

Private Sub CdmSalva_Click()
    On Error GoTo Err_Salva
    DoCmd.RunCommand acCmdSaveRecord
exit_Salva:
    Exit Sub
Err_Salva:
   xMessaggi = "ERRORE INSERIMENTO DATI" & vbCrLf & Err.Description & vbCrLf & DataErr
               DoCmd.OpenForm "mymsgbox"

    Resume exit_Salva
End Sub

non riesco a portare il focus sul textbox che mi ha provocato l'errore

13 Risposte

  • Re: Pulsante salvataggio

    Se premi SALVA ed ottieni errore mi viene da pensare che il Salva venga annullato a causa di un errore di coerenza dei dati…

    Hai implementato qualche criterio di VALIDAZIONE…?

    Devi anche mostrare che errore viene rilevato, e quel sistema di gestione errori che hai fatto di sicuro non è ben fatto, perchè nasconde il vero problema…

  • Re: Pulsante salvataggio

    Questo il mio controllo grezzo sugli errori 

    Private Sub Form_Error(DataErr As Integer, Response As Integer)
        MsgBox "Form Error errore " & str(DataErr)
        Response = acDataErrContinue
        ActiveControl.Undo
    End Sub

    Sul campo che vado a testare “anno” ho messo un controllo di validazione is not null e dopo aver premuto il tasto salva il cursore non mi si riporta sul textbox verificato ma devo premere click col mouse per attivarlo.

  • Re: Pulsante salvataggio

    Intanto ci sono errori che non vengono rilanciati a Form_Error, quindi nel pulsante SALVA per come lo hai gestito non vedrai mai il reale errore generato, ma vedi il tuo messaggio “Utile per l'utente” ma inutile per chi sviluppa.

    La gestione su Form_Error, pur grezza è correttamente indicativa dell'errore gestito, ma ovviamente questo evento raccoglie solo alcune varianti di errore, sicuramente quelle da VALIDAZIONE.

    Ora nel tuo caso ho una domanda… se hai il campo “Data”… perchè hai anche i campi ANNO e MESE…? Sono legati…?

    Per riportare il Focus sul controllo che ha generato errore non è così banale… potrebbero essere N e non è scontato quale degli N abbia generato l'errore…

  • Re: Pulsante salvataggio

    Ti ringrazio per le risposte la maschere che ho allegato e solo una che mi serve come test, i valori che vedi sono rappresentativi dei i vari formati,  testo, data, numero e combo, per il pulsante salva ai ragione in effetti ho messa la descrizione senza mettere il numero di errore.

    La cosa che non capisco e che nel mio caso Form_error intercetta  l'errore se si tratta di un valore data  e con validazione minore rispetto a data odierna, mentre in caso di valore numerico l'errore non viene intercettato se in validazione è minore di x o null.

    Questo errore viene invece rilevato in salvataggio dati ma perdo il  focus del textbox

    Quello che mi prefiggevo era di ottenere e che scorrendo i singoli textbox  presenti nella maschera mi venissero fatti i controlli richiamati in validazione e conseguentemente evidenziati gli errori.

    Secondo te ci sono articoli od esempi che mi potrebbero dare una mano.

  • Re: Pulsante salvataggio

    Se un campo è obbligatorio lo si definisce tale in tabella non si controlla il NULL VALUE con le validation roules… e vedrai che l'evento Form_error funziona.

  • Re: Pulsante salvataggio

    Ho provato più soluzioni, e letto diversi articoli,  ma non riesco a far intercettare l'errore da Form_error se non al momento del salvataggio dati.

    Questo quanto ho messo in tabella e in VBA.

    E questo il codice 

    Option Compare Database
    Private Sub CmdEsci_Click()
        DoCmd.Close
    End Sub
    Private Sub CmdNew_Click()
        If Me.NewRecord = -1 Then Exit Sub
        DoCmd.GoToRecord , , acNewRec
    End Sub
    Private Sub CmdSalva_Click()
        On Error GoTo Salva_Err
        DoCmd.RunCommand acCmdSaveRecord
        Exit Sub
    Salva_Exit:
        Exit Sub
    Salva_Err:
        MsgBox " cmd " & Err.Description & " " & Err.Number
        Resume Salva_Exit
    End Sub
    Private Sub Form_Error(DataErr As Integer, Response As Integer)
        MsgBox DataErr & "Form"
        Response = acDataErrContinue
        ActiveControl.Undo
    End Sub
    Private Sub Form_Load()
        SetWarnings = False
        DoCmd.SetWarnings False
    End Sub
    

    Se mi puoi dare una mano grazie.

  • Re: Pulsante salvataggio

    Ovvio che quel modo di gestire l'intercettazione errori funziona solo al Salvataggio… non può essere diverso.

    Se vuoi intercettarlo prima, devi usare gli eventi specifici del controllo…

    Nel tuo caso, secondo me, hai solo 1 opzione:

    Private Sub NomeControllo_Exit(Cancel As Integer)
    	If Len(Me.NomeControllo & vbNullstring)=0 Then
    	   Cancel=true
    	   msgbox "Devi compilare il controllo..."
    	End if
    End Sub
  • Re: Pulsante salvataggio

    Quindi se capisco bene l'evento Form_error non si attiva sempre , ma solo se si inserisce un valore che è diverso dal target richiesto in valido se. Quindi in caso di valore null non legge ne se il campo e obbligatorio ne i valori riportati valido se.

    O non ho capito nulla ?

  • Re: Pulsante salvataggio

    Ma no scusa… non hai capito proprio.

    L'Evento ERROR di Form si attiva quando serve e se ci sono le condizioni.

    Ovviamente in caso di MODIFICA dei campi quando può avvenire secondo te il confronto tra i dati a di Interfaccia rispetto a quelli di Tabella, che ovviamente non sono allineati se hai modificato…?
    Avviene al tentativo di Commit della transazione, che è scatenato dal SALVA.

    Di conseguenza se vuoi agire preventivamente al Salva, devi operare a livello di Controllo e non di maschera e dati.

  • Re: Pulsante salvataggio

    Il fatto di inserire un controllo “ non di maschera e dati” non so proprio da dove iniziare. Se mi puoi dare qualche dritta cerco di capire. Ho trovato su microsoft “Aggiungere una regola di convalida a un campo o un record di tabella” ma non credo che sia quello che tu mi dici

  • Re: Pulsante salvataggio

    Il codice che ti ho suggerito sopra su Exit della TextBox… fa quello che ti ho detto… non devi inventare nulla, copiarlo ed adattarlo.

  • Re: Pulsante salvataggio

    Ti ringrazio per la risposta, ma il fatto di utilizzare eventi exit per ogni textbox o combo lo avevo scartato per l'obbligo di compilare ogni dato per poter uscire senza salvare. E' vero che si può utilizzare altri sistemi per controllare i dati, ad esempio al premere del tasto salva.

     Ma per puro diletto stò  realizzando una procedura per la gestione di un orto, su un mio terreno di circa 2000Mq, ed avendo utilizzato access, durante la mia vita lavorativa, non  per inserimento o gestione ma  per analisi dati, conosco il mondo sql e db, ti leggevo dai tempi di Clipper, ma mi è del tutto sconosciuto il mondo form. Ed è per questi motivi che cercavo di capire, non ho mai chiesto la pappa scodellata e non fà parte del mio modo di fare il copiare senza capire perlomeno in parte , di come riuscire a creare un controllo tramite form_error che mi permettesse di avere in un  unico punto di controllo di inserimento dati.  

    Fino ad oggi ho capito che form_error viene attivata  sicuramente in modifica dati quando non si soddisfa il “valido se” definito nella tabella. Mi sarebbe piaciuto capire se anche in fase di inserimento come stimolare il sistema per  effettuare gli stessi controlli. Leggendo diverse cose sembrerebbe di si  ma la mia non conoscenza del mezzo non mi permette di dare risposte certe . Era questa la prima risposta che cercavo per  come si dice,  non girare a vuoto, e poi in caso affermativo capire come realizzare il tutto. Prendi questo come un mio personale delusione, non posso e non devo avanzare nessun tipo di richiesta, anzi di devo rigraziare per il supporto dato.

  • Re: Pulsante salvataggio

    18/02/2023 - Scolaretto ha scritto:


    Ti ringrazio per la risposta, ma il fatto di utilizzare eventi exit per ogni textbox o combo lo avevo scartato per l'obbligo di compilare ogni dato per poter uscire senza salvare. E' vero che si può utilizzare altri sistemi per controllare i dati, ad esempio al premere del tasto salva.

    In realtà come spesso accade i limiti sono principalmente di visione e di tecnica… quello che dici ovviamente non è vero… ma serve avere una visione più strutturata per superare le difficoltà di base, ovvero serve implementare un sistema intelligente e funzionale tecnicamente piu complesso delle 2 righe che hai usato.

    Ovviamente a livello nativo se vuoi usare le macro o istruzioni base si sa che ci sono limiti ma avendo un po di conoscenza sulla tecnica ed un po di fantasia si sfruttano le idee e si ottengono tutti i risultati anche di elevato livello.

    Ad esempio se tu sapessi usare le classi ti costruiresti una classe di validazione da associare alle classi dei controlli… ma le classi sono meno alla portata di chi sviluppa vba Base e pochi programmatori vba sannoncosa siano e la loro potenza e flessibilità, pur con i limiti che hanno rispetto a linguaggi più seri.

    Ma per puro diletto stò  realizzando una procedura per la gestione di un orto, su un mio terreno di circa 2000Mq, ed avendo utilizzato access, durante la mia vita lavorativa, non  per inserimento o gestione ma  per analisi dati, conosco il mondo sql e db, ti leggevo dai tempi di Clipper, ma mi è del tutto sconosciuto il mondo form. Ed è per questi motivi che cercavo di capire, non ho mai chiesto la pappa scodellata e non fà parte del mio modo di fare il copiare senza capire perlomeno in parte , di come riuscire a creare un controllo tramite form_error che mi permettesse di avere in un  unico punto di controllo di inserimento dati.  

    Nessuno infatti ha detto che cerchi pappa pronta, ma come hai capito è innegabile che lo strumento richiede conoscenza è uno strumento complesso e conoscerlo serve studiarci sopra.

    Fino ad oggi ho capito che form_error viene attivata  sicuramente in modifica dati quando non si soddisfa il “valido se” definito nella tabella. Mi sarebbe piaciuto capire se anche in fase di inserimento come stimolare il sistema per  effettuare gli stessi controlli. Leggendo diverse cose sembrerebbe di si  ma la mia non conoscenza del mezzo non mi permette di dare risposte certe . Era questa la prima risposta che cercavo per  come si dice,  non girare a vuoto, e poi in caso affermativo capire come realizzare il tutto. Prendi questo come un mio personale delusione, non posso e non devo avanzare nessun tipo di richiesta, anzi di devo rigraziare per il supporto dato.

    Secondo me ti fissi a voler affrontare le cose con una conoscenza non completa… quindi mi pare tu abbia una visione molto ristretta.

    Avrai modo di imparare amche tecniche più complesse e funzionali di programmazione… ed allora riflettendo capirai quanto serve studiare.

Devi accedere o registrarti per scrivere nel forum
13 risposte