PDA

View Full Version : سوال: مشکل با بازیابی تصویر از روی آدرس - در دیتابیس



lord_helgard
دوشنبه 27 بهمن 1393, 16:36 عصر
اوخ اوخ بچه ها من یه برنامه نوشتم که عکس رو اول انتخاب بعدش میاد اون رو به دایرکتوری اصلی برنامه اضاقه میکنه، و همچنین آدرسش رو در دیتا بیس فیلد آدرس ذخیره میکنه، الان پروژه رو به سیستم دیگه ای انتقال دادم و به یه مشکلی بر خوردم ، که خیلی عجیب هست، یادتون باشه ما عکسارو تو دایرکتوری برنامه ذخیره و آدرسش رو در پایگاه ذخیره میکردیم، حالا من برنامه رو آوردم روی یه سیستم دیگه دارم اجرا میکنم ، و خُب به طبع آدرس فایلها که روی سیستم قبلی بوده رو نشون میده، یعنی من تو این سیستم جدید اصلا همچین درایوی رو ندارم
"E:\\Exam Archive C# Programming\\C#\\ExamArchive\\ExamArchive\\Images\ \Image_1.jpg.jpg"

ولی الان اینجوریه آدرسم !
D:\\C#\\ExamArchive\\ExamArchive\\Images\\Image_5. jpg


یعنی آدرس اول تو پایگاه ذخیره شُده، اما الان مسیرش تغییر کرده که طبیعتاً هم نشون نمیده!!
فکر میکنم تو ذخیره کردن آدرس تو دیتا بیس باید چیزی تعریف بشه که بگه این آدرس رو از شاخه برنامه current Directory به بعد ذخیره بشه و برای جستجو نیز به همچنین، اما خب متُدش رو بلد نیستم :ناراحت:

behzadkhan
دوشنبه 27 بهمن 1393, 16:51 عصر
با سلام

دوست عزیز

این راه را پیشنهاد می کنم:

شما باید دو آدرس داشته باشید:

1- آدرس مطلق به همراه نام فایل که همان آدرس تصاویر هست و غیر قابل تغییر

2- آدرس نسبی که متغیر هست و قابل تغییر

این دو آدرس با هم جمع می شوند و آدرس واقعی را ایجاد می کنند:

مثلا:
آدرس مطلق:
ExamArchive\\ExamArchive\\Images\\Image_5.jpg

آدرس نسبی:
D:\\C#‎\\

هنگامی که می خواهید به یک تصویر دسترسی داشته باشید این دو آدرس با هم جمع شده و به شکل زیر تبدیل می شود:
D:\\C#‎\\ExamArchive\\ExamArchive\\Images\\Image _5.jpg

================================================== ================

معمولا در ساخت برنامه هایی که با پایگاه داده ها کار می کندد یکسری داده ها تکی هستند که اون ها را یک جدول تعریف میکنند و این جدول هم همیشه یک رکورد بیشتر ندارد.
بنابراین
یک جدول ایجاد کنید و رکورد آدرس نسبی را در آن تعریف کنید.
سپس در برنامه تان یک بخش برای تعریف این آدرس ایجاد کنید. مثلا در پنجره تنظیمات

حالا یک متغییر سراسری در برنامه تعریف کنید که هنگام اجرا برنامه اون فیلد را بخواند و در آن متغیر بریزد.
اکنون در هرجای برنامه که خواستید به مسیر تصاویر در پایگاه داده ها دسترسی داشته باشید با این متغیر جمع می کنید تا آدرس واقعی بدست آید.

همچنین این متغیر هنگامی که در پنجره تنظیمات ما آدرس را بروز رسانی می کنید درون این متغیر نیز ریخته شود.

با تشکر

lord_helgard
شنبه 09 اسفند 1393, 12:12 عصر
آدرس نسبی:
D:\\C#‎‎\\

هنگامی که می خواهید به یک تصویر دسترسی داشته باشید این دو آدرس با هم جمع شده و به شکل زیر تبدیل می شود:
D:\\C#‎‎\\ExamArchive\\ExamArchive\\Images\\Im age_5.jpg

================================================== ================

معمولا در ساخت برنامه هایی که با پایگاه داده ها کار می کندد یکسری داده ها تکی هستند که اون ها را یک جدول تعریف میکنند و این جدول هم همیشه یک رکورد بیشتر ندارد.
بنابراین
یک جدول ایجاد کنید و رکورد آدرس نسبی را در آن تعریف کنید.
سپس در برنامه تان یک بخش برای تعریف این آدرس ایجاد کنید. مثلا در پنجره تنظیمات

