Blocco inserimento dati dopo Cancel=True

di il
6 risposte

Blocco inserimento dati dopo Cancel=True

Ho una routine che controlla l'immissione dei dati nel campo TImporto, vorrei semplicemente che venisse impedita l'uscita dal campo se non sono rispettate alcune condizioni:

Private Sub TImporto_Exit(Cancel As Integer)

If IsNull(Me.TImporto) Or Me.TImporto <= 0 Then

Me.TImporto.BackColor = RGB(255, 0, 0)

Cancel = True

Else

Me.TImporto.BackColor = RGB(255, 255, 255)

End If

End Sub

Il problema che riscontro e che non mi so spiegare è perchè al verificarsi delle condizioni viene sì impedita l'uscita dal campo TImporto, ma non viene consentita la digitazione di alcun dato, il cursore rimane lampeggiante ma non si riesce a digitare nulla.

6 Risposte

  • Re: Blocco inserimento dati dopo Cancel=True

    Premesso ceh ho testato il problema e non mi viene riproposto..., da me non lo fa... ci possono essere altre cose che non ci dici...?

    Cosa contiene il Controllo...? Che inserimento hai fatto...?
    Hai definito la proprietà InputMask della TextBox...?

    Ti chiedo perchè quel codice non funziona senza un'imposizione dell'InputMask, nel senso che se digiti una Lettera... la prima Verifica viene superata... non è Null e non è <=0... quindi risulta Buono anche se è una Lettera...
    Mi spiego meglio, ma se ti facessi DEBUG lo vedresti:
    
    If IsNull(Me.TImporto) Or Me.TImporto <= 0 Then
    Se [Me.TImporto]="S" la condizione è soddisfatta, ma ti chiedo di TESTARE queste cose per capire ciò che fai, ed io dubito sia un valore che possa soddisfare un Campo di tipo Valuta... quindi devi rivedere la tua logica di validazione, magari sul Tipo di contenuto, usando IsNumeric e non IsNull, oltre che sul Valore, e soprattutto definendo, se possibile, la proprietà Inputmask per impedire di inserire caratteri NON idonei.
  • Re: Blocco inserimento dati dopo Cancel=True

    Ciao, grazie per la risposta intanto. Il controllo contiene un numero di tipo valuta, non utilizzo una maschera di input e non ho impostato un valore predefinito, che quindi è nullo. Il problema non è che non fa il controllo, tant'è che se per esempio digito -1 il campo diventa correttamente rosso e il focus rimane nel controllo in attesa di un nuovo inserimento, in questo caso posso digitare nuovamente il valore corretto. Se però non digito nulla e dò invio, il campo diventa rosso il focus rimane nel controllo, ma non si può digitare nulla è come bloccato nel campo e non accetta altri valori.

    C'è sicuramente qualcosa che mi sfugge, qualcosa che devo aver fatto, perchè la stessa identica routine presente in un altro controllo (quello precedente nell'ordine della sequenza) invece non dà questi problemi.
  • Re: Blocco inserimento dati dopo Cancel=True

    ClaudioCZ ha scritto:


    Ciao, grazie per la risposta intanto. Il controllo contiene un numero di tipo valuta
    Non credo... il controllo contiene quello che digiti se non definisci la maschera di Input, il campo associato invece è configurato come Valuta.

    ClaudioCZ ha scritto:


    , non utilizzo una maschera di input e non ho impostato un valore predefinito, che quindi è nullo. Il problema non è che non fa il controllo,
    Invece di digitare 1 oppure -1, hai provato a digitare una Lettera...? (Dovresti ottenere errore da JET non dall'interfaccia proprio perchè è il campo in Tabella che non accetta l'inserimento... ma questo non accade se non dopo l'evento Exit, che quindi VALIDA l'inserimento non colorando in Rosso e passando il Focus al controllo successivo...).

    ClaudioCZ ha scritto:


    tant'è che se per esempio digito -1 il campo diventa correttamente rosso e il focus rimane nel controllo in attesa di un nuovo inserimento, in questo caso posso digitare nuovamente il valore corretto. Se però non digito nulla e dò invio, il campo diventa rosso il focus rimane nel controllo, ma non si può digitare nulla è come bloccato nel campo e non accetta altri valori.

    C'è sicuramente qualcosa che mi sfugge, qualcosa che devo aver fatto, perchè la stessa identica routine presente in un altro controllo (quello precedente nell'ordine della sequenza) invece non dà questi problemi.
    Infatti ti posso dire che provando a fare quanto dici NON provoca nulla di quanto esponi, quindi devi avere qualche impostazione o interazione con altri eventi...

    Tuttavia il controllo che fai NON E' corretto, come ti ho spiegato.
  • Re: Blocco inserimento dati dopo Cancel=True

    Invece di digitare 1 oppure -1, hai provato a digitare una Lettera...?
    Perdonami, a parte che confido nella sapienza minima degli utilizzatori che suggerisca loro che dove viene chiesto di digitare un importo non scrivano lettere, ma se il campo è configurato nella tabella come numerico come può accettare lettere? Ed infatti se digito una lettera compare il messaggio di errore...

    Quanto al problema suggerisci che sia dovuto ad impostazioni o interazione con altri eventi, sembra strano anche a me che la stessa routine funzioni senza problemi in altri controlli, però ho ricontrollato decine di volte, ma non trovo nulla di strano.
  • Re: Blocco inserimento dati dopo Cancel=True

    ClaudioCZ ha scritto:


    Invece di digitare 1 oppure -1, hai provato a digitare una Lettera...?
    Perdonami, a parte che confido nella sapienza minima degli utilizzatori che suggerisca loro che dove viene chiesto di digitare un importo non scrivano lettere, ma se il campo è configurato nella tabella come numerico come può accettare lettere? Ed infatti se digito una lettera compare il messaggio di errore...
    La premessa è sempre che l'utente sia "Utonto", e che sia in capo allo sviluppatore porre in essere i controlli.

    Secondo fai attenzione a non confondere le acque, banalizzando gli aspetti tecnici.
    Nel tuo caso dovresti decidere in modo ragionato dove e come fare la validazione... questa può essere fatta a diversi Livelli...
    1) A livello di controllo, ovvero della TextBox tramite i suoi eventi(e tu quì hai inserito un controllo su evento Exit, questo previene la scrittura nel DB) intercettando anche gli errori derivanti...
    2) A livello di Database, ed è quello che fai inconsciamente fare quando digitando S ottieni errore, questo avviene quando stai scrivendo nel DB, quindi meno gestibile come errore, perchè avviene solo DOPO, ovvero durante il Commit della transazione...

    Sono 2 cose differenti concettualmente e tecnicamente.
    Se si implementa una logica di Validazione, tendenzialmente si opera lato Interfaccia(quindi Controlli Oggetto), ma soprattuto è più semplice poi fare diagnosi se si ha un UNICO il punto di VALIDAZIONE.
    Personalmente non delegherei il rilascio dell'errore gestibile al Database, a quello delego solo i non prevedibili o non previsti.

    Pensa magari alla sola scalabilità del DB... se vuoi cambiarlo... devi conoscere come il DB restituisce l'errore ed intercettarlo, modificando il codice, e poi gli errori STANDARD generati da Sistema che non sono gestiti, sono sempre un PESSIMO VEDERE.

    Ovviamente, questo è un parere, poi tu puoi fare quello che credi, l'importante sia consapevole.

    ClaudioCZ ha scritto:


    Quanto al problema suggerisci che sia dovuto ad impostazioni o interazione con altri eventi, sembra strano anche a me che la stessa routine funzioni senza problemi in altri controlli, però ho ricontrollato decine di volte, ma non trovo nulla di strano.
    Hai provato a cancellare il controllo e ricrearlo...?
    Nel caso di Interazione con altri Eventi... la cosa richiede una discreta dimestichezza con il Debug, mettendo dei Debug.Print nel codice per capire le sequenze di generazione di Eventi... BeforeUpdate di Controllo e di Form, o BeforeInsert di Form...
  • Re: Blocco inserimento dati dopo Cancel=True

    Capisco quello che vuoi dire e sono d'accordo, ma avendo impostato un tipo di dati non mi sono proprio posto il problema di controllare l'inserimento di dati che non fossero numeri.

    Nel frattempo penso di avere svelato l'arcano, anche se mi rimane inspiegabile perchè sull'altro controllo il problema non si presentasse: sono andato a controllare tutte le impostazioni della sottomaschera che è di solo inserimento, quindi avevo impostato "No" consenti modifiche. Impostando invece su "Si" il campo si sblocca e mi permette di digitare dopo la convalida della routine.
Devi accedere o registrarti per scrivere nel forum
6 risposte