Newsgroup: it.comp.appl.access
Titolo: Combobox e valore null

Ho problemi ad ottenere risultati nel mio codice. Col debug ho capito
che si tratta di un problema di valore nullo (vuoto?) delle combobox
di una maschera. Ma che differenza fa:
If Not IsNull(Me.combobox) Then...
rispetto a:
If Nz(Me.combobox) > 0 Then...
E che differenza c'è tra Me!combobox e Me.combobox?
C'entrano qualcosa queste "quisqulie" da principiante??

On 26 Ago, 11:19, Francesca Chiarelli

Io uso la function IsNothing sotto esposta.
Di uso generale, utile appunto per verificare se campo/controllo
contiene valori.
ad. es......... If  IsNothing(me.combo1) then.......
Da 'Building Access Applications by John L. Viescas', reperibile in
rete.
Spero che ti possa aiutare, ciao
Sergio
Public Function IsNothing(ByVal varValueToTest) As Integer
'-----------------------------------------------------------
' Does a "nothing" test based on data type.
'   Null = nothing
'   Empty = nothing
'   Number = 0 is nothing
'   String = "" is nothing
'   Date/Time is never nothing
' Inputs: A value to test for logical "nothing"
' Outputs: True = value passed is a logical "nothing", False = it
ain't
' Created By: JLV 01/31/95
' Last Revised: JLV 01/31/95
'-----------------------------------------------------------
Dim intSuccess As Integer
    On Error GoTo IsNothing_Err
    IsNothing = True
    Select Case varType(varValueToTest)
        Case 0      ' Empty
            GoTo IsNothing_Exit
        Case 1      ' Null
            GoTo IsNothing_Exit
        Case 2, 3, 4, 5, 6  ' Integer, Long, Single, Double, Currency
            If varValueToTest <> 0 Then IsNothing = False
        Case 7      ' Date / Time
            IsNothing = False
        Case 8      ' String
            If (Len(varValueToTest) <> 0 And varValueToTest <> " " And
varValueToTest <> vbNullString) Then IsNothing = False
    End Select
IsNothing_Exit:
    On Error GoTo 0
    Exit Function
IsNothing_Err:
    IsNothing = True
    Resume IsNothing_Exit
End Function

 C'entrano qualcosa queste "quisqulie" da principiante??
Se uno comincia a porsi queste domande e' sulla buona strada.
Spesso sotto queste "quisquilie" c'e' la differenza fra una vita sana 
alla mulino bianco e andare al "manicomio"
(*)
-- 
ac (x=y-1)

 Public Function IsNothing(ByVal varValueToTest) As Integer
Ai dont laik it. Soprattutto perche' il  *Nothing* dovrebbe essere 
riservato agli oggetti.
(Mi sembra, detto far noi intimi, che sia un UCAS)
questa in particolare la trovo esilarante
If .... And varValueToTest <> " " ..... IsNothing = False
-- 
ac (x=y-1)

 Sul sito di Karl potrebbe esserci una chiara esposizione (non la trovo).
P.S.  
www.donkarl.com/it
-- 
ac (x=y-1)


wrote:

