delroya (02-08-11), M A H R A D (02-08-11), P A R H A M (02-08-11), Rezasam1 (02-08-11)
با سلام!
- The ' microsoft.jet.oledb.4.0' provider is not registered on the local machine
دليل اصلي اين خطا رو نمي دونم ولي معمولا" با طي مراحل زير حل ميشه:
پروژه رو با Visual Studio باز كنيد. از منوي Project گزينه ي يكي مونده به آخر يعني Properties مربوط به پروژه رو انتخاب كنيد. سپس در پنجره ي باز شده، وارد مجموعه ي Build بشيد. بعد در بخش General همين زبانه به دنبال گزينه ي Platfrom Target بگرديد و از طريق منوي كركره اي روبروش گزينه ي x86 رو انتخاب كنيد. در آخر تغييرات رو ذخيره كنيد و پروژه رو مجددا كامپايل كنيد. اميدوارم كه حل بشه. اگر هم نشد بفرماييد تا نسخه ي 2010 x86 پروژه رو در اختيارتون بذارم.
- database erorr: Not a Valid file name
فكر كنم شما فايل UsersDB.mdb رو در مسير bin پروژه ي خودتون قرار نداديد. اگه شما از همون ConnectionString اي كه بنده استفاده كردم، استفاده كنيد آن گاه فايل هاي MDB حتما" بايد در در محل اجراي برنامه ي اصلي (همون فايل EXE) قرار داشته باشند. در غير اين صورت بايد مسير دقيق بانك ها رو در ConnectionString قرار بديد.
- فیلد پسورد جدول لاگین دیتابیس
اگه منظورتون فیلد پسورد در داخل فايل UsersDB.mdb هست بايد عرض كنم در اين فيلد مقدار MD5 Hash رمز عبور (رمز عبور كد شده با MD5 كه شامل 32 كاركتر است) قرار مي گيره. شما بايد با سورس داخل پروژه و تابع مربوطه، مقدار رمز عبور رو كد كنيد و اين عبارت كد شده رو داخل فيلد مذكور درون پايگاه قرار بديد.
- سوال آخر؟
فكر كنم منظورتون از كل صفحات همون فرم ها باشه. يعني شما تمايل داريد كه تنها يك فرم براي تست برنامه اجرا بشه و بقيه ي فرم ها بارگذاري نشن؟!
تا اونجايي كه من مي دونم چنين چيزي امكان نداره. هر برنامه ي شي گراي جرياني (Flow) داره كه با يك StartUp Form شروع ميشه و در نهايت با بسته شدن همين فرم خاتمه پيدا مي كنه. پس به دليل كامپايل كلي برنامه و لود فايل اجرايي به منظور اشكال زدايي، اين امكان وجود نخواهد نداشت كه بشه در جريان برنامه اختلال ايجاد كرد و به طور مستقيم تنها يك فرم دلخواه رو باز كرد. اما ميشه با فشردن كليد F8 در هر خط از سورس برنامه مرحله به مرحله به روند اجراي اون خط رو مشاهده كرد.
موفق باشيد
آرمين
'چو ایران نباشد، تن من مباد
Dim Armin As Iranian
If Iran.Enabled = False Then Armin.Enabled = False
delroya (02-08-11), M A H R A D (02-08-11), P A R H A M (02-08-11), Rezasam1 (02-08-11)
دوست خوبم آقا آرمین من هر کاری کردم که درست بشه؛ متاسفانه نشد؛ شما نوشته بودید که:
"فكر كنم شما فايل UsersDB.mdb رو در مسير bin پروژه ي خودتون قرار نداديد. اگه شما از همون ConnectionString اي كه بنده استفاده كردم، استفاده كنيد آن گاه فايل هاي MDB حتما" بايد در در محل اجراي برنامه ي اصلي (همون فايل EXE) قرار داشته باشند. در غير اين صورت بايد مسير دقيق بانك ها رو در ConnectionString قرار بديد."
منظور شما از userdb.mdb بانک اطلاعاتی تون هست دیگه؛ درسته؟ اگه اینجور باشد، من چک کردم، من یک نسخه از بانکم رو در پوشه ی bin دارم؛ یه نسخه هم در بیرون این پوشه، جایی که فرمهام هم هست! من دقیقا از روش ساخت کانکشن استرینگ شما استفاده کردم؛ و در قسمت آدرس، آدرس دقیق بانک اطلاعاتیم رو قرار دادم!
اما یه موضوعی رو میخواستم بگم، من چون دیتا ست و دیتا سورس و اینها رو قبلا به روش ویزاردی ساختم، احساس می کنم چون قبلا دیتا کانکشن استرینگی داشتم؛ الان که این برنامه ی شما رو می نویسم برای ساخت کانکشن استرینگ؛ مثلا کلمه ی oledbconnection برای ساخت، وقتی شما نوشتید به صورت سیاه بوده؛ اما من که می نویسم این کلمه به صورت آبی رنگ ظاهر میشه! به نظر شما این دلیل نمیشه که من قبلا یه کانکشن استرینگ داشتم؟
و یه سوال دیگه؛ شما چرا دو تا پایگاه داده درست کردید، و در هر کدام یک جدول تعریف کردید؟
من یه پایگاه داده دارم به نام univercity amar که تمام جداولم و ارتباطات بین اونها؛ در آن وجود داره! پس من باید در هر دو قسمت برای فرم لاگین و همین طور فرم combobox ام از همین نام در قسمت provider بنویسم دیگه درسته؟
خواهشا کمکم کنید که مشکل فرم اولیه و اصلیم حل بشه!
من باید هر چه زودتر پروژه ام رو تحویل بدم!
ممنون و سپاسگذارم
دوست گرامي...
بله منظور من همون بانك بود + ساير فايل هاي MDB...
بايد عرض كنم كه شما يك بانك رو يا بايد با Wizard وارد كنيد و يا به صورت مستقيم ConnectionString مربوط به اون رو توليد كنيد. تركيب هر دو تاي اين ها موجب بروز مشكل ميشه. پس پيشنهاد مي كنم تنها از يكي از اين روش ها استفاده كنيد و پروژه ي خودتون رو از روش ديگري به طور كامل پاك سازي كنيد.
نمايش يك عبارت به رنگ آبي بيان گر يه عبارت كليدي هست. در اين صورت شما حتما" بايد نام متغير خودتون رو تغيير بديد و از نام هاي ديگري براي متغير هاي OLEDB استفاده كنيد. اميدوارم مشكل حل بشه.
استفاده از دو پايگاه جدا دليل خاصي نداره. فقط براي وضوح بهتر سورس كد اين كار رو كردم.
و در مورد سوال آخر...بله شما بايد همون پايگاه رو در فرم هاي مختلف لود كنيد و بر حسب نياز از جداول مختلفش استفاده كنيد.
موفق باشيد
آرمين
'چو ایران نباشد، تن من مباد
Dim Armin As Iranian
If Iran.Enabled = False Then Armin.Enabled = False
delroya (03-08-11), P A R H A M (02-08-11), Rezasam1 (02-08-11)
دوست عزیز با سلام و عرض ادب
راستش من data source رو که به صورت ویزاردی ساخته بودم رو حذف کردم؛ اما سوالی داشتم، اینکه با روش ساخت کانکشن استرینگ شما، به صورت برنامه نویسی من چطوری می تونم دیتا ست؛ دیتا تیبل آدابتر داشته باشم؟
آخه! من در فرم های بعدیم، از dataset ای که ویزاردی ساخته بودم، استفاده کرده بودم، که حالا با حذف اون، تمام فرم های بعدیم هم دچار مشکل شده اند!
ببینید من وقتی این جملات رو می نویسم به چه شکلی هستند.
2..jpg
یکبار دیگه واضح تر می فرستم؛ می خوام بدونید که چه اتفاقی توی خطوط پروژه ام افتاده!
با همه ی این تفاسیر من هنوز هم همون پیغام not a valid file name رو دریافت می کنم.
3..jpg
با سلام!
نحوه ی ایجاد DataSet و نحوه ی ایجاد DataTable رو با کد نویسی فکر کنم قبلا" خدمتتون توضیح داده بودم. لطفا" به لینک های زیر مراجعه کنید:
How to create a DataTable programmatically
How to create a DataSet with DataRelations Programmatically
مشکلی هم که با حذف عناصری چون DataSet برایتان پیش اومده طبیعی هستش. برای رفع اون هم باید مجددا" عناصر حذف شده رو ایجاد کنید و کد نویسی و خواص عناصر وابسته رو مجددا" چک کنید.
و اما خطای not a valid file name:
بنده مشکل خاصی در ساختار سورس شما مشاهده نمی کنم. اما دو اشکال عمده در تعریف ConnectionString شما وجود داره!
در واقع شما مسیر پایگاه داده رو کاملا" غلط وارد کردید؛ به همین دلیل خطای نامعتبر بودن مسیر رو دریافت می کنید!!!
Application.StartupPath.ToString() نماینده ی مسیری است که برنامه ی شما در درون اون در حال اجرا شدن است و شما مجددا" این مسیر رو با مسیر دیگری پیوند زدید که حاصل یک مسیر غلط خواهد بود. برای رفع مشکل بانک univercity amar.mdb رو در مسیر bin کپی کنید. فکر کنم وجود فاصله ی خالی در نام پایگاه داده مشکل ساز بشه. پس نام فایل رو به univercityamar.mdb تغییر بدید (rename). سپس ConnectionString رو به صورت زیر تعریف کنید:
اشکال بعدی در اون مسیری هستش که به StartUpPath پیوند زدید. فکر می کنم عبارت C:/ صحیح نباشه و باید از C:\ استفاده کنید (به تفاوت خطوط مورب دفت کنید.) این امر احتمالا" برای سایر خطوط مورب به کار برده شده هم صدق می کند. دقیقا" اطلاع ندارم ولی گمان کنم به دلیل وجود فضای خالی در مسیر باید کل مسیر رو در داخل کارکتر های ' قرار بدید. گرچه استفاده از این مسیر در رشته ی اتصال لزومی نداره اما در زمان کاربرد آن باید به این نکات توجه شود.کد:myConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" + Application.StartupPath.ToString() + "/univercityamar.mdb";
موفق باشید
آرمین
'چو ایران نباشد، تن من مباد
Dim Armin As Iranian
If Iran.Enabled = False Then Armin.Enabled = False
delroya (04-08-11), M A H R A D (04-08-11)
آقا آرمین من فاصله ی خالی در نام پایگاهم رو از بین بردم؛ اون رو در قسمت bin/Debug کپی کردم؛ بنابراین من الان یه کپی از پایگاهم رو در اینجا دارم؛ یه کپی هم در قسمت پوشه ی اصلیم که پوشه هایی مثل bin و فرمهام در اون قرار دارند، وجود داره!
بعد هم آدرس رو به صورت univercityamar.mdb / وارد کردم.
بعد که برنامه رو اجرا کردم، پیغام خطایی که دریافت کردم این بود:
error database: No Value given for one or more required parameters
در ضمن من وقتی خطوط مورب رو به صورت درست آدرس وار وارد میکنم این خطا رو بهم میده! unrecognized escape sequence
و سوال آخر اینکه من وقتی dataset رو به صورت ویزاردی ساخته بودم، در قسمت solution Explorer نام دیتا ست و دیتا آداپترم ظاهر شده بود که می تونستم از اونها استفاده کنم، یا در پنجره ی data source هم نام اون اومده بود.
من الان که میخوام برنامه نویسی کنم، نمی دونم دقیقا باید اینها رو در کدوم فرم و دقیقا چه قسمتی تعریف کنم که درست و به جا باشه!
اگه لطف کنید زمینه ی کاربرد اینها رو برام توضیح بدید ممنون میشم!
من در مورد نحوه ی تعریف آدرس ConnectionString اشتباه کردم. اصلا" به یاد نداشتم که در سی شارپ چنین تعریفی باعث بروز خطای unrecognized escape sequence میشه که به همین خاطر عذر خواهی می کنم. شما می تونید آدرس رو به صورت های زیر تعریف کنید:
کد:myConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=F:/Documents and Settings/Internet/My Documents/Visual Studio 2008/Projects/DelroyaProj/DelroyaProj/bin/Debug/UsersDB.mdb";
که دقیقا" مطابق اون چیزی هست که خودتون در ابتدا استفاده کرده بودید و یا می تونید از شکل زیر استفاده کنید:
کد:myConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=F:\\Documents and Settings\\Internet\\My Documents\\Visual Studio 2008\\Projects\\DelroyaProj\\DelroyaProj\\bin\\Debug\\UsersDB.mdb";
و اما سوال اول شما:
در واقع خطای No Value given for one or more required parameters اصلا" مربوط به ConnectionString نیست بلکه مربوط به فرمان cmd هست که احتمالا" به دلیل به کار بردن کلمه ی کلیدی login هست. فکر کنم اگه Cmd رو به یکی از دو شکل زیر تعریف کنید مشکل حل بشه:
کد:OleDbCommand cmd = new OleDbCommand("select * from [login] where username='" + textBox1.Text + "'", myConnection);
و یا
کد:OleDbCommand cmd = new OleDbCommand("select * from [login] where [username]='" + textBox1.Text + "'", myConnection);
به کاربرد [] برای تمایز نام جدول از کلمه ی کلیدی دقت کنید.
و در مورد سوال آخر باید عرض کنم: کد های مربوط به DataSet که در بخش Main تابع کنسولی قرار داشت، هسته ی اصلی به کارگیری دیتاست است که می تونید از اون در روال ها و رویداد های مختلف استفاده کنید. در واقع شما باید از این قطعه کد با اعمال تغییرات مورد نظر خودتون در رویداد هایی نظیر کلیک Button در فرم های مختلف استفاده کنید. برای آشنایی بیش تر با این کار پیشنهاد می کنم که سورس این برنامه رو مشاهده کنید.
موفق باشید
آرمین
'چو ایران نباشد، تن من مباد
Dim Armin As Iranian
If Iran.Enabled = False Then Armin.Enabled = False
delroya (06-08-11), M A H R A D (04-08-11)
آقا آرمین عزیز؛ بی نهایت از پاسخگویهاتون ممنونم!
راستش امروز لب تابم رو نیاورده ام که همین جا تست کنم و پاسخش رو براتون بنویسم! امیدوارم وقتی رفتم خونه و تست کردم؛ این دفعه برای تشکر از اجرای اون خدمتتون برسم!
چون فکر میکنم دارم زمان زیادی رو از دست میدم.
فقط از خداوند متعال میخوام که توی این ماه عزیز، هر جایی که هستید، همیشه شاد و سلامت باشید و به آرزوهایی که به صلاحتون هست برسید! ان شاء ا...
M A H R A D (06-08-11), ravegoat (06-08-11)
|
1 کاربر در حال مشاهده این موضوع. (0 عضو و 1 میهمان)
Bookmarks