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 089
    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 089
    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 089
    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 089
    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