Cuor contento il ciel l'aiuta....
*Nothing* è il nome della funzione, che (ribadisco e ringrazio)  è
dovuta a John L. Viescas.
Non c'entrano gli oggetti.
I casi presi in considerazione dalla function  per il valore di campi
o controlli sono invece:
'   Null = nothing
'   Empty = nothing
'   Number = 0 is nothing
'   String = "" is nothing (lo stesso vale per vbNullString, che  è
leggermente diverso)
'   Date/Time is never nothing
Mi sembra piuttosto completa, almeno in questi anni (come si vede
Viescas l'ha datata 1995)
ha sempre funzionato; se si può integrare o eliminare ridondanze tanto
meglio.....comunque è già discussa sul web.
Ciao a tutti
Sergio

Vi ringrazio per la Vs solerzia nel rispondermi. Devo però lasciare
l'ufficio e correre a preparaermi per la partenza del weekend al mare.
Lunedì vi leggerò con calma e vedrò di risolvere i miei problemi/
dubbi!.ciao"!

 Cuor contento il ciel l'aiuta....
Forse non mi sono spiegato.
La funzione l'ho letta e credo di averla compresa. Che in quella 
funzione non centrino nulla gli oggetti e' una cosa acclarata. C'e' scritto.
Cerco di essere piu' chiaro.
Normalmente la parola "nothing" e' associata agli oggetti e *non* alle 
variabili scalari, per le quali, non a caso, si usa *null* e quindi il 
fatto che quella funzione si chiami *isNothing* per un lettore 
superficiale (e' ironica) come il sottoscritto puo' essere fuorviante, 
ad esempio, sempre il sottoscritto, se la avesse scritta, la avrebbe 
chiamata isCustomValued (invertendo i ritorni di funzione).
Che poi la funzione funzioni non c'e' ombra di dubbio anche se non si 
capisce perche' le Date non possano essere Nothing e perche' una 
variabile "  " e' non nothing mentre una variabile " " lo e'.
Il vbNullString, se non rammento male, e' chr(0) e sempre se non ricordo 
male e' il  "\0" del C che significava, grossomodo, terminatore di 
stringa et quindi una striga "\0" era una nullstring.
Altra piccola incongruenza.
Sappiamo tutti che il dato boolean e' inventato pero' far ritornare un 
Integer (perche' non un Long,poi, che e' piu' "performante") e poi dire 
che la funziona ritorna False (0) o True (-1), al solito, funziona, ma 
un po' di coerenza nella vita non guasterebbe.
Io ho un sacro rispetto degli scrittori ma qualche volta qualche 
corbelleria (IMHO) la dicono, o peggio la scrivono, e soprattutto sul 
Web con una certa frequenza si legge il contrario di quello che e'.
P.S. Anche il test sul numerico, per dirla in modo originale, "lascia il 
tempo che trova" ma sarebbe perfetto se si chiamasse, appunto, 
isCustomValued
S. E. & O.
-- 
ac (x=y-1)



Ciao Francesca e Alessandro,
mentre lotto con l'insonnia cerco di rispondere alle osservazioni di
Alessandro.
Adesso mi sembra chiaro ed interessante; tra l'altro, rispetto alla
function originale ho trovato la valutazione di vbNullString
introdotta successivamente (non so all'epoca la costante vbNullString
fosse supportata in vba).
Concordo sul fatto che sia bene non accontentarsi di una cosa che
funziona; d'altronde siamo qui per questo.
Entrando nel merito:
-Il nome della function in effetti non mi sembra una scelta felice; ho
comunque lasciato finora la denominazione dell'autore.
-La valutazione di vbString in effetti sembra zoppicare; cosa ne pensi
di:
    If Asc(varValueToTest) = 32 Or _
    varValueToTest <> "" Or _
    varValueToTest <> vbNullString Then IsNothing = False
(volendo considerare "vuota" una stringa fatta solo di spazi, il che
mi sembra sostenibile..de gustibus)
-Lascerei come vedi la valutazione di vbNullString sebbene in ambito
vba sia nei fatti equivalente a ""; vedi sopra, invece di
accontentarmi del risultato preferirei usare appropriatamente "" o la
costante vbNullString  quando richiesto dalle API. Qualcuno ha scritto
peraltro che l'utilizzo di quest'ultima in luogo di "" migliori le
prestazioni in vba perchè vbNullString non alloca spazio in memoria;
sarei curioso su come si possa misurare la differenza. Cosa ne pensi?
-A questo proposito dici che mettere 0 o -1 in una variabile Long
invece di Integer migliorerebbe le prestazioni? A parte questo usare
Boolean o Integer sono sempre 2 byte, mi sembrano solo due diverse
scuole di pensiero.
-La valutazione di vbDate non è chiara sebbene funzionante; ovviamente
se un valore è valutabile come data non può essere (impropriamente
definito) IsNothing = true. Se Null penso venga valutata come numero.

 definito) IsNothing = true. Se Null penso venga valutata come numero.
Date e' un altro "tipo" inventato. Di fatto access usa un numerico 
(single?) in cui la parte intera sono giorni a partire dall'1/1/1900 
(credo, sull'Help c'e' scritto ma non ho voglia di verificare e la mia 
memoria e' ormai "fritta") e la parte frazionaria e' l'ora. "0" se non 
ricordo male e' la mezzanotte del 31/12/1899. E' sufficiente trasformare 
un campo Date/Time in numerico e viene fuori esplicitamente.
(*) Forse in quelle di @Alex Baraldi uauauauauauaua ;-{)
(**) Ci sarebbe da discutere su come vengono preparati e soprattutto 
tradotti certi "tomi"
(***) Mi scuso per la mia abominevole citazione
-- 
ac (x=y-1)


Funziona!

 se non ricordo male
grazie

 isCustomValued
...questioni..nominalistiche!?

 Boolean o Integer sono sempre 2 byte, mi sembrano solo due diverse
sarebbe interessante sapere la verità oggettiva su come stanno le cose

 un campo Date/Time in numerico e viene fuori esplicitamente.
dunque se in Ado assegno "0" ad un campo data, io "cancello" il valore
in quel campo?

On 30 Ago, 17:37, Francesca Chiarelli

Perchè 'vintage'?