Uso errato di Null (campo data) in query

di il
9 risposte

Uso errato di Null (campo data) in query

Ciao a tutti.
Sto facendo alcune correzioni di vecchie parti di un DB, cercando di farli un pò più "da cristiano".
Tra queste, campi data una volta creati come Testo, e che invece sto passando a Data/Ora.
Fortunatamente i dati in tabella non sono andati perduti, ma nell'adattare le varie SQL in VBA che gestivano i dati, mi sto ritrovando un problema.
In pratica (nel caso specifico attuale) posso avere 2 date: Data1 e Data2.
Nell'SQL gli vorrei dire che se Data1 è nulla, di inserire Data2, altrimenti inserisce Data1.
Questo è il pezzo di codice:

IIf(!Data1 Is Null,CLng(!Data2),CLng(!Data1))
Succede che Data1 è nulla, eppure nell'eseguire la query mi da errore "Uso errato di Null"

Ho provato a cambiare la condizione (non si sa mai):

IsNull(!Data1)
oppure
!Data1 = Null
ma come la metto la metto non gli va bene.....

Andrea

9 Risposte

  • Re: Uso errato di Null (campo data) in query

    Ovvio che non gli va bene... se nel codice hai usato Variabili di tipo STRINGA non varrà MAI NULL ma varrà vbNullString quindi devi modificare il controllo così se lo esegui da VBA:
    
    IIF(Len(CampoData + vbNullstring)=0,cdate(!data2),cdate(!Data1))
    Se lo esegui scrivendolo in QBE va modificato così:
    
    IIF(Len(CampoData + '')=0;cdate(!data2);cdate(!Data1))
    P.S. la funzione in ogni caso è IsNull(...) non [Is Null]
    https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/isnull-function
  • Re: Uso errato di Null (campo data) in query

    Si capisco, ma non sto usando nessun tipo di variabile stringa. O meglio l'unica variabile stringa è quella che uso per costruire la query per poi lanciarla.
    Recupero i dati con un SELECT, per poi inserirli in una tabella collegata (INSERT INTO).
    Quindi !Data1 e !Data2 vengono presi dal recordset, dove sono presenti come Data/Ora (ho cambiato nella tabella di origine il tipo da Testo a Data/Ora); e il problema me lo da nella visualizzione della stringa SQL risultante (cioè, ancora non la eseguo, quindi il problema non nasce neanche dalla tabella di destinazione (in cui però sono Data/Ora)
  • Re: Uso errato di Null (campo data) in query

    Leggi l'aggiunta che ho fatto...
  • Re: Uso errato di Null (campo data) in query

    Ah scusa, non avevo letto l'aggiunta...
  • Re: Uso errato di Null (campo data) in query

    Beh, ma anche in quel modo (che era una delle variazioni provate) mi risulta in errore
    
    IIf(IsNull(!Data1), CLng(!Data2), CLng(!Data1))
    
  • Re: Uso errato di Null (campo data) in query

    Jocman ha scritto:


    Beh, ma anche in quel modo (che era una delle variazioni provate) mi risulta in errore
    
    IIf(IsNull(!Data1), CLng(!Data2), CLng(!Data1))
    
    Si ma non puoi fare a caso e dire non funziona... se non ci ragioni è ovvio che sbatti la testa come la pallina da ping pong.
    Ti ho detto che nel momento in cui hai usato un CAMPO TESTO per salvare la data, a seconda di come il tuo codice viene usato, potrebbe NON CONTENERE più il valore NULL... fai una Query in cui filtri la tabella per Valore NULL e vedi quanti Records risultano... poi fai la stessa cosa e filtra per NullString="" e vedi quanti ne risultano...

    Se usi il metodo che ti ho suggerito sopra, lui prende sia NULL che NULLSTRING, e fa quello che deve...!
  • Re: Uso errato di Null (campo data) in query

    Tra l'altro, provando a fare debug, mi ritrovo i dati che mi aspetto, quindi non capisco ancora....
    
    Debug.Print IsNull(!Data1)
    Debug.Print IsNull(!Data2)
    Debug.Print !Data1
    Debug.Print !Data2
    
    ottenendo:
    
    Vero
    Falso
    Nullo
    28/10/2021 
    
  • Re: Uso errato di Null (campo data) in query

    @Alex ha scritto:


    Jocman ha scritto:


    Beh, ma anche in quel modo (che era una delle variazioni provate) mi risulta in errore
    
    IIf(IsNull(!Data1), CLng(!Data2), CLng(!Data1))
    
    Si ma non puoi fare a caso e dire non funziona... se non ci ragioni è ovvio che sbatti la testa come la pallina da ping pong.
    Ti ho detto che nel momento in cui hai usato un CAMPO TESTO per salvare la data, a seconda di come il tuo codice viene usato, potrebbe NON CONTENERE più il valore NULL... fai una Query in cui filtri la tabella per Valore NULL e vedi quanti Records risultano... poi fai la stessa cosa e filtra per NullString="" e vedi quanti ne risultano...

    Se usi il metodo che ti ho suggerito sopra, lui prende sia NULL che NULLSTRING, e fa quello che deve...!
    Hai ragione sull pallina da ping pong....
    MA se li h atrattati come testo prima, adesso che convertito il campo in DAta/Ora non c'è modo di....variare anche il valore immesso per farlo coincidere?
  • Re: Uso errato di Null (campo data) in query

    Non ho capito nulla...!
    Se converti da Testo a data, il contenuto diventa Data se compatibile... senza fare nulla.
Devi accedere o registrarti per scrivere nel forum
9 risposte