PDA

View Full Version : [ACCESS-VBA] Passare un Null come parametro....


dr.stein
29-08-2003, 10:00
Ciao!
Ho questo problema!

Ho questa funzione:


Function Formatta(ByVal Str As String, ByVal Lung As Integer) As String

If IsNull(Str) Then
Formatta = String(Lung, " ")
Else
Formatta = Str + String(Lung - Len(Str), " ")
End If

End Function

Al quale io passo una stringa e un numero!
Il numero rappresenta la lunghezza fissa che deve avere la stringa restituita!

Ovvero, se io passo "ABC" e 5, mi restituisce "ABC--" (dove - sono spazi), se passo "A" e 5 ho "A-----"

Nel caso la stringa sia vuota, ricevo una stringa di tanti spazi quanto e' il numero del secondo parametro.
Stesso funzionamento dovrebbe avere nel caso di stringa nulla!

Ora esaminiamo il pezzo di codice che richiama questa funzione:


Dim Query As Object
Set Query = CurrentDb.OpenRecordset("INGRESSO")

Dim Riga As String

Riga = ""

.... CUT ....

Riga = Riga + Formatta(Query!CognomeContr, 25)

INGRESSO e' il nome di una tabella dove ho memorizzati tutti i dati

Ora, il campo CognomeContr e' un campo testo da 25 caratteri, quindi posso avere al suo interno una stringa che va da 0 a 25 caratteri, oppure Null!

Qual'e' il problema ?

Nel caso ci sia Null, Access mi risponde:


Errore di runtime '94':

Utilizzo non valido di Null


Come posso passare Null come parametro ad una funzione ?

Altre idee per risolvere il problema ?

Thx! :)

ilsensine
29-08-2003, 10:16
String non può essere Null. Devi usare il tipo Variant.

dr.stein
29-08-2003, 10:21
Originariamente inviato da ilsensine
String non può essere Null. Devi usare il tipo Variant.

DOH!!!!

:muro: Ma ho fatto tanto per evitare il Variant!!!! :muro: :muro:

Grazie! :)

cisky
29-08-2003, 13:18
Ti consiglio di crearti una comoda funzione che ti gestisce l'uso del Null con le stringhe

Function NullStr(v As Variant) As String
If IsNull(v) Then
NullStr = ""
Else
NullStr = CStr(v)
End If
End Function


Es: Riga = Riga + Formatta(NullStr(Query!CognomeContr), 25)

Ciao!

dr.stein
30-08-2003, 10:12
Originariamente inviato da cisky
Ti consiglio di crearti una comoda funzione che ti gestisce l'uso del Null con le stringhe

Function NullStr(v As Variant) As String
If IsNull(v) Then
NullStr = ""
Else
NullStr = CStr(v)
End If
End Function


Es: Riga = Riga + Formatta(NullStr(Query!CognomeContr), 25)

Ciao!

Uhm... e' un'idea...
ma non e' ridondante a quel punto ?

a2000
31-08-2003, 03:12
Originariamente inviato da dr.stein
Ciao!
Ho questo problema!

....


Se non hai problemi puristico-tipologico di derivazione pascalina (il variant non lo voglio no ! - ma d'altra parte "Null è un sottotipo di Variant utilizzato per indicare che un elemento non contiene dati validi") ti propongo questa più corta e con l'uso della negletta Istruzione Mid (non la Funzione):


Function Formatta1(ByVal Str As Variant, ByVal Lung As Integer) As String

Formatta1 = String(Lung, " ")
If Not IsNull(Str) Then Mid(Formatta1, 1) = Str

End Function

cisky
01-09-2003, 12:59
Originariamente inviato da dr.stein
Uhm... e' un'idea...
ma non e' ridondante a quel punto ?


Beh, sicuramente è ridondante ...

... nel senso che và utilizzata per ogni lettura da un campo del Recordset che accetti valori a Null.

Secondo mè il controllo dei valori a Null in fase di recupero dati dal DB è sempre da tenere in considerazione per evitare spiacevoli sorprese con i valori Null; quindi preferisco sempre utilizzare data type non variant nelle routine (Quando è possibile!).