Errore 94 - Utilizzo non valido di Null

di il
9 risposte

Errore 94 - Utilizzo non valido di Null

Buonasera a tutti voi esperti...

Ho bisogno di chiedere un piccolo aiuto.
In un database, tra le varie tabelle e maschere, c'è una tabella in particolare denominata tblSetup con la relativa maschera chiamata frmSetup
In tabella ho vari campi: QUALIFICA, COGNOME, NOME, RUOLO ed infine PASSWORD (nel quale ho il problema).
La rappresentazione grafica del campo PASSWORD è data da un button che al suo click richiama una inputbox dove al suo interno mi permette di digitare una password da me scelta. Al click su OK della inputbox, il campo PASSWORD, viene riempito dalla parola appena scritta, ma in modo cifrato (dopo nel codice vedrete come).
Non vorrei essere ripetitivo ma per non sbagliare spiego passo passo ciò che faccio:

- Apro la form SETUP per abilitare nuovi account
- Inserisco la qualifica, il cognome, il nome e il ruolo
- Clicco sul button password =====> appare una Inputbox che mi chiede di impostare una password
- Inserisco una password a piacere e poi clicco su OK della inputbox per impostare la password all'account appena creato
- In un'altra form mi appare una lista fatta di Account abilitati
- Scelgo l'Account a piacere dalla listbox, poi mi viene richesta la password per proseguire, dunque inserisco la password.
- Clicco su Ok e poi il database fa il suo percorso.....

Il mio problema è il seguente: quando cerco di inserire un nuovo record, (ovvero scrivo la qualifica, il cognome, il nome e il ruolo) al click sul button per l'inserimento della password, il database mi mostra Errore 94 - Utilizzo non valido di Null.
Credo che il problema è legato al fatto che in quel momento la routine verifica che il campo PASSWORD è vuoto, perciò va in debug.
Infatti se inserisco i dati direttamente in tabella e poi li visualizzo in maschera, il problema non si pone.
Di seguito vi posto il codice del button password chimato "btnViewEditPwd"
Private Sub btnViewEditPwd_Click()
Dim s As String, np As String
    
    s = cipher([password], 0)  =======> IL PROBLEMA E' QUI QUANDO PROVO AD INSERIRE PER LA PRIMA VOLTA UNA PASSWORD
    np = ""
    Do
        np = InputBox("Inserire la nuova password o confermare la vecchia", "Gestione password", s)
    Loop Until np <> ""
    s = cipher(np)
    CurrentDb.Execute "UPDATE operatori SET password = '" & Replace(s, "'", "''") & "' WHERE id_op = " & id_op
    
End Sub

Spero che qualcuno mi posso aiutare e che non sia troppo difficile. Premetto che tutto ciò non è frutto della mia mano.
Grazie a tutti.

9 Risposte

  • Re: Errore 94 - Utilizzo non valido di Null

    Pe come lo hai scritto l'errore è generato dall'errata definizione di [np] come String.

    Avresti dovuto dichiarare come Variant... dal momento che InputBox puo restituire NULL...
    Ma poi il Do..Loop non dovrà sentire ""...

    In sostanza puoi provare a lasciare la dichiarazione di tipo String ma puoi obbligare il Casting a String ed inglobare il Null nel Nullstring dal momento in cui il risultato sarebbe lo stesso in questo modo:
    
    np = InputBox("Inserire la nuova password o confermare la vecchia", "Gestione password", s) & vbNullstring
  • Re: Errore 94 - Utilizzo non valido di Null

    Ok....perdonami ma mi sono perso!

    Ho modificato così come mi hai suggerito, ovvero ho aggiunto & vbNullstring, ma non ho capito cosa devo far con il Casting a String
    In ogni caso se dovevo solo aggiungere & vbNullstring, ho provato ma continua col solito problema
  • Re: Errore 94 - Utilizzo non valido di Null

    Diciamo che dal momento che non hai postato la Prima Funzione... non sappiamo cosa fa...!
    Quindi ti ho detto l'errore del pezzo che hai esposto...
    
    s = cipher([password], 0
    La chiamata a [cipher] se non la rendi pubblica non la possiamo inventare, ma se restitisse un NULL avrebbe il medesimo problema, la variabile [s] come stringa non supporta un valore Null...!

    Il Casting è una conversione del dato... che può avvenire in modo programmato o forzato...
  • Re: Errore 94 - Utilizzo non valido di Null

    Perdonami ma io proprio non ho capito cosa dovrei fare per provare a risolvere il problema. Mi potresti dare dei suggerimenti con degli esempi descritti in modo molto elementare?
    Io l'unica cosa che ho capita da questo errore è che se esiste già anche solo una lettera nel campo dedicato alla PASSWORD il problema non si pone, diversamente se è la prima volta che si prova a inserire una qualsiasi lettera o parola, il database va in errore
  • Re: Errore 94 - Utilizzo non valido di Null

    COs'è e cosa fa quella misteriosa e segreta funzione di cui ti ho chiesto lumi...?

    COme possiamo capire cosa dirti se non sappiamo cosa fa la funzione di cui sopra...?
  • Re: Errore 94 - Utilizzo non valido di Null

    Allora chiedo umilmente scusa, ma la mia completa impreparazione mi porta a fare figuracce. Mi affaccio solo da poco in questo splendido mondo di VBA di Access.
    Credo di aver finalmente capito cosa intendi. Pensavo che [cipher] non fosse una funzione ma una cosa tipo "Len, Mid, IsNull.
    Ok cmq la funzione che mi chiedi dovrebbe essere questa:
    Function cipher(ByVal sPlainText As String, Optional encrypting As Boolean = True) As String
    Dim iIndex As Integer, iEncoder As Integer, iEncodedVal As Integer, iDecodedVal As Integer
     
        On Error GoTo gest_err
        Select Case encrypting
        Case True
            ' Each character will be XORed with a (different) random value 0-255.
            ' The beauty of XOR is that you undo it simply by XORing with the same value
            '
            ' The output string will be twice as long as the input string,
            ' because we need to store the value that we used to XOR
            '
            ' Because it will be stored in a "plain text" file (e.g. a definition file)
            ' We MUST have printable characters so no XOR value or resultant character code
            ' is permitted to be <32 or 127 (DEL). That is why we are encoding each character
            ' with a different code, because it is easier to check for these values rather than
            ' repeating the entire encode endlessly until we find one that is good.
            
            Randomize Timer     ' Initialise the random number generator
            cipher = ""
            For iIndex = 1 To Len(sPlainText)
                Do
                    iEncoder = Int(94 * Rnd + 32)               ' Use an encoder value between 32 and 126
                    iEncodedVal = Asc(Mid(sPlainText, iIndex, 1)) Xor iEncoder
                Loop While iEncodedVal = 127 Or iEncodedVal < 32
                cipher = cipher & Chr(iEncodedVal) & Chr(iEncoder)
            Next iIndex
     
        Case False
           ' This is the reverse of the encrypt function
           ' Simply take the first of each pair of characters and XOR it with the second
        
           cipher = ""
           For iIndex = 1 To Len(sPlainText) Step 2
               iDecodedVal = Asc(Mid(sPlainText, iIndex, 1)) Xor Asc(Mid(sPlainText, iIndex + 1, 1))
               cipher = cipher & Chr(iDecodedVal)
           Next iIndex
        End Select
        
    exit_function:
        Exit Function
        
    gest_err:
        cipher = ""
        Resume exit_function
        
    End Function
  • Re: Errore 94 - Utilizzo non valido di Null

    MI chiedo perchè non ti limiti ad usare codice che sei in grado di comprendere...?
    Quella funzione di Encript/Decript decisamente basica, ti serve veramente...?
    Non fai prima a far funzionare le cose in modo standard e poi quando ne hai le capacità le migliori....

    L'errore che commetti è che probabilmente [Password] se non viene valorizzato è NULL ed ovviamente quando provi a passarlo alla funzione viene generato errore, in quanto pretende una stringa che non supporta NULL, ed è la stessa spiegazione che ti ho dato dell'altro problema...

    Dovresti riflettere sulla necessità di fare il passo lungo come la gamba non oltre...!
  • Re: Errore 94 - Utilizzo non valido di Null

    Come spiegavo all'inizio dell'argomento, il codicedi questo database non è stato scritto da me (magari fossi così bravo). Purtoppo colui che mi ha seguito nella realizzazione del database, mi ha improvvisamente abbandonato senza terminare il lavoro iniziato. Fortunatamente x quello ke serve, sono riuscito a sistemare alcune cose in modo da poterlo avviare. Adesso però mi sono accorto di questo problema. Quindi come potrei risolvelo? Che modifiche potri effettuare? Però ho bisogno di un aiuto molto elementere...altrimenti non ci capisco niente
  • Re: Errore 94 - Utilizzo non valido di Null

    Diciamo che senza basi, l'aiuto di cui necessiti e le modalità con cui penso possa essere utile, credo sia più adatto reperirlo sul posto e non su un Forum...

    Sul Forum puoi fare una domanda SPOT e ricevere aiuto, ma tu hai bisogno di ben altro... perchè la risposta su cosa fare per risolvere il tuo problema io te l'ho data 2 volte...!
    Ora che si debba insegnarti come lo si fa ad un bimbo forse... è pretenzioso non credi...?
    Non puoi pensare si debba erogare un corso di programmazione per aiutarti, men che meno la "pappa pronta"...!
Devi accedere o registrarti per scrivere nel forum
9 risposte