Validation Rules

di il
5 risposte

Validation Rules

Grazie alle indicazioni di Alex sto utilizzando form_error per gestire gli errori di inserimento dati in una maschera. 

Nel mio caso ho textbox associati sia a campi testo che data, ma in caso di inserimenti errato nei due duversi textbox mi viene restitoito lo stesso errore 2113 . E possibile determinare se l'errore è generato da un campo testo o data ?

5 Risposte

  • Re: Validation Rules

    No ma puoi leggere ActiveControl e verificare il VarType…

    Debug.print VarType(Screen.Activecontrol)

    Se il campo è associato io preferirei una cosa simile:

    Debug.Print Me.RecordsetClone.Fields(Screen.AcriveControl.ControlSource).Type

    In sostanza interroghi il TYPE del Campo associato al Controllo leggendo direttamente dalla proprietà del Recordset.

  • Re: Validation Rules

    Ti ringrazio non essendo molto pratico non pensavo di poter utilizzare il recordset all'interno di una maschera.

    Ti volevo anche dire che la seconda istruzione mi dava un errore “impossibile trovare metodo  o membro dei dati”, ma con questa modifica mi funziona alla grande restituisce 8 in caso di data 10 per numerico 1 per testo

    Debug.Print Me.RecordsetClone.Fields(ActiveControl.Name).Type

    grazie di nuovo ed alla prossima

  • Re: Validation Rules

    Fai attenzione, il Name ed il ControlSource sono 2 cose molto differenti a livello concettuale.

    Le 2 Proprietà POSSONO coincidere se hai nominato il controllo come il controlSource, ma la proprietà da usare è ControlSource non Name.

    Ad esempio se come fanno molti nomini la TextBox [txtCampoData] ed il Campo Associato è [CampoData] comprendi che il Campo del Recordset non lo trovi se usi [txtCampoData].

    Ora veniamo al perchè non funzionava… che forse è meglio comprendere.

    La classe ActiveControl è GENERICA e non espone la proprietà ControlSource, motivo per il quale serve assegnare il controllo Generico al controllo specifico cosi, ipotizzando si tratti di TextBox:

        Dim mtxt As Access.TextBox
        Set mtxt = Screen.ActiveControl
        Debug.Print Me.RecordsetClone.Fields(mtxt.ControlSource).Type

    La classe TextBox espone tutto quello che ti serve, e la proprietà ControlSource è quella che indica il Nome del Campo.

  • Re: Validation Rules

    Prima di tutto mi scuso perchè anche la prima istruzione funzionava bastava sostituire  Acrive con Active

    Debug.Print Me.RecordsetClone.Fields(Screen.AcriveControl.ControlSource).Type

    Ho fatto anche molte altre prove ed in effetti, se ho ben capito VarType(Screen.Activecontrol)  mi restituisce il tipo di campo solo se questi è correttamente compilato, quindi nel caso in cui abbia messo un controllo di validità validation rules, il valore restituito all'interno di form_error sarà null.

    Cosa diversa invece appoggiarsi sul recordset che legge direttamente la tabella e quindi il tipo campo è quello corrispondente al nome campo inserito nel textbox in origine controllo. Spero di aver capito come funziona e ti chiedo un altra cortesia.

    E' possibile sapere il contenuto del textbox che sto verificando, perché io ho provato in tutti i modi a leggere il value ma il risultato e sempre null.

    Grazie di nuovo

  • Re: Validation Rules

    Senfai il print di SCREEN.ACTIVECONTTOL restituirà il VALUE.

Devi accedere o registrarti per scrivere nel forum
5 risposte