Public Function non interpreta valori Null

di OsvaldoLaviosa il
7 risposte

Ho una query con un campo che fa riferimento a una Public Function scritto così:
Città, Luogo: CittàLuogo([Città];[Luogo])

Poi ho questa


Public Function CittàLuogo(Città As String, Luogo As String) As String
Dim strCL As String
If (Città = "0") And (Len(Luogo & vbNullString) = 0) Then strCL = ""
If (Città = "0") And (Len(Luogo & vbNullString) > 0) Then strCL = Luogo
If (Città <> "0") And (Len(Luogo & vbNullString) = 0) Then strCL = Città
If (Città <> "0") And (Len(Luogo & vbNullString) > 0) Then strCL = Città & ", " & Luogo
CittàLuogo = strCL
End Function

Accade che se in Luogo vi è Null, nella query appare #Errore oppure #Tipo. Per il momento ho aggirato il problema sostituendo tutti i Null in Luogo con stringa-lunghezza-zero…ma…
Forse invece di tante If, meglio Select Case? Ma non riesco a scrivere la sintassi adeguata!
Dove sbaglio? Consigli?

7 Risposte

  • Se il problema è solo il Null puoi usare la funzione Nz così:

    Public Function CittàLuogo(Città As String, Luogo As String) As String
    
    Select case Città
    Case "0"
    	CittàLuogo = Nz(Luogo;"") 
    Case Else
      	If isnull(Luogo) then CittàLuogo = Città Else: CittàLuogo = Città & ", " & Luogo  
    End Select
    End Function
  • Non capisco cosa hai contro la funzione Len(). Perché sostieni di stare ad aggirare il problema?

  • 25/02/2023 - Antony73 ha scritto:


    Non capisco cosa hai contro la funzione Len(). Perché sostieni di stare ad aggirare il problema?

    Ti riferisci a me? Proprio perchè credevo di conoscerla bene ho usato tale sintassi. Ma non so perchè non funziona quando Luogo è Null.
    Ho la sensazione che è infelice l'idea dei 4 If disposti in quella maniera…ma…boh!

  • Ad ogni modo io avrei pensato subito di ricorrere ad una iif annodata anziché a una funzione.

  • La funzione è scritta male… non è LEN il problema… serve capire sempre bene.

    Se il parametro che hai dichiarato è Type String non può accettare null.

    Se deve accettare null devi dichiararlo VARIANT.

  • 25/02/2023 - @Alex ha scritto:


    Se il parametro che hai dichiarato è Type String non può accettare null.

    Se deve accettare null devi dichiararlo VARIANT.

    Vero, dopo tanto tempo lo avevo dimenticato. Riscritto il primo rigo così

    Public Function CittàLuogo(Città, Luogo) As String

    ora funziona.

    Grazie.

  • Abituati a Dichiarare sempre… lo fa chi è esperto… per questione di visibilità e pulizia… per chi ha poca dimestichezza il METODO dovrebbe essere la prima cosa da imparare, le assunzioni di Default non sono indice di esperienza… anzi.

    Public Function CittàLuogo(Città As Variant, Luogo As Variant) As String
Devi accedere o registrarti per scrivere nel forum
7 risposte