probleme VARBYTES au lieu de BLOP !
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:
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:
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 ?8O
je m'excse pour les fautes d'orstographes je suis vraiment trop préssé pour soigner mon ecriture désolé pour les puristes :aie: