04/12/2024 - Philcattivocarattere ha scritto:
04/12/2024 - @Alex ha scritto:
Len(Me!NomeTextBoxTAG.Value+vbNullstring)>0
Se Me!NomeTextBoxTAG.Value è Null quell'espressione darà Null, né vero né falso. Che poi si ottenga lo stesso risultato, cioè non far eseguire l'istruzione dopo il Then che è alla fine quello che comunque si vuole, ma "concettualmente" non è giusto. In pratica, è del tutto indifferente concatenare vbNullString con il segno + o lasciare solo il valore del controllo.
L'uso del vbNullString serve per trattare come una situazione sola sia la ZLS sia il Null. Però bisogna concatenare con &, in grado di disattivare la propagazione del Null.
Len(Me!NomeTextBoxTAG.Value & vbNullstring) > 0
Ho sbagliato quèl?
Sbagli quel.
La TextBox, che non è un Type String, ma Variant, può contenere Numeri, Testo(quindi caratteri) ma anche NULL, ad esempio quando non è mai stata valorizzata o nullstring quando da Pippo cancelli e salvi, dovrebbe contenere NullString, e come sai NULL<>NULLSTRING.
Ora il tutto dipende da come effettui il controllo sul contenuto della TextBox... se usi IsNull, non intercetti NullString, se usi LEN(...) avrai errore in caso di Null in quanto il Type String supportato da LEN non supporta NULL.
Il problema quindi è che tu devi intercettare entrambi sia NULL che NULLSTRING possibilmente in un solo colpo e magari senza generare errore...!
La concatenazione del contenuto della TextBox, a prescindere di cosa sia, con vbNullString, di fatto forza un Casing del DataType al Type=String dominante, consentendo quindi alla Funzione LEN a poter valutare appunto la Lunghezza, senza generare errore.
Va da se che se il contenuto è già String, es. "Pippo" la concatenazione con vbNullString non modifica il contenuto ne il Type.
04/12/2024 - Philcattivocarattere ha scritto:
..... ma "concettualmente" non è giusto. In pratica, è del tutto indifferente concatenare vbNullString con il segno + o lasciare solo il valore del controllo.
Ora veniamo alla concatenazione.
L'uso del vbNullString serve per trattare come una situazione sola sia la ZLS sia il Null. Però bisogna concatenare con &, in grado di disattivare la propagazione del Null.
Nel mio esempio ho usato il [+] per concatenare... non [&], perchè il [+] non è solo operatore matematico, è un operatore intelligente...!
Ora in VBA il risultato non è equivalente in effetti da VBA serve usare &, che forza il TYPE a String...
1+"A"--> Errore
1 & "A"--> 1A (stringa)
""+Null --> "" (Stringa)
"" & NULL -->"" (Stringa)
ma prova a mettere la concatenazione di stringhe nel predicato SQL con [&] e facci sapere se funziona.
SELECT * FROM T1
WHERE LEN([Campo1] & '')>0
La risposta è NO, questa sotto invece funziona.
SELECT * FROM T1
WHERE LEN([Campo1] + '')>0
Ti è chiaro...?