PDA

View Full Version : سوال: تغییرات روی فیلد Image در دیتابیس



Bita.Jo
شنبه 30 مرداد 1389, 14:45 عصر
با سلام
من یک فیلد Image در جدولی دارم که User آنرا مشاهده کرده و تغییر می دهد.(SQl Server 2008, Delphi 2009)
از خواندن ونوشتن در دیتابیس با کمک MEmoryStream اسفاده کردم:
اشکالات:
1- اگر از Bitmap استفاده کنم حجم دیتا بیس شدیدا بالا می رود به ازای هر تصویر ساده 10 مگابایت که برای دیتابیس من با حجم حداقل1000 تصویرخیلی زیاد است:متعجب:
2- اگر از graphic استفاده کنم loadfromStream را خطا می گیرد(graphic را با Bitmap جایگزین کنم درست می شوددر حالی که هنگام ذخیره در جدول هم از Graphic استفاده می کنم)
(Access Violation At Address XXX)

if TBlobField(dmPhData.Query1.FieldByName('FileImage' )).BlobSize<>0 then
begin
Str:=TmemoryStream.Create;
try
TBlobField(dmPhData.Query1.FieldByName('FileImage' )).SaveToStream(Str);
Str.Position:=0;
خطا رخ می دهد:عصبانی++: image1.Picture.graphic.LoadFromStream(Str);
finally
Str.Free;
end;
end;


ذخیره در جدول بدون هیچ گونه مشکل

try
image1.Picture.graphic.SaveToStream(Str);
Str.Position:=0;
dmPhData.Query1.Edit;
TBLobField(dmPhData.Query1.FieldByName('FileImage' )).LoadFromStream(Str);
dmPhData.Query1.Post;
finally
Str.Free;
end;

ممنون می شوم راهنمایی کنید
بیتا

Delphi7_love
شنبه 30 مرداد 1389, 18:14 عصر
به نظر من اگر تعداد رکورد هات زیاده بهترین کار اینه که یه پوشه کنار برنامت داشنه باشی و عکس ها رو از اونجا بخونی چون حجم بانکت رو بالا می بره

mofrad
شنبه 30 مرداد 1389, 23:53 عصر
برای تصاویر jpg باید یک متغیر از نوع TJPegImage تعریف کنید وبعد :

JPEGImage.LoadFromStream(BlobStream)

کد زیر میتونه کمکت کنه:

procedure TfrmMain.DataSource1DataChange(Sender: TObject; Field: TField);
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;
end;