IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

[D7][TADOStoredProc] récupérer un flux XML


Sujet :

Bases de données Delphi

  1. #1
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut [D7][TADOStoredProc] récupérer un flux XML
    Bonjour,

    j'ai actuellement un soucis. J'ai une procédure stockée qui me ramène un flux XML de la sorte : SELECT * FROM TABLE FOR XML EXPLICIT (je suis sous SQL Server 2005). Le flux XML à la sortie est valide pas de problème.

    Par contre je voudrais savoir comment faire pour récupérer ce flux XML en utilisant un composant TADOStoredProc. En effet j'ai bien essayé de la manière classique en récupérant le RecordSet puis en faisant Fields[0].AsString mais je n'ai pas le résultat attendu, juste 'D'. Je me doute que pour ce cas là il doit y avoir une manipulation un peu particulière mais je n'ai pas réussit à trouver laquelle.

    Aussi si quelqu'un sait comment faire et pourrez me poster un exemple ce serait extrêmement sympa.

    Merci d'avance.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Bon alors j'ai un peu avancé sur mon problème en castant le seul champ retourné en tant que TBlobField et j'ai extrait le contenu avec un TMemoStream.

    J'arrive à obtenir une chaîne mais le format est des plus bizarre et me fait penser que le flux renvoyé est dans un format propriétaire ou quelque chose comme ça.

    J'arrive à voir quelques caractères qui correspondrait bien à mon flux mais le reste de la chaîne n'est pas formé correctement. Je ne peux stocker cette chaîne que dans un WideString ce qui supposerait que c'est un encodage unicode mais je ne suis pas parvenu à trouver un jeu de caractère permettant de décoder parfaitement la chaîne.

    Quelqu'un en sait-il plus sur ça ?
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Bon alors après analyse j'ai pu trouver une cause probable à mon soucis. Le postula de départ étant que j'arrivais pourtant à le faire sous VB mais passé avec le TADOStoredProc je n'y arrivais pas. En fait j'ai découvert qu'il s'agissait d'un problème de version de ADO.

    En effet VB utilisait la librairie 2.7 tandis que Delphi7 utilise la version 2.1 (unité ADOInt.pas). En regardant un peu plus profondément j'ai pu détecter que l'alias _Command sous la version 2.1 encapsule un Command15 tandis que ce même alias sous la version 2.7 encapsule un Commande25. Je suppose donc que la différence vient de là.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  4. #4
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Oui, ça vient probablement de là.
    Si je me souviens bien, il faut un ADO 2.5 ou 2.6 minimum (je ne sais plus quelle version exactement) pour pouvoir recupérer les flux XML de SQL Server.

    Je pense que ADOExpress de D7 ne doit pas être capable de récuperer le flux XML.

    Si tu utilisais ADO en VB, l'utilisation directe d'ADO (en utilisant les objets COM et pas l'encapsulation de Borland) ne doit pas te poser de problème.

    Pour ce cas précis, tu devrais appeler les objets COM directement. Au besoin, importe la TLB au lieu d'utiliser ADOInt.pas.

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Merci de ta réponse, c'est sûrement ainsi que je vais procéder en créant une petite classe pour faire ça, mais c'est pas une priorité pour le moment. Quand ce sera fait je la mettrais pour les autres utilisateurs de D7.

    Par contre du coup j'imagine que les versions supérieures à D7 doivent prendre en compte cette fonctionnalité ?
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  6. #6
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Par contre du coup j'imagine que les versions supérieures à D7 doivent prendre en compte cette fonctionnalité ?
    Je n'en sais rien, mais je ne parierais pas la dessus. J'utilise BDS2006. ADOInt.pas correspond toujours à ADO 2.1

    Je ne crois pas qu'ADO et les fonctionnalités spécifiques à SQL Server soient une priorité pour CodeGear. Ils misent tout sur dbExpress et BDP.NET.

    A mon avis, ce n'est pas prêt de changer.

    Personnellement, lorsque j'utilise ADO c'est toujours directement à partir de la TLB.

Discussions similaires

  1. Récupérer un flux xml - je ne comprends rien
    Par Mathiou59 dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 12/02/2013, 11h01
  2. [PHP 4] Récupérer le contenu d'un flux XML en PHP
    Par Tony36 dans le forum Langage
    Réponses: 9
    Dernier message: 24/08/2010, 17h23
  3. Récupérer un flux XML dans le navigateur
    Par g0g059 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 27/07/2010, 10h20
  4. comment récupérer le flux xml généré par le ws
    Par didine6393 dans le forum Services Web
    Réponses: 1
    Dernier message: 25/10/2009, 19h15
  5. [SimpleXML] récupérer une vidéo dans un flux xml
    Par rezareza dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 17/11/2007, 16h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo