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

Langage Delphi Discussion :

JPEG et champ BLOB


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 187
    Par défaut JPEG et champ BLOB
    Ola,

    Après avoir passé la journée à éplucher tous les forums (anglais et français), après avoir essayé toutes les solutions proposées, aucune de celles-ci n'arrivent à solutionner le stockage d'un jpeg dans un champ blob ains que sa récupération et son affichage dans un form.

    Si vous avez une solution, je suis preneur. Merci de ne pas m'envoyer sur un lien qui prétend solutionner le problème, je les ai tous fait (y compris ceux de developpez), aucun ne tient la route.

    A savourer, en ayant pris soin de prendre un whisky bien tassé pour ne pas exploser, les prétendues solutions du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Try
      Voici ma solution : blabla...
    Except
      Afficher : heu... ben non, ça ne fonctionne pas !
    End
    Authentique !



    JJE

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Certifié et fonctionnel

    J'ai écris cette QR à l'époque où j'ai eu besoin de mettre des documents de tout type dans une base de données et ca fonctionne très bien
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 096
    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 096
    Par défaut
    Selon la Version de Delphi
    Avant 200x - il faut convertir le Blob via l'objet TJPEGImage pour l'afficher dans un TImage
    Après 200x - le TComposant TImage gère nativement le JPEG, on peut espérer que le TDBImage aussi ! A vérifier, l'ancienne méthode fonctionne aussi !

    200x = 2007 ou 2009, je ne sais pas exactement

    C'est un sujet largement débattu, et aussi qui a été taggé , c'est que cela fonctionne

    As-tu testé dans un projet minimal, sans rien d'autres ?
    Juste la connexion DB, Datasource, Query, et TIMage ? sans rien qui parasite ?
    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

  4. #4
    Membre émérite
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 993
    Par défaut
    moi je les enregistre comme sa:
    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
    18
    19
    20
    21
    22
    23
    Var
      MsImg: TMemoryStream;
    Begin
          With IBQuery Do
          Begin
            Close;
            SQL.Text                        :=
              'INSERT INTO MY_COMPANY (IMG) VALUES (:Img)';
     
            // logo
            MsImg := TMemoryStream.Create;
            try
                //img is tbitmap
                If Assigned(IMG) Then
                  IMG.SaveToStream(MsImg);
              MsImg.Seek(0, 0);
              If MsImg.Size > 0 Then
                ParamByName('Img').LoadFromStream(MsImg, FtBlob);
            finally
              msimg.Free;
            end;
     
            ExecSql;
    la lecture en sens inverse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                If FieldValues['IMG'] <> NULL Then
                Begin
                  (FieldByName('IMG') As TBlobField).SaveToStream(MsImg);
                  Msimg.Seek(0, 0);
                  img.LoadFromStream(MsImg);
                End;

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 187
    Par défaut
    Hi ouiouioui,

    Idem, ta solution fonctionne pour des fichiers BMP mais pas pour des JPEG. Voici le message d'erreur :

    Exception EInvalidGraphic avec le message 'Image bitmap incorrecte'
    Voici mon code (le programme plante sur la commande LoadFromStream) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
              ...
              Image:=TMemoryStream.Create;
              JPEG:=TJPEGImage.Create;
              JPEG.LoadFromFile(FichierJPEG);
              JPEG.SaveToStream(Image);
              if Image.Size>0 then begin
                (FieldByName('Logo') As TBlobField).LoadFromStream(Image);
              end;
              ...


    JJE

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 187
    Par défaut
    Citation Envoyé par Rayek Voir le message
    Certifié et fonctionnel

    J'ai écris cette QR à l'époque où j'ai eu besoin de mettre des documents de tout type dans une base de données et ca fonctionne très bien
    Merci à tous pour vos réponses. Je vais tester vos suggestions.

    Déjà une petite réponse pour Rayek : ta solution fonctionne pour des fichiers bmp mais pas pour des jpg. L'image bmp est bien sauvée dans le champs BLOB, mais elle refuse toutefois de s'afficher dans un TDBImage lorsqu'on se positionne sur l'enregistrement.



    JJE

  7. #7
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 096
    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 096
    Par défaut
    Version de Delphi ?
    Pour le BMP, perso, cela fonctionne très bien, la preuve, le Projet de démo FishFactory livré depuis au moins depuis Delphi 3 en exemple !

    D7 : J'insiste sur la Conversion avec TJPEGImage de l'unité jpeg.pas + TImage
    D2009 : TDBImage théoriquement directement fonctionnel
    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

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 187
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Version de Delphi ?
    Pour le BMP, perso, cela fonctionne très bien, la preuve, le Projet de démo FishFactory livré depuis au moins depuis Delphi 3 en exemple !

    D7 : J'insiste sur la Conversion avec TJPEGImage de l'unité jpeg.pas + TImage
    D2009 : TDBImage théoriquement directement fonctionnel
    Hi ShaiLeTroll,

    Delphi XE.

    Effectivement, tout à l'air de fonctionner avec des BMP. Encore que, le TDBImage ne m'affiche rien lorsque je me repositionne sur l'enregistrement. Mais là, il faut que je regarde de plus près les propriétés du TDBImage. Je merde peut-être quelque part à ce niveau.



    JJE

  9. #9
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 187
    Par défaut
    Hi,

    J'ai trouvé une solution qui est vraiment simplicime :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ...
    ImageJPG:=TJPEGImage.Create;
    ImageBMP:=TBitMap.Create;
     
    ImageJPG.LoadFromFile(FichierJPG);
    ImageBMP.Assign(ImageJPG);
     
    FieldByName('Logo').Assign(ImageBMP);
    ...
    Bon maintenant, reste à trouver pourquoi ce foutu TDBImage ne veut pas m'afficher mon logo !
    Je vais tester dans un EXE séparé selon les conseils de ShaiLeTroll.



    JJE

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

Discussions similaires

  1. inserer un jpeg dans un champ blob
    Par colfire_dev dans le forum Bases de données
    Réponses: 14
    Dernier message: 01/11/2009, 07h32
  2. Réponses: 6
    Dernier message: 23/05/2006, 09h05
  3. [interbase] transferer un champ blob en par prog
    Par Harry dans le forum Bases de données
    Réponses: 4
    Dernier message: 26/02/2004, 10h39
  4. Update d'un champ BLOB
    Par ZeKlubb dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 17/01/2004, 16h04
  5. faire un insert pour un champ blob
    Par tripper.dim dans le forum InterBase
    Réponses: 10
    Dernier message: 02/05/2003, 16h56

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