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 :

Insérer des Jpeg dans une BDD


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier Avatar de KRis
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 232
    Points : 105
    Points
    105
    Par défaut Insérer des Jpeg dans une BDD
    Bonjour à tous,

    Voilà mon problème :
    Je charge un fichier JPG dans un Timage qui fait 10 Mo par exemple.
    J'insère ce JPG dans ma BDD Interbase par le code ci-dessous et la taille de celle -ci augmente de 67 Mo...
    Je suppose que mon image a été inséré sous format BMP.
    Est-il possible d'insérer au format JPG ? si oui comment ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      SQLQ.SQL.Add('insert into IMAGE (IMAGE) values (:IMAGE)');
     
      SQLQ.ParamByName('IMAGE').Assign(UneTimage.Picture.Bitmap);
     
      Try
        SQLQ.ExecSQL();
        Showmessage('Insertion OK');
      Except on E : Exception do
        begin
          Showmessage('Erreur : ' + E.Message);
        end;
    Merci d'avance !

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Peut être avec ParamByName('IMAGE').LoadFromFile(CheminImage,ftBlob) que ca te copiera le fichier dans la base sans le transformer

  3. #3
    Mjm
    Mjm est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 69
    Points : 122
    Points
    122
    Par défaut
    En ce qui me concerne j'utilise les Stream et je n'ai pas de pb, voici un exemple simplifié utilisant UIB (Avec IBX c'est quasi identique)
    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
    24
    25
    26
    27
     
    Procedure Image(N:Integer);
    Var  Stre : TMemoryStream;
         Trs: TjvUIBTransaction ;
    Begin
      Stre:=TMemoryStream.Create;
      Gen_Jpeg.SaveToStream(Stre);// (Gen_Jpeg est du type : TJpegImage et contient une image)
      DBImages.Connected:=True;
      Trs := TjvUIBTransaction.Create(Nil);
      Trs.DataBase:=DBImages;
      Trs.Options := [tpReadCommitted, tpNoWait, tpRecVersion];
      with TJvUIBQuery.Create(nil) do
        begin
          Transaction := Trs;
          Try
           SQL.Text := INSERT INTO T_SCAN (Numero,Image) VALUES (N,:Blob);// N est un N° défini dans mo applic)
           ParamsSetBlob('blob', Stre);
           Execute;
           Close(etmCommit);
          Finally
           Free;
          End;
        end;
      FreeAndNil(Stre);
      FreeAndNil(Trs);
      DBImages.Connected:=False;
    end;

  4. #4
    Membre régulier Avatar de KRis
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 232
    Points : 105
    Points
    105
    Par défaut
    merci beaucoup, je teste cette solution ;-)

  5. #5
    Membre régulier Avatar de KRis
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 232
    Points : 105
    Points
    105
    Par défaut
    La seule différence qui me pose problème avec le code de Mjm, c'est que moi j'ai une image dans un TImage, que je souhaite envoyer vers un TJpegImage, pour pouvoir insérer le Jpeg au format Jpeg dans la base...

    et voici comment je procède :
    je sauvegarde vers un TMemoryStream le TImage, que j'aimerais recharger dans un TJpegImage...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      UneTImage.Picture.Graphic.SaveToStream(UnStream);
      UnStream.Seek(0,soFromBeginning);
      UneTJpegImage.LoadFromStream(UnStream);
    mais ce code plante sur la dernière ligne avec le message suivant :
    "le Projet x.exe a déclenché la classe d'exception EJPEG avec le message 'Erreur JPEG #53'"...

    je n'arrive donc pas à recharger le Stream dans le TJpegImage... quelqu'un aurait - il une idée ?

    Merci d'avance.

  6. #6
    Membre régulier Avatar de KRis
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 232
    Points : 105
    Points
    105
    Par défaut
    J'ai réussi à contourner le problème précédent, en évitant les stream par le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      UneTJpegImage.Assign(UneTImage.Picture.Bitmap);
    j'obtiens donc un TJpegImage, parfait !

    mais un problème en soulevant un autre, je constate que si je charge un Jpeg trop gros (environ > 2Mo) , lors de l'affectation du paramètre pour insertion dans la base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      ...
      SQLQ.SQL.Add('insert into IMAGE (IMAGE) values (:IMAGE)');
      SQLQ.ParamByName('IMAGE').Assign(UneTJpegImage);
      ...
    j'ai le message d'erreur suivant : "le projet x.exe a déclenché la classe d'exception EOutOfResources avec le message "Espace insuffisant pour traiter cette commande"".... ?

    Quelqu'un aurait - il une idée ? cela ressemble à un problème de mémoire ?

  7. #7
    Membre régulier Avatar de KRis
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 232
    Points : 105
    Points
    105
    Par défaut
    Après plusieurs test, je commence à croire que ce problème "EOutOfResources" semble incontournable...

    l'insertion d'un gros Bitmap ne pose pas de problème, mais si je transforme ce Bitmap en Jpeg (par la classe TJpegImage), ce message apparait (pour les images dont la taille dépasse environ 2 Mo)...

    Voilà, si quelqu'un a une idée, ou a déjà été confronté à ce problème, n'hésitez pas à me le faire savoir !

    Merci.

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par KRis Voir le message
    Après plusieurs test, je commence à croire que ce problème "EOutOfResources" semble incontournable...

    l'insertion d'un gros Bitmap ne pose pas de problème, mais si je transforme ce Bitmap en Jpeg (par la classe TJpegImage), ce message apparait (pour les images dont la taille dépasse environ 2 Mo)...

    Voilà, si quelqu'un a une idée, ou a déjà été confronté à ce problème, n'hésitez pas à me le faire savoir !

    Merci.
    Je reconnais le problème de sauver un objet TJpegImage (qui est assigné un TBitmap). La solution pour moi était:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    bmp := TBitmap.Create;
    bmp.HandleType := bmDIB;
    bmp.Width := 4412; // for example
    bmp.Height := 5637;
    ... // some actual filling of the bmp takes place here
    jpg := TJpegImage.Create;
    jpg.Assign(bmp);
    jpg.SaveToFile('c:\tmp.jpg');
    Regarde aussi ici

  9. #9
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    et ici, sa te convient???

Discussions similaires

  1. Insérer des valeurs dans une BDD de manière périodique
    Par camillestx dans le forum Autres SGBD
    Réponses: 0
    Dernier message: 16/02/2015, 15h53
  2. Insérer des images dans une BDD Access
    Par polothentik dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 06/05/2008, 09h00
  3. Insérer des lignes dans une StringGrid
    Par da_latifa dans le forum Composants VCL
    Réponses: 1
    Dernier message: 26/09/2005, 12h45
  4. Comment afficher des JPEG dans une application Delphi ?
    Par Bouguennec dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/09/2005, 21h18
  5. insérer des images dans une bd postgresql
    Par ephet dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 20/01/2004, 09h18

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