با تشکر

این رو نمیدونم چه جوری تعریف کنم که هر بار آدرس نسبی رو بگیره ! یا وقتی برنامه انتقال داده میشه آدرس نسبی قبلی پاک و آدرس جدید ذخیره بشه !!!

pich2mohre
شنبه 09 اسفند 1393, 13:55 عصر
سلام
از Application.StartupPath استفاده کن. این خصوصیت به شما آدرس جاری برنامه رو می ده.

lord_helgard
چهارشنبه 13 اسفند 1393, 16:16 عصر
سلام
از Application.StartupPath استفاده کن. این خصوصیت به شما آدرس جاری برنامه رو می ده.

خب آره ، راه خوبیه ، ولی این رو بهم برمیگردونه
ap "D:\\C#\\ExamArchive\\ExamArchive\\bin\\Debug" string
که ap متغیر از نوع string هست
حالا من فقط این تکیه رو میخوام که آدرس نسبی رو به قول دوستمون قرار داده
D:\\C#\\

systam
چهارشنبه 13 اسفند 1393, 16:28 عصر
سلام دوستمون توضیح داد

Application.StartupPath زمانی استفاده میشه میاد طبق عکس ضمیمه
میاد فولدر علی رو برای به صورت جستجو در پوشه Debug پیدا میکنه و دسترسی داره
129090

lord_helgard
چهارشنبه 13 اسفند 1393, 16:58 عصر
سلام دوستمون توضیح داد

Application.StartupPath زمانی استفاده میشه میاد طبق عکس ضمیمه
میاد فولدر علی رو برای به صورت جستجو در پوشه
Debug پیدا میکنه و دسترسی داره
129090

خب شما چه راه حلی رو پیشنهاد میکنید که آدرس نسبی رو به دست بیارم و بعدش تو جدول ( واحد ) ذخیره کنم ؟ که طبق فرمایش دوستمون بعداً برای بازیابی اطلاعات آدرس نسبی رو با آدرس مطلق جمع بزنم

Share & Learn
پنج شنبه 14 اسفند 1393, 12:39 عصر
خب شما چه راه حلی رو پیشنهاد میکنید که آدرس نسبی رو به دست بیارم و بعدش تو جدول ( واحد ) ذخیره کنم ؟ که طبق فرمایش دوستمون بعداً برای بازیابی اطلاعات آدرس نسبی رو با آدرس مطلق جمع بزنم

سلام
نمی دونم این روشی که می گم بهینه هست یا نه
اما می تونی به کمک split بیای
D:\\C#‎‎‎\\

رو از آدرسی که Application.StartupPath بهت می ده جدا کنی و بعد ادامه ی ماجرایی که می خوای...

محمد آشتیانی
پنج شنبه 14 اسفند 1393, 13:07 عصر
سلام
دوست من چرا اینقدر مسئله رو سخت میکنی
کاری که لازمه بکنی ، اینه که تو یه Table فقط اسم فایل عکس رو ذخیره کنی ، مثلا image_1.jpg ، تا اینجا که مشکلی نیست

حالا میرسیم به آدرس
اگر محل ذخیره سازی فایل ها ثابته ، مثلا کنار فایل اجرایی برنامه یه فولدر به اسم images داری ، آدرس فایل ها به اینصورت خواهد شد

string path = Application.StartupPath + "\\images\\";

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

و اما اگر آدرس فولدر عکس ها باید توسط کاربر قابل تعیین کردن باشه ، با کنترل FolderBrowserDialog به کاربر امکان بده که مسیر تصاویر رو انتخاب کنه ، مثل کد زیر

FolderBrowserDialog fbd = new FolderBrowserDialog();


if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string path = fbd.SelectedPath;
}


* اینکه این آدرس رو کجا میخوای ذخیره کنی دیگه به خودت بر میگرده (دیتابیس ، فایل INI یا Setting برنامت)



موفق باشید.

امیر مهرشاد
پنج شنبه 14 اسفند 1393, 13:11 عصر
اگه میخوای دردسر این مسائل رو روی هر کلاینتی نداشته باشی و تعداد عکسهاتم زیاد نیست چرا توی خود بانک عکسها رو ذخیره نمیکنی ؟:متفکر:

همین جا روش هایی هم بگردی بچه ها زحمتشو کشیدن میتونی از کلاسهای آماده اونها هم استفاده کنی حتی اسکن در خود فرمت برای دخیره مستقیم در دیتابیسم داشته باشید :چشمک: