Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Interfaces de programmation
Interfaces de programmation Forum d'entraide sur l'utilisation des API Oracle : Pré-compilateurs, OCI, OCCI, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/04/2008, 15h23   #1
Membre chevronné
 
Avatar de randriano
 
Homme Rija Randriano
Inscription : janvier 2007
Messages : 984
Détails du profil
Informations personnelles :
Nom : Homme Rija Randriano
Localisation : Madagascar

Informations forums :
Inscription : janvier 2007
Messages : 984
Points : 729
Points : 729
Par défaut [ADO] Problème d'obtention de la taille du type BLOB dans un programme

Bonjour,

Le programme en question est écrit en VC++ utilisant ADO et voici le code
Code :
1
2
3
4
5
       DataTypeEnum nDataType = (DataTypeEnum)(long) FieldsPtr->GetItem("DATA_TYPE")->Value;
       _variant_t vtLong = FieldsPtr->GetItem("CHARACTER_MAXIMUM_LENGTH")->Value;
       long iLongueur = 0;
       IF(vtLong.vt != VT_NULL)
           iLongueur = (long)vtLong;
Le problème s'agit plutôt d'Oracle que de C++ c'est pourquoi je le pose ici.
Mon soucis est alors lors de l'obtention dans un VARIANT de la longueur max d'un champ d'une base de données, le problème c'est lorsque le champ est de type BLOB.
Ce code marche avec Sql Server mais avec oracle par ex, il y a erreur lors du "iLongueur = (long)vtLong", cela est capturé avec un try...catch... plus exactement lorsque vtLong est une grande valeur car nDataType = adBinary (le type binaire en base de données).

Même table avec même structure, ce code marche sous SQL SERVER qui utilise IMAGE au lieu de BLOB mais sous Oracle, ça crash, pourquoi
__________________
randriano.dvp.com
randriano est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2008, 08h18   #2
Membre chevronné
 
Avatar de randriano
 
Homme Rija Randriano
Inscription : janvier 2007
Messages : 984
Détails du profil
Informations personnelles :
Nom : Homme Rija Randriano
Localisation : Madagascar

Informations forums :
Inscription : janvier 2007
Messages : 984
Points : 729
Points : 729
Bien que le résultat obtenu par
Code :
_variant_t vtLong = FieldsPtr->GetItem("CHARACTER_MAXIMUM_LENGTH")->Value;
est une variante de type VT_R8 pour SQL Server (type IMAGE) et pour Oracle (type BLOB), faire
Code :
iLongueur = (long)vtLong;
Ca marche pour SQL Server mais pour Oracle, il faut :
Code :
iLongueur = (long)vtLong.dblVal;
Bien que c'est du C++, c'est utile de savoir cela pour utiliser Oracle convenablement !!
__________________
randriano.dvp.com
randriano est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h32.


 
 
 
 
Partenaires

Hébergement Web