bonsoire
g besoin d'inserer des images JPG dans une bdd mysql et les etraire au besoin
pour l'insertion g utiliser ce bout de code:

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
28
29
30
31
32
33
34
 
Var
  jpg : TJPEGImage;
  bmp : tbitmap;
  proportion : double;
begin
od.Execute;//ouvre la fenetre pour choisire l'image
IF (od.FileName<>'')then begin
                         flux:=TMemoryStream.Create;
                         jpg:=  TJPEGImage.Create;
                         bmp:=  tbitmap.Create;
                         jpg.LoadFromFile(od.FileName);//ouvrire l'image sure le disque dure dans une variable jpg
                         bmp.Assign(jpg);//transferer l'image de la variable jpg vers la variable bmp pour modification
                           try
                              proportion :=jpg.Height/jpg.Width;//calcule la proportion = (largeure % a la oteure) pour ne pas diformer l'image au redimonssionnement
                              bmp.Width:= 250;//affecter une largeure standard a l'image 250px comunne a toutes les images
                              bmp.Height := Round(250* proportion);//calcule de la hoteure selon les proportions de l'image oroginale
                              bmp.Canvas.StretchDraw(bmp.Canvas.ClipRect, jpg);//transferer la jpg dans le bmp redimonssionné (le moule)
                              jpg.Assign(bmp);//transferer l'image redimonssionnée du bmp vers la jpg par ecrasement de l'ancienne
                           finally
                              bmp.Free;//on libére la bmp
                           end;
                         jpg.CompressionQuality:=70;//on choisie le niveau de compression (la qualité)
                         jpg.ProgressiveEncoding:=true;//on choisie le mode de compression (rogressive plus performant)
                         jpg.Compress;//on effectue la compression
                         jpg.SaveToStream(flux);//on met l'image dans la variable flux pour l'enregistrer dans la bdd
                         jpg.SaveToFile('C:\Documents and Settings\Administrateur\Bureau\prette.jpg');//teste d'enregistrement sur disque dure
                         image1.Picture.Bitmap.Assign(jpg);
                         end;
query.SQL.Clear;
query.Sql.Add('Insert into tbl(n,img) Values('+edit2.Text+',:mon_image)');
query.Parameters.ParamByName('mon_image').LoadFromStream(flux, ftBlob);
query.ExecSQL;
end;
la variable Flux est un streammemory deglarée en globale
l'insertion se fait tres bien
pour l'extraction g fait
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
 
var jpg : TJPEGImage;
    ms: TMemoryStream;
begin
jpg := TJPEGImage.Create;
ms:=  TMemoryStream.Create;
 
  try
    TBlobField(ADOTable1.FieldByName('img')).SaveToStream(ms);
    ms.Position:=0;
    jpg.LoadFromStream(ms);
    image1.Picture.Bitmap.Assign(jpg);
  finally
    ms.Free;
    jpg.Free;
  end;
 
end;
mais ca marche pas, parceque g remarquer que meme si g spécifier le type du champ en Blob a l'insertion g comme apercue dans le dbgride VARBYTES, mais si je fait une insertion apartire du client graphique de mysql et je recompile sous delphi je vois que le champ est redevenue BLOB , e apres cela tout marche parfaitement et sans probleme
ou est le problemme ?
je m'excse pour les fautes d'orstographes je suis vraiment trop préssé pour soigner mon ecriture désolé pour les puristes