Comment afficher une image JPG qui se trouve dans une bdd (sans l'enregistrer sur le HD)?
Le composant DBImage ne semble gérer que les BMP.
Merci
Comment afficher une image JPG qui se trouve dans une bdd (sans l'enregistrer sur le HD)?
Le composant DBImage ne semble gérer que les BMP.
Merci
Ce qu'il me faudrait idéalement c'est un composant DBImage qui gère les JPG.
Pour l'instant j'ai regardé sur torry.net (entre autres) et j'ai pas trouvé.
Voila un petit bout de code tiré d'un de mes programmes et qui affiche une image jpeg dont le nom est enregistré dans la base. Ce n'est pas le fichier jpeg qui est dans la base mais seulement son nom pour des raisons de taille..
En espérant que cela convienne
Avant j'ai bien sur déclaré comme variable :
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 {Chargement du fichier jpg sur modification du Titre du Livre} procedure TForm1.DBEdit1Change(Sender: TObject); Var nom_image : string; begin nom_image:=Datamodule2.TLivre.FieldbyName('ch_image_livre').AsString; if nom_image = '' then begin jp:=nil; Image2.Picture.assign(jp); end else begin jp:=nil; Stream:=nil; jp:=tjpegimage.Create; jp.loadFromFile(Datamodule2.TLivre.FieldByName('ch_image_livre').AsString); stream:=tmemorystream.Create; jp.SaveToStream(stream); stream.Position:=0; jp.LoadFromStream(Stream); Image2.Picture.assign(jp); end; end;
jp : TJpegImage;
Stream : TMemoryStream;
+ jpeg dans mon uses.
Nope, c pas ce que je veux, ca c facile :p, c'est la technique sue j'utilisait avant en fait, depuis pour utiliser rave report j'ai été contraint d'intégrer les photos dans la BDD. (a 100% dans la bdd et pas juste le lien).
La seule technique que j'ai trouvé c'est d'enregister le contenu du champ avec un save to file et de le recharger de suite après avec la meme technique que toi.
La seule chose c'est que ce n'est pas très propre ni très efficace de passer par un fichier temporaire. J'aurais préféreé un systeme tout en code donc je suis toujours preneur si quelqu'un trouve un composant equivalent au DBImage qui prendrait en compte les fichiers JPG.
Le composant EDBimage fait ca tres bien, avec sources freeware.
peut etre sur torry, je ne sais plus.
Je crois que c'est ici : http://delphi.about.com/library/bluc/vcl/edbimage.zip
.
J'ai pour les BMP !! Pour insere les images
Et pour la recupere
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 With requete_query do Begin Active:=False; Sql.clear; Sql.Add('Insert into ta_table(id_ta_table, images) ' +' Values(3, :mon_image)); {On lui donne le chemin de l'image a charger dans la base} Parameters.ParaByName('mon_image').LoadFromFile(le_chemin, ftBlob); ExecSql; End;
Si tu trouve pour les JPG previens Moi j'en ai aussi besoin
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 MS:TMemoryStream; Begin MS:=TMemoryStream.Create; With Query_recupere Do Begin Active:=false; Sql.Clear; SQl.Add('Select image from ta_table where id_ta_table=3'); ExecSql; Active:=True End; Try {On auve dans leStream} TBlobField(Query_recupere .FieldByName('image')).saveToStream(MS); {On se déplace au début du Stream} MS.Position:=0; {On affiche l'image} DBImage.Picture.Bitmap.LoadFromStream(MS); Finally MS.Free; {On libere la memoire du Stream} End;
En fait la seule technique qui semble marcher, et pas si lent que ca en fait, c'est d'utiliser le disque dur en temporaire avec un saveToFile sur le champ puis un loadFromFile sur le picture d'un Timage.
Partager