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 :

Exporter champ Bytes dans un fichier XML


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Inscrit en
    Avril 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 209
    Par défaut Exporter champ Bytes dans un fichier XML
    Bonjour tout le monde,

    Je possède une base de données SQLite, liée à Delphi via un ODBC, et dans laquelle des images bitmap sont stockées.

    J'aimerais récupérer ces images sous forme de tableau de byte dans Delphi pour pouvoir par la suite des enregistrer dans un document XML.

    Je rencontre un problème lors de la lecture des données

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Type
        TAOF = Array Of Byte;
     
    Var
       ByteArr : TAOF;
       BytesImage : TBytesField;
     
    ...
     
    //Requête sur wwQuery1 : SELECT BLOBIMAGE FROM TEST
     
         wwQuery1.First;
     
         BytesImage:=wwQuery1.FieldByName('BLOBIMAGE') As TBytesField;
         SetLength(ByteArr,BytesImage.DataSize);
         BytesImage.GetData(ByteArr);
    La propriété BytesImage.DataSize retourne 128 bytes alors que le bitmap chargé dans le champ BLOBIMAGE a une taille d'environ 2Ko.

    Comment cela se fait-il? Comment puis-je charger la totalité du champ bytes?

    J'ai pensé à une sorte de compression au moment du stockage de l'image dans SQLite mais comme dans Delphi, l'image apparaît au format Bytes, comment décompresser le tout?

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    Tu dois avoir des limitations par défaut sur la longueur d'un champ BLOB avec SQLite, surement encore une histoire de paramètrage ODBC
    Compare DataSize et Size, pour un champ BLOB, c'est censé être pareil

    Pour le Fichier XML, utilise EncdDecd.EncodeStream, cela convertira ton BLOB BitMap sous la forme d'une chaine Base64 qui sera mieux supporté par XML qu'un binaire Brut, cela augmente parcontre la taille par 4

    Perso, lorsque j'utilise du BLOB, je zippe tout en level 9 !

    Faudrait mieux avoir un TBlobField

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TBlobField(Data.FieldByName('...')).SaveToStream(Stream);
    EncdDecd.EncodeStream(Stream, StreamText);
    Node.Value := StreamText.DataString;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre éclairé
    Femme Profil pro
    Inscrit en
    Avril 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 209
    Par défaut
    Re !

    encore une fois merci de ta réponse.

    J'ai vérifier DataSize et Size et ils sont les deux à 128 octets. Je n'ai rien du côté de la configuration de mon ODBC concernant les tailles des BLOB.

    Bon j'ai laissé tombé l'ODBC pour un moment et continue mes tests avec UNIDac qui me pose moins de problèmes (Un champs BLOB est lu comme BLOB et non comme BYTES avec l'ODBC).
    J'ai essayé ta solution avec les stream.

    Le code est exécuter sans erreur mais comme valeur pour mon image dans le fichier XML, j'ai une chaîne vide, alors que j'ai bien une image chargée dans le champs (En tout cas, sqliteadmin m'en trouve une)

    En plus, UNIDac me retourne des tableaux d'environ 2000 bytes, ce qui correspond aux 2ko de mon image

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    Joue avec Seek pour rembobiner le Stream avant Encode
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Ecrire un champ email dans un fichier XML utilisant JDOM
    Par pomolo11 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 06/12/2013, 09h54
  2. [SGBDR] [MySQL] Exporter des données dans un fichier XML
    Par fedora8 dans le forum XQUERY/SGBD
    Réponses: 1
    Dernier message: 24/01/2011, 15h31
  3. [XML] Extraire la valeur d'un champ dans un fichier XML
    Par dinozo13 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 06/10/2008, 12h53
  4. export d'un tableau byte dans un fichier excel
    Par JauB dans le forum ASP.NET
    Réponses: 4
    Dernier message: 22/04/2008, 12h36
  5. exporter une BD dans un fichier XML
    Par newsafi dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 05/08/2005, 10h54

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