PDA

View Full Version : مبتدی: عدم ثبت اطلاعات در Database



blackcats
پنج شنبه 31 تیر 1389, 20:47 عصر
با یک مشکلی چند وقتی هست درگیر هستم اونم اینکه زمانیکه میخوام اطلاعاتم رو داخل database ذخیره کنم ثبت میشه اما زمانیکه برنامه رو میبندم و باز میکنم همه چی اطلاعاتی ذخیره نشده و همه اون اطلاعات فقط در runtime ذخیره شده و بعئ که از برنامه میام بیرون همش پاک میشه.
یک پروژه که منظورمو بیشتر برسونم ضمیمه کردم.
نکته اینجاست که اگر connectionstring رو آدرس دیتابیس رو مستقیم بدم مشکلم حل میشه( connectionstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Database\db1.mdb;Persist Security Info=True") اما من آدرس مستقیم نده
connectionstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Database\db1.mdb;Persist Security Info=True"


متاسفانه فایل فایل داخل سایت آپلود نشد از این لینک استفاده کنید:
http://ispa.ir/sorkhdini.zip

ashkan209
جمعه 01 مرداد 1389, 16:42 عصر
برنامتو تست کردم
ذخیره میکرد ، برنامه روکه می بندم و دوباره بازش میکنم ، اطلاعات ثبت شده وجود داره
مشکل چیه ؟

محسن شامحمدی
جمعه 01 مرداد 1389, 19:04 عصر
من برنامتونو دانلود نکردم ولی کلا بعد از اتمام کار دیتابیس رو update می کنید؟

blackcats
جمعه 01 مرداد 1389, 23:29 عصر
آره update میکنم

blackcats
جمعه 01 مرداد 1389, 23:33 عصر
آقا من صد بار تاحالا این کارو انجام دادم اما اطلاعات ثبت نمیشه.
شما وقتی فایل access رو باز میکنی داخلش اطلاعات ثبت شده؟
من این مشکل رو تو تمام برنامه هام دارم و همیشه هم مجبورم آدرس مستقیم بدم(که خیلی خیلی یده چون باید توی یک drive کار کرد) اگر کمکم کنید ممنون میشم.
یا علی.

hero4000
شنبه 02 مرداد 1389, 08:24 صبح
دوست عزيز کانکشن استرينگت رو به شکل زير تعريف کن ببين مشکلت حل ميشه




"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Strings.Left(Application.ExecutablePath, Application.ExecutablePath.LastIndexOf("\")) & "\db1.mdb;"

blackcats
شنبه 02 مرداد 1389, 18:11 عصر
روش جالبی بود اما یه مشکل داره اینم این که میخواد database رو از آدرس
C:\Users\asadi\Desktop\sorkhdini\sorkhdini\bin\Deb ugdb1.mdb
بخونه اما اون توی آدرس
C:\Users\asadi\Desktop\sorkhdini\sorkhdini\databas e\db1.mdb
هست چیکارش میتونم بکنم؟
بازم ممنون.

ashkan209
شنبه 02 مرداد 1389, 18:33 عصر
از این رشته استفاده کن

Application.StartupPath & "\Debugdb1.mdb"

blackcats
شنبه 02 مرداد 1389, 18:58 عصر
من میخوام یه فولدر قبل از bin باشه یعنی توی root اصلی.
همون جایی که تمامی فایل هامون هست.

ashkan209
شنبه 02 مرداد 1389, 23:39 عصر
پس از روش دوستمون توی تاپیک 6 استفاده کن
و به تعداد شاخه که به سمت ریشه بر میگردی از \.. استفاده کنید

hero4000
یک شنبه 03 مرداد 1389, 07:58 صبح
دوست عزيز مطمئني که اينکاري که ميخواي بکني درسته ؟؟؟؟

شما بعد از کامپايل برنامت مشکل پيدا ميکني

فرض کن برنامت رو کامپايل کردي و توي يک شاخه گذاشتي

خوب حالا بايد برنامت رو توي دو تا شاخه تو در تو بذاري و بعدش بايد ديتابيست رو توي دو تا شاخه بيرونتر بذاري

درستش اينه که شاخه ديتابيست رو توي شاخه Debug بذاري بعد کافيه توي اون دستوري که دادم قبل از اسم ديتابيست اسم شاخه ديتابيست رو هم بنويسي

بازم اگه سوالي بود در خدمتم

hero4000
یک شنبه 03 مرداد 1389, 08:17 صبح
از این رشته استفاده کن

Application.StartupPath & "\Debugdb1.mdb"

دوست من شما هم از اين دستور استفاده نکن

آخه اگه يکي از برنامه شما Shortcut بسازي و Start In اونو هيچي ننويسه يا چيز ديگه اي بذاره ( که البته بعضي وقتها خود ويندوز هم اينکار رو ميکنه ) اونوقت بانکتون گم ميشه

nasim bahari
یک شنبه 03 مرداد 1389, 09:45 صبح
سلام.........

1- اول اینکه فایل بانک رو توی ریشه سولوشن قرار بده.

2- باید یکی از خاصیت های فایل بانک و دیتاست ( متاسفانه VB روی سیستمم نصب نیست) رو تغییر بدی که حالت های مختلفی داره مثل Do Not Copy و .... هر بار یکی رو انتخاب کن و بعد برنامه رو کامپایل کن و ببین در کدوم حالت کارت راه می افته....

من هم قبلاً این مشکل رو داشتم و مشکلم حل شد..........ببخشید اگه این جوری توضیح دادم ............اخه تازه Win رو نصب کرده ام و VS نصب ندارم.......

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

hero4000
یک شنبه 03 مرداد 1389, 11:52 صبح
سلام.........

1- اول اینکه فایل بانک رو توی ریشه سولوشن قرار بده.

2- باید یکی از خاصیت های فایل بانک و دیتاست ( متاسفانه VB روی سیستمم نصب نیست) رو تغییر بدی که حالت های مختلفی داره مثل Do Not Copy و .... هر بار یکی رو انتخاب کن و بعد برنامه رو کامپایل کن و ببین در کدوم حالت کارت راه می افته....

من هم قبلاً این مشکل رو داشتم و مشکلم حل شد..........ببخشید اگه این جوری توضیح دادم ............اخه تازه Win رو نصب کرده ام و VS نصب ندارم.......

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

دوست عزيز لطفا اول اين کاري رو که خودتون گفتيت رو عملي کنين بعد به بقيه پيشنهاد بدين

يعني شما ميگين کانکشن استرينگ دوستمون چي بايد باشه ؟؟؟؟

اون قسمت Do Not Copy هم مال اينه که خود برنامه بياد اون فايلي که شما جاي ديگه گذاشتين رو خودش توي شاخه Debug کپي کنه و اين چه ربطي به مشکل دوستمون داره نميدونم

لطفا خودتون يک چک بکنين بعد دوستمون رو راهنمائي کنين

blackcats
یک شنبه 03 مرداد 1389, 21:38 عصر
از راهنمایی همه تشکر دارم
الان من database ام رو کجا ذخیره کنم و چه آدرسی برای connectionstring استفاده کنم که اگر فولدر برنامه هر جا ریخته شد آدرس Database ثابت بمونه.

hero4000
دوشنبه 04 مرداد 1389, 08:35 صبح
دوست عزيز کانکشن استرينگ رو که توي پست 6 بهتون گفتم

ديتابيس رو هم توي شاخه Debug برنامه بايد بذاري

f.nabavi
دوشنبه 04 مرداد 1389, 10:46 صبح
سلام
دوست عزیز به احتمال قوی برنامه شما و کانکشن شما هیچ مشکلی نداره ولی شما داری برنامه رو در حالت debug اجرا میکنی. حالت debug مخصوص تست هست. به خاطر همین ویژوال استدیو اصل بانک اطلاعات شما رو دست نخورده نگه میداره و هر بار که برنامه رو اجرا میکنی اون رو به عنوان دیتابیس برنامه در نظر میگیره. برای جلوگیری از این مشکل برنامه رو در حالت release اجرا کن. کانکشن رو هم همون مسیر exe برنامه بذار که در هر آدرسی برنامه ات اجرا بشه
من همه کانکشن ها برنامه شما رو برابر
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database\db1.mdb;Persist Security Info=True
گذاشتم. (هم در کد form) هم در Db1TableAdapter از فرم test
برنامه به خوبی اجرا شد و در اجرای دوم اطلاعات رو برگردوند

blackcats
سه شنبه 05 مرداد 1389, 12:59 عصر
نه در حالت دیباگ نیست
استفاده از روش Strings.Left(Application.ExecutablePath, Application.ExecutablePath.LastIndexOf(("\"))) باعت میشهاگر از exe برنامه کپی گرفته بشه روی desktop یا هر جای دیگه آدرس database گم بشهو فقط باید shortcut برنامه کپی بشه.
آیا استفاده از این روش که دوست خوبمون معرفی کرد آیا تنها روش و بهترین روش هست.

راستی استفاده از Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database\db1.mdb;Persist Security Info=True بعد از خروج از برنامه هیچ اطلاعاتی ثبت نشده فقط در runtime و داخل dataset اطلاعات ذخیره شده.

blackcats
چهارشنبه 06 مرداد 1389, 10:12 صبح
دوستان کسی نظری نداره

hero4000
چهارشنبه 06 مرداد 1389, 17:17 عصر
دوست عزيز شما داري دنبال چي ميگردي

منظورت چيه که کسي بياد فايل اجرائي برنامه رو جاي ديگه کپي کنه

اين کار که اشتباه محضه پس شما فکر اين رو هم بکن که يکي بياد شاخه ديتابيست رو يک جايه ديگه کپي کنه

پس Shortcut رو واسه چي ساختن

جواب شما خيلي وقته داده شده پس بي زحمت دنبال خرابکاريهاي کاربر نگرديد وگرنه بايد چند سال بشينين و انواع خرابکاريهاي کاربر رو پيش بيني و اگه تونستين راه خنثي کردنش رو هم پيدا کنين

مثلا شايد کاربر فايل اجرائي برنامه شما رو پاک کرد ... واي واي حالا چيکار کنين :قهقهه:

m_azari16
چهارشنبه 06 مرداد 1389, 22:18 عصر
سلام ببین دوست عزیز می تونی برای بار اول که برنامه باز میشه آدرس محل نصب برنامه رو از کارببر بپرسی بعد اون رو تو یه کلید رجیستری بنویسی و هر بار که برنامه باز شد اون آدرس رو بخونی
البته این یه روش سرخ پوستی هست ولی شاید مشکل رو حل کنه