View Full Version : سوال: استخراج عکس از دیتابیس
Fastdesign
چهارشنبه 12 بهمن 1390, 21:00 عصر
سلام
تعدادی عکس در دیتابیس دخیره کردم و حالا می خوام بعضی از عکس ها را از دیتابیس استخراج کنم و روی هارد بریزم.
یک متغییر سراسری از به این صورت تعریف کردم .myBlobField: TBlobField;
این هم کدهای استخراج عکس از دیتابیس :
begin
myBlobField := ADOQuery1image;
myBlobField.SaveToFile(SavePictureDialog1.FileName );
myBlobField.Free;
ADOQuery1.Close;
ADOQuery1.Open;
end;
مشکل اینجاست که اگه بیش از عکس از دیتابیس استخراج کنم خطا میده .
برای یک عکس هیچ مشکلی نداره .
این هم خطا :
81875
به نظر شما مشکل از چیه ؟
mohsen24000
چهارشنبه 12 بهمن 1390, 21:16 عصر
اشکال از این خطه: myBlobField.Free;
کدتون رو به کد زیر تغییر بدید:
TBlobField(AdoQuery.FieldByName('pic')).SaveToFile (filename);
نیازی به تعریف یک متغییر برای فیلد Blob نیست. از روش بالا میتونید استفاده کنید.
بنده با همین روش لینک دهی و بازیابی تصویر انجام میدم و مشکلی پیش نمیاد...
Fastdesign
چهارشنبه 12 بهمن 1390, 21:36 عصر
در قسمت FileName باید چه مقداری قرار بدم ؟
اگه میشه یک نمونه کد کامل بزارید .
سعید صابری
چهارشنبه 12 بهمن 1390, 21:43 عصر
نام فایل برای ذخیره در هارد دیسک شما
Fastdesign
چهارشنبه 12 بهمن 1390, 22:29 عصر
حالا اگه بخوام عکس ذخیره شده در دیتابیس را در یک کنترل Image نمایش بدم باید چکار کنم ؟
Image1.Picture.LoadFromFile();
دوستان راهنمایی کنید.
mohsen24000
چهارشنبه 12 بهمن 1390, 22:34 عصر
img.Assign(TGraphicField(QryPic.FieldByName('pic') ));
img_pic.Picture.Graphic.Assign(Tgraphicfield(dbpic s.FieldByName('pic')));
Fastdesign
چهارشنبه 12 بهمن 1390, 22:45 عصر
این کد را نوشتم ولی وقتی اجراش می کنم می گه : Cannot assign a TblobField to a timage
mohsen24000
چهارشنبه 12 بهمن 1390, 22:48 عصر
کد دوم نباید مشکلی داشته باشه!؟
فرمت عکسهایی که داخل بانک دارید چیه!؟
procedure TFmain.btnHandClick(Sender: TObject);
begin
img_pic.Picture.Graphic.Assign(Tgraphicfield(dbpic s.FieldByName('pic')));
end;
Fastdesign
چهارشنبه 12 بهمن 1390, 22:51 عصر
فرمتشون Jpg است
سعید صابری
چهارشنبه 12 بهمن 1390, 22:54 عصر
یک جستجو میزدی زودتر به جواب کامل میرسیدی
کد زیر از جناب احدی:
var
BlobStream: TStream;
JPEGImage: TJPegImage;
Ext: string;
begin
if (Field = nil) or (Field = ADOTable1Image) then begin
if ADOTable1Imagetype.AsString <> '' then begin
BlobStream := ADOTable1.CreateBlobStream(adotable1Image,
bmRead);
try
Ext := UpperCase(adotable1ImageType.AsString);
if Ext = '.BMP' then
Image1.Picture.Bitmap.LoadFromStream(BlobStream)
else if Ext = '.JPG' then begin
JPEGImage := TJPEGImage.Create;
try
JPEGImage.LoadFromStream(BlobStream);
Image1.Picture.Assign(JPEGImage);
finally
JPEGImage.Free;
end;
end;
finally
BlobStream.Free;
end;
end else
Image1.Picture := nil;
end;
Fastdesign
چهارشنبه 12 بهمن 1390, 23:05 عصر
اینجا بجای Field باید فیلد عکس را قرار بدم یا فیلد پسوند عکس یا چیز دیگه؟
if (Field = nil) or (Field = ADOTable1Image) then begin
سعید صابری
چهارشنبه 12 بهمن 1390, 23:13 عصر
این کد در رویداد Datachange از datasource نوشته شده بوده و فیلده مال اونه میتونی پاکش کنی
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.