PDA

View Full Version : ذخیره تصاویر Jpeg توسط MemoryStream



SirMehdi
پنج شنبه 25 مرداد 1386, 10:15 صبح
من تو ذخیره تصاویر Jpeg با کدهای دلفی واستفاده از memoryStream در بانک اطلاعاتیSql Server و بازیابی آنها از بانک به مشکل بر خوردم میخواستم یه Help یا Sample معرفی کنید, تو نوشتن کد با memoryStreamدر دلفی :افسرده:

mohammad9531
پنج شنبه 25 مرداد 1386, 22:30 عصر
دوست عزیز اول در databaseخود یک فیلد از نوع image درSql ویا Ole Object در ACCESS تعریف می کنی بعد در فرم خود یک کامپونت از نوع image (واقع در پانل ADDItonal)و یک OpenPictureDialog و یک SpeedButton برای آوردن تصویر اضافه کرده و در Buttom ذخیره این کد را می نویسی:
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT name,family,AKS FROM tasvir WHERE SH_DANESHJO='''+Edit1.Text+'''and sh_term='''+ComboBox1.Text+'''');
ADOQuery1.Open;
if ADOQuery1.RecordCount=0 then
begin
ADOQuery1.AppendRecord([Edit1.Text,Edit2.Text,OpenPictureDialog1.FileName]);
ADOQuery1.Insert;
end;
در SpeedButton نیز ای خط را می نویسی
if OpenPictureDialog1.Execute then
begin
Image1.Picture.LoadFromFile(OpenPictureDialog1.Fil eName);


و برای آوردن عکس مورد نظر یک dbGrade روی فروم آورده و در event مربوط به DBGrade یعنی CELLCLICk این متن را می نویسی
Image1.Picture.LoadFromFile(ADOQuery1.FieldValues['pic']);
لازم به ذکر است قبل از نوشتن باید دلفی را با بانک اطلاعاتی ارتباط دهی
yaralioglan@yahoo.com

SirMehdi
جمعه 26 مرداد 1386, 13:48 عصر
کس نخارد پشت من جز ناخن انگشت من,,:لبخندساده:

بالاخره به جواب رسیدم بعد از یه جستجوی طولانی تو سایت های دلفی
البته هیچ کجا کد کاملشو نیافتم اما از هر گوشه ای به یه قسمت از جواب رسیدم,
از mohammad9531 عزیز هم بخاطر جوابشون متشکرم اما این روشی که گفتین برای ذخیره آدرس عکس و خواندن از همون آدرسه و وابسته به مکان فایل و هارد و... دیگه هست من میخوام خود فایل عکس رو تو دیتابیس ذخیره کنم,
من کدی که تونستم بهش برسم رو براتون مینویسم و از مدیران سایت خواهش میکنم که اگه کد بهینه تری میشه نوشت راهنماییم کنن

برای ذخیره عکس:
باید از MemoryStream استفاده کنید


procedure TForm1.btnSaveClick(Sender: TObject);
var StreamPic :TMemoryStream;
begin
dlgOpen1.Execute;
StreamPic:= TMemoryStream.Create;
try
StreamPic.LoadFromFile(dlgOpen1.FileName);
ds2.DataSet.Insert;
TBlobField(ds2.DataSet.FieldByName('Picture')).Loa dFromStream(StreamPic);
ds2.DataSet.Post;
finally
StreamPic.Free;
end;//try
end;



برای خواندن از دیتا بیس:
باید از MemoryStream,JpegImageاستفاده کنید.


procedure TForm1.btnShowClick(Sender: TObject);
var StreamPic2 :TMemoryStream; IP : TJPEGImage;
begin
StreamPic2:= TMemoryStream.Create;
IP:= TJPEGImage.Create;
try
TBlobField(ds2.DataSet.FieldByName('Picture')).Sav eToStream(StreamPic2);
StreamPic2.Seek(0, soFromBeginning);
IP.LoadFromStream(StreamPic2);
img2.Picture.Graphic:= IP;
img1.Picture.Graphic:= IP;
finally
StreamPic2.Free;
IP.Free;
end;//try
end;

راستی باید Jpeg رو هم تو برنامه Use کنید.

پیروز باشید و سربلند,
بدرود,:بوس:

پرواز
شنبه 27 مرداد 1386, 01:14 صبح
سلام
کدها رو تو پنجره مخصوص کد بذارید تا خوانا باشه.
مرسی.

SirMehdi
شنبه 27 مرداد 1386, 18:15 عصر
انجام شد, ممنون

vcldeveloper
دوشنبه 29 مرداد 1386, 17:50 عصر
اگر در همین سایت جستجو می کردید، کد مشابه ایی را برای این کار پیدا می کردید. در ضمن، هیچ وقت متد Execute یک DialogBox را به آن شکلی که در کد ذکر کردید، استفاده نکنید، چون در کد شما، حتی اگر کاربر دکمه Cancel را هم کلیک کند، کد بعد از dlgOpen1.Execute اجرا می شود. باید بنویسید:


if dlgOpen1.Execute then
begin
// Your code...
end;

SirMehdi
سه شنبه 13 شهریور 1386, 13:32 عصر
من جستجو کردم نیافتم, اگه سراغ دارید بی زحمت لینکش رو بدین, بابت Execute هم تشکر

vcldeveloper
سه شنبه 13 شهریور 1386, 17:09 عصر
من جستجو کردم نیافتم, اگه سراغ دارید بی زحمت لینکش رو بدین
TBlobField را جستجو کنید.