Pb avec la fonction isNull qui marche pas

Pb avec la fonction isNull qui marche pas - VB/VBA/VBS - Programmation

Marsh Posté le 03-10-2003 à 13:03:47    

J'ai un gros problème en VB et  
 

Code :
  1. If Not IsNull(oRs.Fields(F_XMLDATA)) Then
  2.     If Not m_XMLDOM.loadXML(oRs.Fields(F_XMLDATA)) Then
  3.         Set m_XMLRoot = m_XMLDOM.documentElement
  4.     End If
  5. End If


 
A l'execution, j'ai une erreur qui survient à la ligne en rouge : "Utilisation incorecte de Null". Comment celà est-il possible alors que je vérifie juste avant que oRs.Fields(F_XMLDATA) n'est pas null? :pt1cable:


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 03-10-2003 à 13:03:47   

Reply

Marsh Posté le 03-10-2003 à 14:36:13    

A première vue, il semblerait que ça soit un pb avec les champs de type TXT d'une base oracle.
Moralité: VB sapu :o Oracle aussi :o


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 03-10-2003 à 14:39:23    

Sans blague, une merde à cause d'Oracle, étonnant [:rofl]
Putain, je suis bien content de ne plus avoir à travailler avec ce SGBD de merde... Franchement on en fait tout un plat, mais c'est loin d'être la panacée en matière de SGBD ! Fiable, oui, mais ergonomie pourrie :sarcastic:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 03-10-2003 à 14:44:45    

VB doit a aussi sa part de responsabilité, un variant Null qui renvoit faux à la fonction IsNull() spas normal :o
 
(mais oracle sapu quand même :o)


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 03-10-2003 à 16:28:29    

Quelle est la valeur de oRs.Fields(F_XMLDATA) donnée par le debugger (indépendament du message d'erreur) ?
 
Si tu passes oRs.Fields(F_XMLDATA) dans une variable avant de faire tes tests (sur la variable), ça donne la même chose ?
 
Je suppose que F_XMLDATA ne peut pas changer de valeur entre les deux tests si tu nous a donné le code complet, sinon c'est lui qui pourrait être Null.
 
 

Reply

Marsh Posté le 03-10-2003 à 17:38:59    

F_XMLDATA est une constante qui indique le nom du champs où est stocké le flux XML, donc il ne change pas.
Dans le debugger oRs.Fields(F_XMLDATA) a pour valeur Null et d'ailleurs, tout se passe nromallement si j'execute le code pas à pas :pt1cable:
En stockant le oRs.Fields(F_XMLDATA) dans une variable temporaire, j'avais aussi une erreur (me souviens plus si  c'était la même).
 
Enfin, j'ai réussi à régler mon pb, merci quand même :hello:


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 03-10-2003 à 18:52:11    

C'est quoi la solution finalement ? Pour aider ceux qui vont tomber sur ce problème et penseront trouver une aide à l'aide de la fonction "Chercher", à tort.

Reply

Marsh Posté le 03-10-2003 à 18:54:33    

La solution c'est de demander les fonctions à utiliser au collègue qui a déjà eu ce problème [:boidleau]
 
Je jette un coup d'oeil et je poste ça ;)


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 03-10-2003 à 18:59:39    

pour ouvrir le recorset il faut mettre adOpenKeyset dans le paramètre cursortype comme ci dessous:

Code :
  1. RS.Open sSQLRequest, ADOConnection, adOpenKeyset, adLockReadOnly, adCmdText


 
et il faut ensuite récupérer la valeur du champ par morceau comme dans la fonction ci dessous:
 

Code :
  1. Private Const CHUNK_SIZE As Long = 100
  2. Public Function readLongDataType(rs As Recordset, sFieldName As String) As String
  3.    
  4.     Dim lOffset As Long
  5.     Dim sChunk As String
  6.     Dim lFieldSize As Long
  7.     readLongDataType = ""
  8.     If Not rs.EOF Then
  9.         lOffset = 0
  10.         lFieldSize = rs(sFieldName).ActualSize
  11.         While lOffset < lFieldSize
  12.             sChunk = rs(sFieldName).GetChunk(CHUNK_SIZE)
  13.             readLongDataType = readLongDataType & sChunk
  14.             lOffset = lOffset + CHUNK_SIZE
  15.         Wend
  16.     End If
  17. End Function



---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 05-10-2003 à 12:03:38    

si je me rappelle bien, GetChunk est une fonction dédiée pour les champs de type Text ou Blob mais je ne m'en suis encore jamais servi. SQL Server powered, par chez nous :ange:


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed