Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
VB - Utilizzo non valido di Null
Nuovo argomento   Rispondi    Indice del forum -> Programmazione
Precedente :: Successivo  
Autore Messaggio
Azel
Comune mortale
Comune mortale


Registrato: 12/03/07 08:57
Messaggi: 4

MessaggioInviato: 29 Feb 2008 11:25    Oggetto: VB - Utilizzo non valido di Null Rispondi citando

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
Profilo Invia messaggio privato
GrayWolf
Dio maturo
Dio maturo


Registrato: 03/07/05 17:24
Messaggi: 2325
Residenza: ... come frontiera i confini del mondo...

MessaggioInviato: 01 Mar 2008 12:32    Oggetto: Rispondi citando

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
Profilo Invia messaggio privato
Azel
Comune mortale
Comune mortale


Registrato: 12/03/07 08:57
Messaggi: 4

MessaggioInviato: 01 Mar 2008 21:45    Oggetto: Rispondi

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%... Surprised


Grazie ciao
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Programmazione Tutti i fusi orari sono GMT + 2 ore
Pagina 1 di 1

 
Vai a:  
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