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

C++Builder Discussion :

Écrire et Lire un champs BLOB dans MySQL [Base de donnée]


Sujet :

C++Builder

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Par défaut Écrire et Lire un champs BLOB dans MySQL
    Bonjour à tous,

    Je cherche une solution à mon problème et je viens de découvrir votre FAQ. J'ai regardé mais je n'ai pas trouver de solution à mon problème dans la FAQ.

    Voici mon problème :

    Je travail avec CodeGear C++Builder 2009 et je voudrais lire une image JPEG que j'ai sauvegardé dans un fichier d'une base de données (je suis débutant en programmation C++).

    Je n'ai pas de problème à sauvegarder l'image (à partir de mon application C++) et je suis capable de lire l'image à l'aide des outils pour MySQL (MySQL Query Browser) ce qui prouve qu'elle est bien sauvegardée dans ma base de données).

    Lorsque je veux la lire j'ai toujours une violation d'accès.

    Voici mon code, Est-ce quelqu'un peu m'aider?

    Code pour écrire l'image. Ça fonctionne très bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //****************************
    TField *BlobField;
    TStream *BS;
     
    DataModule2->QSQLVide->Edit();
     
    BlobField = DataModule2->QSQLVide->FieldByName("Image");
    BS = DataModule2->QSQLVide->CreateBlobStream(BlobField,bmWrite);
    Image1->Picture->Graphic->SaveToStream(BS);
     
    DataModule2->QSQLVide->Post();
     
    //******************************
    Code pour la lecture de l'image, Erreur violation d'accès :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //***************************************
    TField *BlobField;
    TStream *BS;
     
    BlobField = DataModule2->QSQLVide->FieldByName("Estampe");
    BS = DataModule2->QSQLVide->CreateBlobStream(BlobField,bmRead);
    Image2->Picture->Graphic->LoadFromStream(BS); => aussitôt que j'exécute cette ligne j'ai l'erreur de violation d'accès
    //********************************************

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 071
    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 071
    Par défaut
    Vérifie la Position du Stream, il faut qu'elle soit à Zéro avant de le Charger
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BS->Seek(0, soBeginning);
    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 du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Par défaut Test du Seek
    J'ai essayé le Seek et j'ai toujours la même erreur => accès de violation à l'adresse 0.

    J'ai tracé le code avec le débugger et les adresses de BS et BlobField ne sont pas à NULL et elles sont modifiées lors de l'affectation. Donc, lors de l'appel de SaveToStream(BS), le paramètre n'est pas NULL.

    Voici une précision sur le message d'erreur que je reçois aussitôt que l'affection à Image2 => Violation d'accès à l'adresse 0001ADE... dans le module test.exe. Lecture de l'adresse 00000000.

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 071
    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 071
    Par défaut
    Ah, ton objet est NULL !
    Ce n'est pas l'objet Graphic qui est à nil par hazard ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image2->Picture->Bitmap->LoadFromStream(BS);
    en Delphi 6

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
               DummyJPEg := TJPEGImage.Create(); // TJPEGImage dans Jpeg
               try
                  DummyJPEg.LoadFromStream(DummyStream);
                  Image2.Picture.Bitmap.Assign(DummyJPEg);
              finally
                  DummyJPEg.Free();
               end;
    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

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Par défaut Le C++ c'est magique
    Il suffisait d'allouer de la mémoire et tout fonctionne.

    Le code est un peu différent en C++ qu'en Delphi mais ça fonctionne.

    Merci beaucoup pour ton aide ShaiLeTroll, c'est très apprécié.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    TJPEGImage *test;
     
    test = new TJPEGImage;
    test->LoadFromStream(BS);
    Image2->Picture->Graphic = test;
    test->Free();

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 17/02/2009, 18h01
  2. [MySQL] insertion dans un champ Blob/Text mysql
    Par solaris13 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/11/2008, 20h07
  3. taille max d'une photo jpg dans un champ blob de mysql
    Par zidenne dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 04/10/2006, 09h42
  4. Mettre un champ Blob dans un Group By
    Par WebPac dans le forum SQL
    Réponses: 1
    Dernier message: 17/08/2005, 18h03
  5. Affectation d'un champs blob dans une var de type TStrings
    Par Andry dans le forum Bases de données
    Réponses: 1
    Dernier message: 16/03/2005, 18h26

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