Newsgroup: it.comp.lang.visual-basic
Titolo: semplice problema su IsNull(), IsEmpty .....

ho un semplice form provvisto di un casella di testo inizializzata con una
stringa vuota e ho scritto queste tre righe per provare a verificare il
funzionamento della funzione IsNull :
If IsNull(txtOreLavorative.Text) Then
   ' codice per la condizione vera
Else
   ' codice per la condizione falsa
End If
Il fatto è che l'enunciato mi restituisce il blocco di codice di condizione
falsa. Com'è possibile ?? Dove ho sbagliato ??
grazie.

 wrote in message 39357...@news.dada.it...


 ha scritto nel messaggio
news:39357...@news.dada.it...


 wrote in message


 ancora inizializzato.....
[snip]
attento a non fare confusione: un oggetto non ancora inizializzato vale
Nothing;
solo un Variant può valere Null;
ciao

 wrote in message 39357...@news.dada.it...
If IsNull(txtOreLavorative.Text) or IsEmpty(txtOreLavorative.Text) Then
   codice per la condizione vera
 Else
    ' codice per la condizione falsa
 End If
dovrebbe bastare
--
Starman

Elimina NoSpam per scrivermi<
a01b02...@iol.it

Null significa che la variabile non punta ancora a nulla nella memoria e
questo accade per le variabili Variant e Object (le altre vengono
automaticamente inizializzate). Quindi la proprietà testo dell'oggetto (che
punta a una zona di memoria prima di dati) è una stringa vuota "" e va
benissimo....
Prova con questo codice:
Dim p                           'Inizialmente Empty
MsgBox IsEmpty(p)       'True
MsgBox IsNull(p)        'False
p = Null
MsgBox IsNull(p)        'True
Ora cambia il tipo di dati (non usare object)....
--------
Ciao
Sabba

Non dipendeva dal tipo...Una var integer non si può settata a nothing...solo
una var object....Juston??? Con Set...
----------
Ciao
sabba

viene interpreato il contenuto della variabile variant;
Non confondiamoci!
Se un variant non contiene niente (non è stata inizializzata) è Empty (vedi
traduzione).
Se un variant contiene un valore non valido vale Null.
Questo è spiegato anche dall'F1
Empty _NON_ corrisponde affatto a stringa vuota o 0!!!
Ciao

...

Spero tu stia scherzando!
Tu fai cosě per controllare se una stringa č vuota?
Prova cosě:
If Len(txtOreLavorative.Text) = 0 then
    'stringa vuota
Else
    'stringa valorizzata
Endif
Questo solo perchč č piů veloce del (semanticamente) piů corretto
If txtOreLavorative.Text = "" then
    'stringa vuota
Else
    'stringa valorizzata
Endif
Ciao

 >viene interpreato il contenuto della variabile variant
in altre parole se esegui il codice
    Dim V As Variant
    Debug.Print IsNull(V), IsEmpty(V)
otterrai come risposta
    False    True
inoltre, l'help in linea della funzione IsNull, a riguardo dice che
"The Null value indicates that the Variant contains no valid data. Null is
not the same as Empty, which indicates that a variable has not yet been
initialized. It is also not the same as a zero-length string (""), which is
sometimes referred to as a null string"
come conferma alla seconda parte, se esegui il seguente codice
    Dim V As Variant
    Dim I As Integer
    Dim S As String
    I = V
    S = V
    Debug.Print I, Chr$(34) & S & Chr$(34), Len(S)
ottieni come output
    0    ""    0
trovi che tutto questo sia in contrasto con quanto da me detto?
ciao

 ha scritto nel messaggio
news:FkRZ4.65288$VM3.5...@news.infostrada.it...






    0    ""    0
solo perchè VB attua delle conversioni al passaggio ad una var. tipizzata,
ma non confondere le cose!
Ciao.

 Endif
perché la prima maniera č piů veloce? chiama una funzione in piů...
Ciao
Faber

perché la prima maniera è più veloce? chiama una funzione in più...
Ma la valutazione viene fatta su un valore numerico, e le operazioni con i
numeri sono molto più veloci di quelle con le stringhe
Ciao

Endif
uhm...?????
l'hai provato??? da che fonte arriva??? ma soprattutto perché?
... ho paura della risposta....


benissimo....
Non č vero niente!
Spero che le risposte di questi giorni ti abbiano chiarito le idee
Ciao

 solo perchč VB attua delle conversioni al passaggio ad una var. tipizzata,


ciao
Mah, non mi sembra tanto una questione di libertà... non è una disquisizione
sul fatto se è meglio usare un Do-Loop o un While-WEnd.
E' come c'è scritto nell'help, non ci sono scuole di pensiero alternative...
Ciao