PDA

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



حسین خانی
یک شنبه 20 دی 1388, 20:22 عصر
با سلام خدمت دوستان گرامی :لبخندساده:
برای اینکه یک سری عکس ( نام گذاری شده بر حسب شماره ) رو از داخل پوشه ای یکباره در داخل فیلدی ذخیره بشه باید چکار کنم ؟

دلفــي
دوشنبه 21 دی 1388, 08:44 صبح
با سلام خدمت دوستان گرامی :لبخندساده:
برای اینکه یک سری عکس ( نام گذاری شده بر حسب شماره ) رو از داخل پوشه ای یکباره در داخل فیلدی ذخیره بشه باید چکار کنم ؟

اگه تمام تصاوير شما بايد در يك فيلد و ركوردهاي متوالي ذخيره شوند ، حتما بايد تصاوير را يك به يك وارد ديتابيس نماييد و براي اين كار هم گذاشتن يك حلقه for كافي خواهد بود ولي اگر مي خواهيد تصاوير را در يك فيلد و همگي را در يك ركورد ذخيره كنيد در اين صورت مي تونيد از Stream و Blob استفاده كنيد .

حسین خانی
دوشنبه 21 دی 1388, 15:42 عصر
اگه تمام تصاویر شما باید در یک فیلد و رکوردهای متوالی ذخیره شوند ، حتما باید تصاویر را یک به یک وارد دیتابیس نمایید و برای این کار هم گذاشتن یک حلقه for کافی خواهد بود

بله جناب دلفی ، منظورم همینه !!!
برای اینکه همه عکسای انتخابی رو با هم فراخوانی کنم از چه کدی استفاده کنم ؟
و چطوری تو حلقه استفاده کنم ؟ :ناراحت: :ناراحت: :ناراحت:

دلفــي
دوشنبه 21 دی 1388, 16:28 عصر
بله جناب دلفی ، منظورم همینه !!!
برای اینکه همه عکسای انتخابی رو با هم فراخوانی کنم از چه کدی استفاده کنم ؟
و چطوری تو حلقه استفاده کنم ؟ :ناراحت: :ناراحت: :ناراحت:



procedure TForm1.BitBtn1Click(Sender: TObject);
var i,n:Integer;
begin
n := 10; // قرار دهيد n تعداد تصاوير را در
for i := 1 to n do
begin
Image1.Picture.LoadFromFile('نام و مسير فايل تصويري');
ADOQuery1.Active := False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM TABLE');
ADOQuery1.ExecSQL;
ADOQuery1.Active := True;
ADOQuery1.Insert;
ADOQuery1.FieldByName('ImageField').Assign(Image1. Picture);
ADOQuery1.Post;
end;
end;

حسین خانی
یک شنبه 27 دی 1388, 21:00 عصر
ممنون از راهنمایی خوبتان :لبخندساده:

با کد زیر یک عکس با استفاده از حلقه در رکوردهای پشت سرهم در بانک ذخیره میشن !

var
i,n:Integer;
Begin

n := 3;
for i := 1 to n do
Begin
ADOQuery1.Insert;
ADOQuery1pic.LoadFromFile(OpenPictureDialog1.FileN ame);
ADOQuery1.Post
end;

end;



ولی من میخوام تمام عکسهایی که انتخاب کردم پشت سر هم در بانک ذخیره شوند نه فقط یک عکس!
و نکته دیگه این که کدوم یک از امکان OpenPictureDialog رو میتونم به جای عدد در متغیر n (تعداد عکسهای انتخاب شده) بریزم ؟

Delphi&Kylix_2939
یک شنبه 27 دی 1388, 21:06 عصر
اگه بخوايم هرچي فايل عكس كه داخل يك فولدر هست رو به نام خودشون داخل بانك اطلاعاتي اضافه كنيم بايد چكار كنيم؟

Pr0grammer
دوشنبه 28 دی 1388, 00:01 صبح
اگه بخوایم هرچی فایل عکس که داخل یک فولدر هست رو به نام خودشون داخل بانک اطلاعاتی اضافه کنیم باید چکار کنیم؟

می تونید عکس ها رو به صورت فایل فشرده Zip تبدیل کنید و فایل نهایی رو در بانک ذخیره کنید؛ البته بدیهی هستش که برای بازیابی عکس ها باید مجددا عکس ها رو Extract کنید...

ali_golpesar
دوشنبه 28 دی 1388, 00:28 صبح
بهترین راه حل این است که عکسها را در داخل پوشه ای قرار دهیم و مسیر آن را در بانک ذخیره کنیم.

Mahmood_M
دوشنبه 28 دی 1388, 02:45 صبح
ولی من میخوام تمام عکسهایی که انتخاب کردم پشت سر هم در بانک ذخیره شوند نه فقط یک عکس!
و نکته دیگه این که کدوم یک از امکان OpenPictureDialog رو میتونم به جای عدد در متغیر n (تعداد عکسهای انتخاب شده) بریزم ؟

