Precedente :: Successivo |
Autore |
Messaggio |
Azel Comune mortale

Registrato: 12/03/07 08:57 Messaggi: 4
|
Inviato: 29 Feb 2008 11:25 Oggetto: VB - Utilizzo non valido di Null |
|
|
Buongiorno a tutti,
ora vi pongo una questione veramente spinosa, perchè il mio errore non è il "classico" "utilizzo non valido di Null" ma qualcosa di particolare. vi spiego:
l'istruzione è questa:
Codice: | m_PaymentInfo.sInitiative = Nz(!ME_APP_INITIATIVE, "")
(dentro ad un with rs ovviamente) |
dove la funzione Nz è :
Codice: | Public Function Nz(vntValue As Variant, Optional vntDefault As Variant = Empty) As Variant
If IsNull(vntValue) Then
Nz = vntDefault
Else
Nz = vntValue
End If
End Function |
sembrerebbe tutto ok e infatti sul mio computer funziona, ma ho installato il programma sul DB di un amico e se (sul suo pc) il campo del DB è valorizzato a Null, funziona, altrimenti (c'è scritto qualcosa o stringa vuota) mi da l'errore "utilizzo non valido di Null".
Ora... la versione MDAC è la stessa, abbiamo entrambi un DB Mysql con entrambi lo stesso driver di connessione e utilizziamo la stessa stringa di connessione.
Io ho W2k e lui W2k srv.
So che il problema è nel programma, perchè se lui punta al mio DB gli da lo stesso errore, se io punto al suo, invece, mi va tranquillamente.
Un'altro particolare molto strano, è che io utilizzo altri campi di testo (LONGTEXT) ma solo su quello mi da errore.
Avete una qualche ideuzza per aiutarmi??
Grazie 1000 in anticipo |
|
Top |
|
 |
GrayWolf Dio maturo


Registrato: 03/07/05 17:24 Messaggi: 2325 Residenza: ... come frontiera i confini del mondo...
|
Inviato: 01 Mar 2008 12:32 Oggetto: |
|
|
E' solo un'ipostesi, ma penso che dipenda dal momento in cui il parser di VB entra in funzione [ricorda che i programmi sono rilocabili].
Anziché usare una funzione, attiva il parser prima di esaminare il contenuto della colonna.
Prova con:
Codice: |
with rsXYZ
...
...
m_PaymentInfo.sInitiative = "" & .Collect("ME_APP_INITIATIVE")
...
...
end with
|
NOTE:
.1 la collect è un metodo non documentato ed è più veloce del 30%
.2 "" da usare con i campi alfanumerici, 0 per i campi numerici
.3 la Collect accetta anche l'indice oltre al nome di colonna, per intenderci:
Codice: |
dim mydest as variant
redim mydest(rsXYZ.Fields.Count)
for f = 0 TO rsXYZ.Fields.Count -1
...
...
mydest(f) = "" & .Collect(f).value
'oppure
mydest(f) = 0 & .Collect(f).value
...
...
next
|
|
|
Top |
|
 |
Azel Comune mortale

Registrato: 12/03/07 08:57 Messaggi: 4
|
Inviato: 01 Mar 2008 21:45 Oggetto: |
|
|
Innanzitutto grazie della risposta.
Sono riuscito a trovare da solo la soluzione in un lungo spulciare della rete.
Il problema a quanto ho capito è dovuto ad un activeX che sembra cachare il valore (non ci ho capito molto bene, comunque sul sito della Microsoft lo spiega meglio).
Per evitare il problema è sufficente settare il recordset così:
rs.CursorLocation = aduseClient
Comunque questa cosa della Collect me la devo guardare bene, se è vero che è più veloce del 30%...
Grazie ciao |
|
Top |
|
 |
|
|
Non puoi inserire nuovi argomenti Non puoi rispondere a nessun argomento Non puoi modificare i tuoi messaggi Non puoi cancellare i tuoi messaggi Non puoi votare nei sondaggi
|
|