PDA

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 نوشته شده بوده و فیلده مال اونه میتونی پاکش کنی