اگه بخوایم هرچی فایل عکس که داخل یک فولدر هست رو به نام خودشون داخل بانک اطلاعاتی اضافه کنیم باید چکار کنیم؟
در اینجا (http://barnamenevis.org/forum/showthread.php?t=70587) مقاله ای در مورد نحوه ی جستجوی فایلها قرار داده شده ...
با استفاده از مواردی که در اون مقاله گفته شده ، می تونید فایلهای موجود در اون پوشه رو با دادن آدرس پوشه و مقدار " *.* " به عنوان پسوند فایل ( یا پسوند عکس مورد نظر ) ، فایلها رو پیدا کنید و تک تک فایلهای پیدا شده رو با توجه به این که بعد از پیدا کردن مسیر فایل رو در اختیار دارید ، در بانک ذخیره کنید ...

یک راه غیر منطقیش ! اینه که در حلقه ی مورد نظر هر بار پنجره ی OpenDialog رو باز کنید و از کاربر بخواید که آدرس عکس رو وارد کنه که اگه تعداد زیاد باشه کمی غیر ممکن به نظر می رسه !

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

حسین خانی
دوشنبه 28 دی 1388, 18:37 عصر
ممنون از راهنمایی همه دوستان :لبخندساده:

در اینجا (http://barnamenevis.org/forum/showthread.php?t=70587) مقاله ای در مورد نحوه ی جستجوی فایلها قرار داده شده ...از مقاله شما تو برنامه ام استفاده کردم و مسیر همه عکسها رو در Listbox دارم !
و کد برنامه رو به شکل زیر اصلاح کردم :


var
i,n:Integer;
begin
n := FoundsList.Items.Count;
OpenPictureDialog1.FileName:=FoundsList.Items[FoundsList.ItemIndex];
for i := 1 to n do
begin
ADOQuery1.Insert;
ADOQuery1pic.LoadFromFile(OpenPictureDialog1.FileN ame);
ADOQuery1.Post
end;
end;
نکته : خصوصیت MultiSelect لیست باکس رو True کردم .
اما هنگام انتخاب همه آیتم های لیست باکس و زدن دکمه "ذخیره در بانک " فقط یک عکس رو در رکوردهای متوالی ذخیره میکنه نه همه عکسای انتخابی را !
Trace که کردم مشخص شد از کد :

OpenPictureDialog1.FileName:=FoundsList.Items[FoundsList.ItemIndex]; هستش !
ایراد از کجاشه ؟ :متفکر:

سعید صابری
دوشنبه 28 دی 1388, 18:47 عصر
Iteindex فقط شماره اولين انتخابتو بر مي گردونه. اگر مي خواهي به همه انتخابهات دسترسي پيدا كني مي توني از يك حلقه استفاده كني:



var
i:Integer;
begin
for I := 0 to Listbox1.Count - 1 do
if ListBox1.Selected[i] then
OpenPictureDialog1.FileName:=ListBox1.Items[i];

Mahmood_M
دوشنبه 28 دی 1388, 18:50 عصر
دیگه نیازی به OpenDialog نیست ، به صورت زیر عمل کنید :
var
i,n:Integer;
begin
n := FoundsList.Items.Count;
for I := 0 to n - 1 do
begin
ADOQuery1.Insert;
ADOQuery1pic.LoadFromFile(FoundList.Items.Strings[I]);
ADOQuery1.Post
end;
end;
مشکل کد شما اینه که قبل از حلقه به OpenDialog مقدار می دید و در حلقه هم فقط همون رو در بانک ذخیره می کنید ...

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

حسین خانی
سه شنبه 29 دی 1388, 14:16 عصر
ممنون و سپاس از راهنمایی دوستان گرامی :تشویق:
مشکلم حل شد :لبخند:
سئوال دیگه ای دارم :
اگه بخوام همراه با ذخیره عکسها در فیلدی دیگر (فقط نام فایل همراه با پسوند) را نیز ذخیره کنم چه کدی باید اضافه کنم ؟

از OpenPictureDialog.FileName استفاده کردم ولی کل مسیر فایل رو برمیگردونه ! :اشتباه:

دلفــي
سه شنبه 29 دی 1388, 16:18 عصر
ممنون و سپاس از راهنمایی دوستان گرامی :تشویق:

مشکلم حل شد :لبخند:
سئوال دیگه ای دارم :
اگه بخوام همراه با ذخیره عکسها در فیلدی دیگر (فقط نام فایل همراه با پسوند) را نیز ذخیره کنم چه کدی باید اضافه کنم ؟

از OpenPictureDialog.FileName استفاده کردم ولی کل مسیر فایل رو برمیگردونه ! :اشتباه:







ExtractFileName(OpenPictureDialog.FileName);