View Full Version : مشکل در ذخیره كردن عکس در ديتابيس
  
Babak-Aghili
دوشنبه 24 اسفند 1383, 08:39 صبح
سلام.
   جهت ذخیره عکس !! سرچ کردم و از روش آقای کرامتی به این صورت استفاده کردم ولی متاسفانه خطا میگیره :  ( کمک کنید لطفا ) 
جدول اکسس و فیلد OLE است مثلا بنام pic .
<span dir=ltr>
 
if (OpenDialog.Execute) then begin
DBImage1.LoadFromFile(OpenDialog.FileName);
Table.Post;
end;
</span>
که دراینجا DBImageهم به فیلد عکس بایند شده است.
samandari
دوشنبه 24 اسفند 1383, 09:16 صبح
با سلام
من قبلا این مشکل رو داشتم ولی مشکل رو به شکل زیر حل کردم 
شما میتوانید با استفاده از یک Image  و متد Loadfromfile تصویر مورد نظرتان را در آن نمایش دهید سپس تصویر موجود در داخل این Image را به Clipboard  منتقل کنید و سپس اطلاعات موجود در Clipboard  رو به DbImage منتقل کنید
دوشنبه 24 اسفند 1383, 11:20 صبح
قبل از دادن مقادیر آیا  insert  یا   Append  یا edit  کردین (گفتم شاید چون تو کدتون نیست احتمالا مشکل همین جا باشه ).
ولی ای کاش متن  error   ها رو بنویسین .
تا ببینیم چی مشکلی داره ولی الان n  تا مشکل به ذهنم میرسه که هر کدومش ممکنه همون باشه .
شاید احتمالا داری عکس از نوع  غیر از  bitmap  میدی اگه این کارو میکنی مشکل همین جاست چون  dbimage  فقط نوع  bitmap   رو قادر به نمایش هست برا حل این مشکل یک سرچی تو سایت بزن کامپوننتش رو گذاشتم اون فقط نوع  jpeg , jpg   رو میگیره .
 :موفق:
Babak-Aghili
دوشنبه 24 اسفند 1383, 13:47 عصر
به روش آقای سمندری :
اینجوری میگین دیگه ؟  اول :
<span dir=ltr>
 
  if(OpenDialog1.Execute) then
  begin
    Image1.Picture.LoadFromFile(OpenDialog1.FileName);
    Clipboard.Assign(Image1.Picture);
    DBImage1.PasteFromClipboard;
  end;
</span>
   و بعدش هم که Table1.Post
خب این   خطا  را میگیره : 
Non BLOB Column in Table Required to Perform Operation   :mad: 
  به روش آقا دادوند :  
رییس ! از اینهایی که میگی نیست ! فکری دگر کن  :oops: 
اون کامپوننته را هم من که ندیدم ... اگه خودت ... دستت درست  :تشویق:
hr110
دوشنبه 24 اسفند 1383, 14:23 عصر
یک راه سریع هم میتونه این باشه:
لود کردن فایل:
  TBlobField(ADOTable1.FieldByName('Pic')).SaveToFil e('1.bmp');
  Image1.Picture.LoadFromFile('1.bmp');
ذخیره فایل : 
  TBlobField(ADOTable1.FieldByName('Pic')).LoadFromF ile('1.bmp');
Babak-Aghili
دوشنبه 24 اسفند 1383, 18:46 عصر
ممنون آقای ربیعی .  روش شما را هم چک میکنم .  ولی ای کاش یک نفر مشکل روش قبلی را هم بررسی میکرد.
 :flower:
Babak-Aghili
دوشنبه 24 اسفند 1383, 22:18 عصر
ببخشید .... روش شما عکس را در   فایل  ذخیره کرده ؟   
یعنی از روی هارد میتوان به آن دسترسی داشت ؟ 
-----
 نه !   عکس فقط در فیلد دیتابیس ذخیره شود .....  SOS
hr110
دوشنبه 24 اسفند 1383, 23:09 عصر
اره عزیز ، همینطوره :) 
ولی به این دو مثال هم که با استریم نوشته شده توجه کن، ضمناً برای فایلهای jpeg میباشد:
  
  uses jpeg;
  procedure TForm1.Button1Click(Sender: TObject);
  var
    Jpg: TJpegImage;
    Stream: TMemoryStream;
  begin
    Jpg := nil;
    Stream := nil;
    try
      // Create a JPEG image and load it from a file
      Jpg := TJpegImage.Create;
      Jpg.LoadFromFile('test.jpg');
      // Create a stream and save the image to the stream
      Stream := TMemoryStream.Create;
      Jpg.SaveToStream(Stream);
      Stream.Position := 0;
      Table1.Append;
      // Load the Blob field from the stream
      TBlobField(Table1.FieldByName('Graph')).LoadFromSt ream(Stream);
      Table1.Post;
    except
      jpg.Free;
      Stream.Free;
      raise;
    end;
    jpg.Free;
    Stream.Free;
  end;
 
procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
  var
    Stream: TMemoryStream;
    Jpg: TJpegImage;
  begin
    Jpg := nil;
    Stream := nil;
    try
      // Create a stream and load the contents of the Blob field
      Stream := TMemoryStream.Create;
      TBlobField(Table1.FieldByName('Graph')).SaveToStre am(Stream);
      if Stream.Size > 0 then begin
        // Create a JPEG image and load it from the stream
        Jpg := TJpegImage.Create;
        Stream.Position := 0;
        Jpg.LoadFromStream(Stream);
        // Assign the JEPG image to the Picture property of an Image
        Image1.Picture.Assign(Jpg);
      end else
        Image1.Picture.Assign(nil);
    except
      Image1.Picture.Assign(nil);
    end;
    jpg.Free;
    Stream.Free;
  end;
Tarrah
یک شنبه 08 خرداد 1384, 21:34 عصر
دوست عزیز سلام
ضمن احترام به نظر همه دوستان
حتما تو جدولتون یه فیلد برا عکس دارین مثلا اسمش هست image
یه dbgrid بذارین و به table مرتبط کنین.data field رو image انتخاب کنین .با load کردن عکس تو dbimage عکستون تو پایگاه ذخیره میشه.من این کارو کردم اگه می خواین بگین برنامرو براتون بفرستم.
mahdi939
دوشنبه 09 خرداد 1384, 09:17 صبح
شما میتوانید از  image  و loadfromfile استفاده کنید و سپس با دستور assign  در فیلد مورد نظر درج نماپید .
موفق باشید .
parhizkar2000
شنبه 11 تیر 1384, 00:23 صبح
من به یه روش کاملا متفاوت عکس رو توی بانک ذخیره می کنم بدین صورت که 
1- اول عکس مورد نظر رو با یه اوپن دیالوگ بازمی کنم .
2- اون رو توی یه image  نشون میدهم 
3- اگه کاربر خواست اون رو ذخیره کنه  ابتدا اون رو با SavetoFile  توی هارد ذخیره میکنم
4- سپس اون رو توی یه Dbimage  با loadfrimfile  ذخیره می کنم
Babak-Aghili
شنبه 11 تیر 1384, 00:43 صبح
:D 
کل ماجرا این بود که ما نمیخواستیم عکس مستقیما در هارد باشد ... میخواستیم در دیتا بیس باشد ...
از روش مهندس ربیعی استفاده کنید .... با کمی تکمیل و ....
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.