Newsgroup: it.comp.appl.access
Titolo: differenza fra Is null e ""

Ciao a tutti
Scusate il quesito probabilmente banale:
mi trovo a lanciare delle query che mi danno
risultati diversi se imposto come criterio
rispettivamente  - Is null - o - ""- (virgolette vuote)
non capisco bene la differenza, ma intuisco che
oltre a qualcosa che mi sfugge nel criterio della query
ho anche nella base di dati campi che vengono "letti"
in modo diverso se non sono mai stati riempiti o sono stati
riempiti e poi svuotati, questo mi creerà certamente dei problemi
che devo evitare fin d'ora.
grazie se qualcuno vorrà darmi dei suggerimenti

 ha scritto nel messaggio
news:znPYh.199$V77...@nntpserver.swip.net...

Dal punto di vista informatico sono 2 cose estremamente differenti.
Null significa che non esiste nessun riferimento, mentre "" è una Stringa
vuota.
StringaVuota e Valore Nullo sono le differenze.
Una Stringa non verrà mai valorizzata a Null,serve un Variant per questo, ed
un campo
in una tabella può contenere Null, se non inserisci nessun dato sarebbe
assurdo farli contenere
StringaVuota(occupa 1 Byte) mentre Null non occupa NULL...
Per uniformare il contenuto dei campi fai una Query UPDATE nella quele
effettui il
REPLACE(Campo,"",Chr(0))
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.alessandrobaraldi.it
---------------------------------------------------------------------------

 ha scritto nel messaggio 
news:znPYh.199$V77...@nntpserver.swip.net...

Oltre a quanto ti ha detto Alex, tieni presente che esiste anche la funzione 
nz (ovvero Null to Zero) che, in presenza di un controllo o una variabile 
valorizzata a Null, restituisce zero o una stringa vuota, a seconda di come 
è dichiarata la variabile.
Esempio:
dim Campo1 as Integer, Campo2 as String
Campo1 = Null
Campo2 = Null
Campo1 = nz (Campo1)
Campo2 = nz (Campo2)
a questo punto Campo1 conterrà il valore zero, mentre Campo2 avrà una 
stringa vuota.
La funzione nz la puoi usare anche nelle query: sicuramente appesantisce 
l'elaborazione, ma non saprei quantificare di quanto.
Ciao
Antonio

 ha scritto nel messaggio
news:znPYh.199$V77...@nntpserver.swip.net...

Ciao iperworld,
La differenza tra campo testo contenente "" e NULL è notevole :-)
Se il record ha il campo valorizzato con una stringa vuota "" sigifica che
nel Db esiste una pagina dati contenente un'area di memoria riservata a quel
campo per quel determinato record, questo a prescindere se la porzione di
memoria contine caratteri "abcd" o no ""
Al contrario se il campo è *Valorizzato* a NULL l'area di memoria riservata
a quel campo per quel record non esiste, quindi è impossibile  usare
qualsiasi operatore di confronto a parte Is Null perchè è impossibile
determinare cosa c'è in un'area di memoria che non esiste.
Per uniformare i tuoi dati ti consiglio di evitare le stringhe vuote.
Con una query di Aggiornamento elimina le stringhe vuote e inserisci NULL
----
UPDATE Tabella
SET NomeCampo=NULL
WHERE NomeCampo=''
----
poi apri in visualizzazione struttura la tabella, seleziona il tuo campo e
imposta la proprietà "Consenti Lunghezza zero" a No.
Ciao
-- 
Giorgio Rancati
[Office Access MVP]

 ha scritto nel
messaggio news:46348c0b$0$7732$5fc...@news.tiscali.it...

OK grazie a tutti e tre per le precise puntuali e tempestive
risposte, l'errore nasceva dal fatto che avevo inserito senza capirne bene
le conseguenze il seguente codice in una maschera nella quale deve essere
cancellato (o meglio impostato a null) il valore del campo [numero extra] se
vengono variate
le scelte di un altro campo [ID lavoro]
Private Sub ID_lavoro_Change()
Dim newIDlavoro As Variant
Dim oldIDlavoro As Variant
oldIDlavoro = [ID lavoro].OldValue
newIDlavoro = [ID lavoro]
If newIDlavoro = oldIDlavoro Then
[numero extra] = [numero extra].OldValue
Else
[numero extra] = ""  'QUI VA INSERITO NULL
End If
End Sub
Ho postato il codice perchè potrebbe esserci qualche
altro rilievo, è così?

 altro rilievo, è così?
Se ho capito cosa vorresti ottenere, l'evento change non è adatto, primo
perchè viene scatenato ad ogni carattere digitato, secondo perchè in questo
evento, newIDlavoro è sempre uguale a oldIDlavoro a meno non ti trovi in un
nuovo record, in questo caso la condizione newIDlavoro = oldIDlavoro non si
verificherà mai perchè oldIDlavoro è NULL.
Io userei l'evento AfterUpdate (Semprese ho capito)
Per quanto riguarda il null è corretto inserirlo dove hai messo la nota.
----
[numero extra] = Null
----
il vincolo "Consenti Lunghezza zero"=No ti avrebbe notificato l'errore 3315
aiutandoti a scoprire dove valorizzavi erroneamente il campo con la stringa
vuota.


 nuovo record
newIDlavoro è sempre uguale a oldIDlavoro a meno CHE non ti trovi in un
nuovo record
Ciao


 ha scritto nel 
messaggio news:4634ea93$0$20801$5fc...@news.tiscali.it...

Grazie Giorgio per l'attenzione con cui hai letto la mia,
ho cambiato le cose cose come mi hai detto
in realtà la cosa funzionava comunque perchè
[ID lavoro] in quella maschera è assegnato da una
casella combinata con solo in elenco impostato a si
comunque come dici tu è più corretto
grazie

 REPLACE(Campo,"",Chr(0))
scusa ma che senso ha ?
e poi, come può funzionare quella replace, l'hai provata ?


 e poi, come può funzionare quella replace, l'hai provata ?
ho dimenticato la faccina
:-D


 [Office Access MVP]
Ciao


 Sapessi che faccina mi è venuta rileggendomi....
:-)


 [Office Access MVP]
Risultato tennistico... KO.
;-)
Ciao
@Alex

> funzione *Replace* non accetta valori NULL nel primo parametro.
Sempre detto che la funzione replace e' inutile!
-- 
ac
y-1=x

 y-1=x
Sempre detto che alcuni a "Roma" ne sanno una piů del diavolo... č questione
di DNA...
perň potevi pure insegnarla a tutti... invece di essere "egoist" e tenere
tutto per te.
