Newsgroup: it.comp.appl.access
Titolo: intercettare errore data

Buonasera a tutti.
In una form ho inserito
Private Const ERR_DATATYPE = 2113
Private Const ERR_INPUTMASK = 2279
Su evento error della form invece:
Private Sub Form_Error(DataErr As Integer, Response As Integer)
    Select Case DataErr
        Case ERR_DATATYPE, ERR_INPUTMASK
            MsgBox "ATTENZIONE: La data inserita non è completa o errata", vbCritical, ""
            Response = acDataErrContinue
        Case Else
            'Display the default error message
            Response = acDataErrDisplay
    End Select
End Sub
Funziona.
Il problema è: 
su evento keydown ho:
If KeyCode = 9 Or KeyCode = 13 Then Me.cmdsalva.SetFocus
come faccio ad intercettare l'errore prima che parta il codice se do' invio o spingo il tasto tab?
Grazie.
 


Mi rispondo da solo:
Private Sub txtDataDimissione_KeyDown(KeyCode As Integer, Shift As Integer)
    If IsDate(Me.txtDataDimissione.Text) = False Then Exit Sub
    If KeyCode = 9 Or KeyCode = 13 Then Me.cmdsalva.SetFocus
End Sub
Sembra funzionare.
Secondo voi è la corretta soluzione?
Giuseppe.


Nuovo problema:
Se la data è correttamente inserita il codice If IsDate(Me.txtDataDimissione.Text) = False restituisce False ed esce dalla sub.
Come devo fare?
Grazie.
Giuseppe

Perchè usi la proprietà TEXT e su quale evento controlli la data...?
 
@Alex

 @Alex
 
Buongiorno e grazie Alex.
I controlli con le date vengono controllate tutte dal codice su evento Errore della form (codice nel primo commento del thread).
Se sul controllo è impostato il codice su evento tasto giù (sposta il focus su un controllo nel piè di pagina maschera) e la data non è inserita correttamente, mi dà errore di run time 2110.
Inserendo, prima  il codice If IsDate(Me.txtDataDimissione.Text) = False Then Exit Sub  la verifica viene effettuata e la routine si ferma senza andare in errore.
Se invece la data è corretta, tale riga con la proprietà TEXT non serve e restituisce False uscendo dalla sub.
I controlli non sono associati.
Grazie


Su evento KeyDown è corretto usare la proprietà TEXT, ma nell'evento FORM no ovviamente, tuttavia mi sfugge il motivo per cui controlli la data così:
Private Sub txtDataDimissione_KeyDown(KeyCode As Integer, Shift As Integer)
If IsDate(Me.txtDataDimissione.Text) = False Then Exit Sub
If KeyCode = 9 Or KeyCode = 13 Then Me.cmdsalva.SetFocus
End Sub 
 
Risulta evidente che finchè non è completa avrai SEMPRE FALSE e conseguente EXIT SUB.
Quando è completa, ovvero alla pressione dell'ultimo carattere, perchè forzi il SALVA se poi il controllo NON è associato...?
 
Insomma se deleghi Form ERROR non ha senso quello che fai... è frutto di un'accrocchio non motivato.
Io indagherei del perchè Form_Error genera Errore quando esci dal Controllo se effettivamente il controllo è impostato come data nel Formato...!!!
 
Boh... secondo me qualche cosa di molto banale ti scappa.
 
@Alex

 Io indagherei del perchè Form_Error genera Errore quando esci dal Controllo se effettivamente il controllo è impostato come data nel Formato...!!! 
Form_Error se la data è completa e corretta non genera Errore, solo interviene dopo la routine tasto giù.
 
Giuseppe

Non riesco a capire la logica di questa cosa...!
 
Se scrivi questo:
Private Sub txtDataDimissione_KeyDown(KeyCode As Integer, Shift As Integer)
     If KeyCode = 9 Or KeyCode = 13 Then Me.cmdsalva.SetFocus
End Sub 
 
Nel caso tu prema PRIMA di averla completata uscirà l'evento Error di Form...
 
@Alex


No Alex non esce l'errore dell'evento Error di Form ma esce l'errore di run time 2110: impossibile spostare lo stato attivo sul controllo cmdSalva.
Questo perchè l'errore su form lo esegue dopo l'evento su tasto giù del controllo.
 
Giuseppe

 Questo perchè l'errore su form lo esegue dopo l'evento su tasto giù del controllo. 
 
Si ovviamente, ma se lo spostamento del Focus lo metti su Exit, mentre su Form Error lo riporti sulla TextBox Data in caso di errore...?
(ovviamente do per scontato che tu abbia varie TextBox e che ognuna debba poi spostare su cmdSalva... altrimenti la cosa non ha proprio senso, si risolverebbe con l'impostazione della proprietà Ordine di Spostamento).
 
Ripeto stai operando in modo contorto... avrai sempre qualche rogna.
 
@Alex


Adesso sembre funzionare tutto.
L'evento su tasto giù l'ho eliminato e lo spostamento sul pulsante cmdSalva l'ho messo su evento exit.
Se la data inserita è incompleta o errata interviene la routine Error di form, altrimenti il focus si sposta come da routine exit.
Grazie Alex.

 Grazie Alex.
 
Le cose semplici.... funzionano sempre.
"... quando fai robe complicate per risolvere cose banali stai sicuramente sbagliando, buttavia tutto e rifai..." diceva il mio professore di informatica.
 
@Alex