PDA

View Full Version : ذخیره عکس از Image در بانک



حسین خانی
یک شنبه 02 اسفند 1388, 18:58 عصر
با سلام :لبخندساده:
اول اینو بگم که در این رابطه جستجو کرده ام ، بیشتر مطالب ذخیره با استفاده از متد LoadFromFile بود !

با کد زیر کارم راه افتاد :


var
BlobStream: TStream;
begin
ADOQuery1.Insert;
//----
BlobStream := ADOQuery1.CreateBlobStream(ADOQuery1.FieldByName(' pic'), bmWrite);
try
Image1.Picture.Graphic.SaveToStream(BlobStream);
finally
BlobStream.Free;
end;
//---
ADOQuery1id.Value:=StrToInt(Edit1.Text);
ADOQuery1name.Value:=(Edit2.Text);
ADOQuery1.Post;
end; ولی اگر در رکوردی نخواهم عکس را هم ذخیره کنم Error زیر را میدهد ! چرا ؟
کجای کد ایراد دارد ؟

mehdimdp
یک شنبه 02 اسفند 1388, 20:14 عصر
سلام
چرا شما از adotabel استفاده نمی کنید؟

pezhvakco
یک شنبه 02 اسفند 1388, 20:24 عصر
درود :
1) بهتره از Adotable یا adodataset استفاده کنی .
2) بهتره از همون روش ذخیره آدرس استفاده کنی، چون هم حجم بانک کمتر میشه و هم سرعت خواندن و نوشتن بیشتر میشه .
3) با توجه به نوع متغییر ها و نوع نوشتنت، نمی تونی مقدار Null قرار بدی . بهتره اول وجود عکس را امتحان کنی یا از دستورات خطا گیری استفاده کنی .

Mahmood_M
یک شنبه 02 اسفند 1388, 20:43 عصر
ولی اگر در رکوردی نخواهم عکس را هم ذخیره کنم Error زیر را میدهد ! چرا ؟
برای این که نخوای عکس ذخیره بشه چیکار می کنی ؟!
...

حسین خانی
یک شنبه 02 اسفند 1388, 20:57 عصر
سلام
چرا شما از adotabel استفاده نمی کنید؟
این یه کد تمرینی است دوست عزیز و تازه سئوال من این نبود !

بهتره از همون روش ذخیره آدرس استفاده کنیکدام روش ؟

چون هم حجم بانک کمتر میشه و هم سرعت خواندن و نوشتن بیشتر میشه . چرا ؟

یا از دستورات خطا گیری استفاده کنی . کجاشو و چطوری کنترل کنم ؟

حسین خانی
یک شنبه 02 اسفند 1388, 21:01 عصر
برای این که نخوای عکس ذخیره بشه چیکار می کنی ؟!
...
خوب اگر کد Error نده بایستی مابقی فیلدهای رکورد به جزء فیلد عکس در بانک ذخیره بشه !
ولی با وجود این Error عمل درج انجام نمیشه !!!

mehdimdp
یک شنبه 02 اسفند 1388, 21:12 عصر
بهتره از همون روش ذخیره آدرس استفاده کنیکدام روش ؟

در این روش شما میای فقط آدرس عکسها رو در بانک ذخیره میکنی .



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

حسین خانی
یک شنبه 02 اسفند 1388, 21:22 عصر
در این روش شما میای فقط آدرس عکسها رو در بانک ذخیره میکنی .


چون هم حجم بانک کمتر میشه و هم سرعت خواندن و نوشتن بیشتر میشه . چرا ؟

خب معلومه دیگه
شما به جای اینکه بیای یک عکس 500کیلوبایتی رو در بانک ذخیره کنی، میای فقط آدرس اونو که از نوع رشته ای که فکر نمی کنم حجم از بیشتر از یک کیلوبایت بشه رو در بانک ذخیره میکنی

ممنون دوست عزیز حق با شماست ، اما من میخواهم عکس در بانک ذخیره شود و نه مسیر عکس .

توضیح بیشتر :
یعنی با استفاده از OpenDialog عکس رو انتخاب کنم و عکس انتخابی در Image نمایش داده بشه و با زدن دکمه ثبت اطاعات یک رکورد به همراه عکس با استفاده از کد بالا در بانک درج شود . و اگر رکوردی فاقد عکس بود مابقی در فیلدهای مربوطه درج شود !

Hadi_Fayyaz
یک شنبه 02 اسفند 1388, 23:34 عصر
سلام دوست عزيز
من فكر ميكنم اگه شما تو كدي كه نوشتي قبل از Finally يه سطر Except هم اضافه كني و هيچ دستوري هم در قسمت Except ننويسي اونوقت در زمان اجرا با دلفي پيغام خطا ميگيري ولي وقتي Exe برنامت رو اجرا ميكني ديگه پيغام خطا نميده مگه اينكه مشكل جاي ديگه اي باشه.
موفق باشي

pezhvakco
دوشنبه 03 اسفند 1388, 10:57 صبح
برای ذخیره و خواندن عکس اگه بتونی وجود اون رو امتحان کنی خیلی بهتره ولی اگه میخوای با خطا گیری کار کنی ،می تونی از دستور Try... Except استفاده کنی :
Try
دستورات مورد نظر
except on E: Exception do
اگه می خوای پیغام مورد نظر
end

Mahmood_M
دوشنبه 03 اسفند 1388, 11:16 صبح
خوب اگر کد Error نده بایستی مابقی فیلدهای رکورد به جزء فیلد عکس در بانک ذخیره بشه !
ولی با وجود این Error عمل درج انجام نمیشه !!!
شما باید برای ثبت تصویر در بانک شرطی برای چک کردن وجود تصویر قرار بدید ، مثال :
var
BlobStream: TStream;
begin
ADOQuery1.Insert;
//----
if not Image1.Picture.Graphic.Empty then
begin
BlobStream := ADOQuery1.CreateBlobStream(ADOQuery1.FieldByName(' pic'), bmWrite);
try
Image1.Picture.Graphic.SaveToStream(BlobStream);
finally
BlobStream.Free;
end;
end;
//---
ADOQuery1id.Value:=StrToInt(Edit1.Text);
ADOQuery1name.Value:=(Edit2.Text);
ADOQuery1.Post;
end;
هر وقت هم خواستید تصویر ذخیره نشه کافیه که تصویر درون Image1 رو حذف کنید ...

موفق باشید ...

حسین خانی
دوشنبه 03 اسفند 1388, 12:14 عصر
ممنون از دوستان به خاطر زمانی که صرف حل این مشکل کرده اند !

جناب Mahmood_N (http://barnamenevis.org/forum/member.php?u=16833) موقعی که عکسی برای ذخیره وجود ندارد باز هم همان Error را می دهد !

حسین خانی
دوشنبه 03 اسفند 1388, 12:27 عصر
بلاخره با توضیحی که pezhvakco (http://barnamenevis.org/forum/member.php?u=59994) دادند مشکل این کد حل شد . :تشویق:

ممنون و سپاس از راهنمایی همه دوستان گرامی ...