PDA

View Full Version : مشکل در ذخیره كردن عکس در ديتابيس



Babak-Aghili
دوشنبه 24 اسفند 1383, 07:39 صبح
سلام.
جهت ذخیره عکس !! سرچ کردم و از روش آقای کرامتی به این صورت استفاده کردم ولی متاسفانه خطا میگیره : ( کمک کنید لطفا )

جدول اکسس و فیلد OLE است مثلا بنام pic .

<span dir=ltr>

if &#40;OpenDialog.Execute&#41; then begin
DBImage1.LoadFromFile&#40;OpenDialog.FileName&#41;;
Table.Post;
end;
</span>

که دراینجا DBImage‌هم به فیلد عکس بایند شده است.

samandari
دوشنبه 24 اسفند 1383, 08:16 صبح
با سلام
من قبلا این مشکل رو داشتم ولی مشکل رو به شکل زیر حل کردم
شما میتوانید با استفاده از یک Image و متد Loadfromfile تصویر مورد نظرتان را در آن نمایش دهید سپس تصویر موجود در داخل این Image را به Clipboard منتقل کنید و سپس اطلاعات موجود در Clipboard رو به DbImage منتقل کنید

دوشنبه 24 اسفند 1383, 10:20 صبح
قبل از دادن مقادیر آیا insert یا Append یا edit کردین (گفتم شاید چون تو کدتون نیست احتمالا مشکل همین جا باشه ).

ولی ای کاش متن error ها رو بنویسین .
تا ببینیم چی مشکلی داره ولی الان n تا مشکل به ذهنم میرسه که هر کدومش ممکنه همون باشه .
شاید احتمالا داری عکس از نوع غیر از bitmap میدی اگه این کارو میکنی مشکل همین جاست چون dbimage فقط نوع bitmap رو قادر به نمایش هست برا حل این مشکل یک سرچی تو سایت بزن کامپوننتش رو گذاشتم اون فقط نوع jpeg , jpg رو میگیره .



:موفق:

Babak-Aghili
دوشنبه 24 اسفند 1383, 12:47 عصر
به روش آقای سمندری :

اینجوری میگین دیگه ؟ اول :‌
<span dir=ltr>

if&#40;OpenDialog1.Execute&#41; then
begin
Image1.Picture.LoadFromFile&#40;OpenDialog1.FileName&#41;;
Clipboard.Assign&#40;Image1.Picture&#41;;
DBImage1.PasteFromClipboard;
end;

</span>
و بعدش هم که Table1.Post


خب این خطا را میگیره :

Non BLOB Column in Table Required to Perform Operation :mad:

به روش آقا دادوند :
رییس ! از اینهایی که میگی نیست ! فکری دگر کن :oops:

اون کامپوننته را هم من که ندیدم ... اگه خودت ... دستت درست :تشویق:

hr110
دوشنبه 24 اسفند 1383, 13:23 عصر
یک راه سریع هم میتونه این باشه:

لود کردن فایل:

TBlobField&#40;ADOTable1.FieldByName&#40;'Pic'&#41;&#41;.SaveToFil e&#40;'1.bmp'&#41;;
Image1.Picture.LoadFromFile&#40;'1.bmp'&#41;;

ذخیره فایل :

TBlobField&#40;ADOTable1.FieldByName&#40;'Pic'&#41;&#41;.LoadFromF ile&#40;'1.bmp'&#41;;

Babak-Aghili
دوشنبه 24 اسفند 1383, 17:46 عصر
ممنون آقای ربیعی . روش شما را هم چک میکنم . ولی ای کاش یک نفر مشکل روش قبلی را هم بررسی میکرد.

:flower:

Babak-Aghili
دوشنبه 24 اسفند 1383, 21:18 عصر
ببخشید .... روش شما عکس را در فایل ذخیره کرده ؟

یعنی از روی هارد میتوان به آن دسترسی داشت ؟

