PDA

View Full Version : روشی دیگر برای کار با فیلدهای BLOB



Vahid_moghaddam
پنج شنبه 20 دی 1386, 12:03 عصر
درباره ذخیره و بازیابی این نوع فیلدها در این سایت خوشبختانه زیاد بحث شده و روشهای مختلفی هم ارائه شده است. در اینجا سعی می شود روش دیگری معرفی شود.
فرض کنید جدولی داریم (در SQL) که شامل فیلدهای



ID (int)
IMAGE (image)
NAME (char)

می باشد و نام جدول Blob است.
فرم مورد نظر در پروژه هم کامپوننتی دارد از نوع TADOQuery با نام AdoQuery1 که به دیتابیس جدول Blob متصل است. برای نمونه می خواهیم عکسی با فرمت BMP را در جدول ذخیره کنیم:



procedure InsertBlob();
var
bS : TADOBlobStream;
Fs:TFileStream;
begin
with AdoQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('Select [id],[image],[name] from blob');
Open;
Insert;
FieldByName('Name').Value:='test';
bS := TADOBlobStream.Create( tblobfield(adoquery1.Fields[1]),bmwrite);
try
bS.Seek(0, soFromBeginning);
fs := TFileStream.Create('c:\1.bmp',fmOpenRead or fmShareDenyWrite);
try
bS.CopyFrom(fs, fs.Size)
finally
fs.Free
end;
finally
bS.Free
end;
Post;
Close;
end;
end;



در کد بالا به فیلد ID مقداری اختصاص نیافته است. اما پرکردن این فیلد هم شبیه به فیلد Name است.
حال فرض کنید می خواهیم یک تصویر ذخیره شده در جدول را که دارای Id=9 می باشد، بازیابی کنیم و از آن مثلا در یک TImage با نام Image1 استفاده کنیم:



procedure ReadBLOB();
var
bS : TADOBlobStream;
begin
with Adoquery1 do
begin
Close;
SQL.Clear;
SQL.Add('select [id],[image],[name] from blob where id=9');
Open;
try
bS := TADOBlobStream.Create( tblobfield(adoquery1.Fields[1]), bmRead);
image1.Picture.Bitmap.LoadFromStream(bs);
finally
bS.Free
end;
close;
end;
end;



بدیهی است از این روش برای ذخیره فایلهای مختلف می توان استفاده کرد.
نکته: کلاس TADOBlobStream شامل متدهای SaveToStream و SaveToFile می باشد.

hassan p.b
سه شنبه 09 مهر 1387, 14:18 عصر
با سلام
در اين فروم سعي نماییم بعد از چندين روز تلاش براي درست فهميدن تکنولوژي
BLOP
و ثبت صحيح تصوير در جداول اکسس اين مشکل را براي مشکل گشايي مطرح نمايم
در جستجوي سايت و ديدن بيش از 10 فروم مرتبط هنوز مشکل باقي است
اول من چند مثال دانلود کردم و مانند آنها هم رفتار مي کنم و لي جداول من ايراد مي گيرند و يا تصوير درست ضبطدر ديتابيسم نمي شود
اضافه نمايم که جدولم اکسس است و از ADO
استفاده مي نمايم
به مثال و قطعات کد و نيز يک مثال کامل براي رويت دوستان قرار مي دهم

hassan p.b
سه شنبه 09 مهر 1387, 15:00 عصر
اپ نشد
ولی در فرم مشابه دارم