-----
نه ! عکس فقط در فیلد دیتابیس ذخیره شود ..... SOS

hr110
دوشنبه 24 اسفند 1383, 22:09 عصر
اره عزیز ، همینطوره :)

ولی به این دو مثال هم که با استریم نوشته شده توجه کن، ضمناً برای فایلهای jpeg میباشد:


uses jpeg;

procedure TForm1.Button1Click&#40;Sender&#58; TObject&#41;;
var
Jpg&#58; TJpegImage;
Stream&#58; TMemoryStream;
begin
Jpg &#58;= nil;
Stream &#58;= nil;
try

// Create a JPEG image and load it from a file

Jpg &#58;= TJpegImage.Create;
Jpg.LoadFromFile&#40;'test.jpg'&#41;;

// Create a stream and save the image to the stream

Stream &#58;= TMemoryStream.Create;
Jpg.SaveToStream&#40;Stream&#41;;
Stream.Position &#58;= 0;
Table1.Append;

// Load the Blob field from the stream

TBlobField&#40;Table1.FieldByName&#40;'Graph'&#41;&#41;.LoadFromSt ream&#40;Stream&#41;;

Table1.Post;
except
jpg.Free;
Stream.Free;
raise;
end;
jpg.Free;
Stream.Free;
end;


procedure TForm1.Table1AfterScroll&#40;DataSet&#58; TDataSet&#41;;
var
Stream&#58; TMemoryStream;
Jpg&#58; TJpegImage;
begin
Jpg &#58;= nil;
Stream &#58;= nil;
try

// Create a stream and load the contents of the Blob field

Stream &#58;= TMemoryStream.Create;
TBlobField&#40;Table1.FieldByName&#40;'Graph'&#41;&#41;.SaveToStre am&#40;Stream&#41;;
if Stream.Size > 0 then begin

// Create a JPEG image and load it from the stream

Jpg &#58;= TJpegImage.Create;
Stream.Position &#58;= 0;
Jpg.LoadFromStream&#40;Stream&#41;;

// Assign the JEPG image to the Picture property of an Image

Image1.Picture.Assign&#40;Jpg&#41;;

end else
Image1.Picture.Assign&#40;nil&#41;;
except
Image1.Picture.Assign&#40;nil&#41;;
end;
jpg.Free;
Stream.Free;
end;

Tarrah
یک شنبه 08 خرداد 1384, 20:34 عصر
دوست عزیز سلام
ضمن احترام به نظر همه دوستان
حتما تو جدولتون یه فیلد برا عکس دارین مثلا اسمش هست image
یه dbgrid بذارین و به table مرتبط کنین.data field رو image انتخاب کنین .با load کردن عکس تو dbimage عکستون تو پایگاه ذخیره میشه.من این کارو کردم اگه می خواین بگین برنامرو براتون بفرستم.

mahdi939
دوشنبه 09 خرداد 1384, 08:17 صبح
شما میتوانید از image و loadfromfile استفاده کنید و سپس با دستور assign در فیلد مورد نظر درج نماپید .

موفق باشید .

parhizkar2000
جمعه 10 تیر 1384, 23:23 عصر
من به یه روش کاملا متفاوت عکس رو توی بانک ذخیره می کنم بدین صورت که
1- اول عکس مورد نظر رو با یه اوپن دیالوگ بازمی کنم .
2- اون رو توی یه image نشون میدهم
3- اگه کاربر خواست اون رو ذخیره کنه ابتدا اون رو با SavetoFile توی هارد ذخیره میکنم
4- سپس اون رو توی یه Dbimage با loadfrimfile ذخیره می کنم

Babak-Aghili
جمعه 10 تیر 1384, 23:43 عصر
:D

کل ماجرا این بود که ما نمیخواستیم عکس مستقیما در هارد باشد ... میخواستیم در دیتا بیس باشد ...

از روش مهندس ربیعی استفاده کنید .... با کمی تکمیل و ....