PDA

View Full Version : ذخیر اطلاعات بصورت حقیقی داخل بانک اطلاعاتی یا ذحیره مجازی داخل data set



khadem1386
جمعه 06 دی 1387, 12:02 عصر
با سلام و خسته نباشید به دوستان و اساتید.

من در vb2008 یک کانکشن درست کردم که با فایل access در ارتباط است. که بطور خود بخود data set و table adapter و data binding و query نیز بوسیله wizard درست شد و من در انتها توانستم یک text box را نیز به یکی از فیلدهای خودم bind بکنم. و اطلاعات اکسس را بخوانم.
به گونه ای که وقتی به وسیله data navigation داخل برنامه ، در بین رکودهایم جابجا می شوم در تکس باکس نیز اطلاعات تغییر می کند.

وقتی که من در متن تکس باکس تغییراتی می دهم یا دکمه NewRecord را می زنم این تغییرات اعمال می شود . (اما موقتی است)
مثلا اگر رکور شماره 2 ، فیلد LName ، سینا باشد من آن را تبدیل می کنم به سیناپور بعد به رکور های دیگر می روم وقتی که به رکورد 2 برمی گردم همچنان سیناپور است . ولی وقتی برنامه را خاموش می کنم و دوباره اجرا می کنم تغییرات من از بین می رود انگار ویرایش فقط بطور ظاهری اجراشده.

در vb6 تغییراتِ این چنینی، بوسیله ADO مستقیماً در روی فایل MDB هم ذخیره می شود.

ولی در vb2008 نمی دانم این تعییرات موقتا در کجا ذخیره می شود آیا در dataset ذخیره می شود یا در table adapter ؟ ولی در هر جا ذخیره می شود موقتی بود با پایان برنامه از بین می رود.

چگونه میتوانم ویرایش خودم را در پایان کار یا در هر مرحله به فایل MDB نیز منتقل کنم. تا در آنجا هم save شود.

به طور خلاصه من از فایل اکسس می توانم بخوانم ولی بر روی آن نمی توانم بنویسم.

با تشکر از وقت شما

sepehr.net
جمعه 06 دی 1387, 16:55 عصر
سلام
با یک جستجو سریع تر به مقصد خود میرسیدید
http://barnamenevis.org/forum/showthread.php?t=138058

mostafaaa
جمعه 06 دی 1387, 19:04 عصر
سلام دوست من
اگه منظورت توی محیط IDE هست که طبیعیه چون وقتی از طریق ویزارد یه DB به پروژت اضافه میشه، یه نسخه از اون هم در پوشه اصلی پروژت نگهداری میشه و هر بار که برنامه رو ران میکنی و یه رکورد اضافه میکنی و
اگه بعدش یه تغییری توی کدهات بدی در اجرای بعدی دوباره دیتابیست هم با اون دیتابیس که گفتم سینک میشه و در حقیقت خالی میشه.
اگه مشکلت رو درست حدس زده باشم ، جای نگرانی نیست و زمانی که برنامت نهایی شد در زمان اجرا این مشکل رو نخواهی داشت.

khadem1386
دوشنبه 09 دی 1387, 09:30 صبح
مظورتون اینکه فایل MDB مرتبا از روی اصلی کپی می شه؟
و تغییراتی که توش اعمال می شه از بین می ره؟

آیا منظورتون از IDE یعنی اجرا در فولدر Debug بطور موفقت است؟ که همنون run کردن برنامه در IDE vb2008 است. درسته؟

بازم تشکر

mostafaaa
دوشنبه 09 دی 1387, 09:52 صبح
سلام دوست من

آیا منظورتون از IDE یعنی اجرا در فولدر Debug بطور موفقت است؟ که همنون run کردن برنامه در IDE vb2008 است. درسته؟
بله منظورم دقیقا همینه!

khadem1386
دوشنبه 09 دی 1387, 10:32 صبح
ولی من فکر می کنم که تغییرات تنها در روی Ram ذخیره می شه و روی هیچ کدوم از MDB ها اثری نمی گذاره
چه اونی که توی فولدری debug است و چه اونی که توی فولدر اصلی برنامه است وقتی که برنامه را ران می کنم و اطلاعات را تغییر می دم در حالی که برنامه هنوز بازه اطلاعات هیچ کدام از MDB ها تغییری نمی کنه.

(اطلاعات ذخیره می شه چون وقتی رکوردم را بوسیله navgiationbar تغییر می دم و دوباره برمی گردم سر هم رکورد قبلی توش اطلاعات جدید هست.
ولی وقتی فولدر debug را باز می کنم و فایل MDB را باز می کنم اطلاعات توی اون عوض نشده.) پس بنا براین اطلاعات توی ram ذخیره شده بطور موقت)

khadem1386
دوشنبه 09 دی 1387, 10:36 صبح
http://barnamenevis.org/forum/attachment.php?attachmentid=26955&stc=1&d=1230536962

در ضمن من از table Adapterاستفاده می کنم و یک data set هم دارم ولی ندارم data adapter .
بجاش اوبجکتهای Table1BindingSource وBindingNavigator1 را دارم.

از یک کد هم که استفاده کردم این بوده که error نداده ولی باز باعث نمی شه که اطلاعات توی MDB من Save بشه
Me.Table1TableAdapter.Update(DataSet1)

این کد هم که از اول خود wizard تولید کرده
) Me.Table1TableAdapter.Fill(Me.DataSet1.Table1

با تشکر از جواب فوری قبلی

khadem1386
سه شنبه 10 دی 1387, 08:56 صبح
این پاسخ بود.

سلام دوست من
اگه منظورت توی محیط IDE هست که طبیعیه چون وقتی از طریق ویزارد یه DB به پروژت اضافه میشه، یه نسخه از اون هم در پوشه اصلی پروژت نگهداری میشه و هر بار که برنامه رو ران میکنی و یه رکورد اضافه میکنی و
اگه بعدش یه تغییری توی کدهات بدی در اجرای بعدی دوباره دیتابیست هم با اون دیتابیس که گفتم سینک میشه و در حقیقت خالی میشه.
اگه مشکلت رو درست حدس زده باشم ، جای نگرانی نیست و زمانی که برنامت نهایی شد در زمان اجرا این مشکل رو نخواهی داشت.



اگر فایل exe برنامه داخل فولدر debuge را بطور مستقیم از طریق windows صدا بزنیم این مشکل را نخواهیم داشت.

همونطور که آقای mostafaaa گفتند که از ایشون به این وسیله تشکر می شود

khadem1386
چهارشنبه 30 بهمن 1387, 12:22 عصر
سلام من تصمیم گرفتم که یک دکمه save برای data set خودم درست کنم.
ولی متاسفانه اطلاعات هنوز داخل هارد ذخیره نمی شوند.

هر چند که از داخل دیباگ برنامه را صدا می زنم
ولی از برنامه که می رم بیرون اطلاعات save نشده باقی می مونه.

این خط برای کلیک دکمه save نوشتم.
Me.Table1TableAdapter.Update(DataSet1)
Me.Table1TableAdapter.Update(DataSet1.Table1)o

حالا نمی دونم چگونه اطلاعات را ذخیره کنم


با تشکر از کمک شما

majid325
چهارشنبه 30 بهمن 1387, 21:47 عصر
اگر قبل از كد update ي كه نوشتي
DataSet.AcceptChanges() قرار دادي و درست نشد ,احتمالا SqlCommandBuilder به دلايلي نميتونه command مربوط به update رو بسازه.

mostafaaa
چهارشنبه 30 بهمن 1387, 21:58 عصر
سلام دوست من
من فكر ميكردم مشكل شما حل شده!!
در هر صورت ميتوني به تاپيك زير سر بزني ، مشكل اين دوستمون هم مشابه مشكل شماست.
http://www.barnamenevis.org/forum/showthread.php?p=678340
يا علي

khadem1386
پنج شنبه 01 اسفند 1387, 10:51 صبح
درسته من هم فکر می کردم که حل شده
اما حالا که پروژه پیشرفت کرده می بینم اجرای برنامه بطور مستقیم ( یعنی داخل دیباگ و بدون ide )به مشکل با ضبط برروی هارد برخود کرده.

http://barnamenevis.org/forum/attachment.php?attachmentid=28458&stc=1&d=1171912416
هر گاه دکمه ذخیره می زنم این کدها اجرا می شه
Me.Table1TableAdapter.Update(DataSet1)
Me.Table1TableAdapter.Update(DataSet1.Table1)o

اما اطلاعت ذخیره نمی شه.

اما اگر بروی علامت زرد رنگ بعلاو ه که در عکس می بینید ( یعنی دکمه NEW RECORD) می زنم هم یک رکورد تازه درست می کنه هم همه تغیراتی که روی رم انجام شده را به هارد منتقل می کنه.
پس برنامه من قادر به ذخیره بر روی هارد هست ولی. .

مشکل اینجاست که خودم نمی تونم یک دکمه ذخیره مسقل درست کنم.
و وقتی درست می کنم کار نمی کنه.

البته همانطور که اطلاع دارید از کد نویسی استفاده نکردم

از DataSet1.AcceptChanges()
هم استفاده کردم ولی تغییری بوجود نیامد

در ضمن من نمی دونم که SQLCommander استفاده کردم یا نه چون طوی کدهایم چنین چیزی نیست

با تشکر

khadem1386
شنبه 03 اسفند 1387, 22:49 عصر
کسی نظری نداره؟

majid325
یک شنبه 04 اسفند 1387, 02:45 صبح
اگه خواستی برنامتو با بانکش بزار تا ببینم مشکلشو میتونم حل کنم یا نه.

khadem1386
دوشنبه 05 اسفند 1387, 12:24 عصر
سلام
این فایل پروژه هست.


با تشکر

mostafaaa
دوشنبه 05 اسفند 1387, 17:59 عصر
سلام دوست من
کد ذخیره کردنت رو به این شکل تغییر بده مشکلت برطرف میشه!!

Private Sub Button15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button15.Click
Me.Validate()
Me.Table1BindingSource.EndEdit()
Me.Table1TableAdapter.Update(DataSet1)
Me.Table1TableAdapter.Update(DataSet1.Table1)
End Sub
یا علی

khadem1386
سه شنبه 06 اسفند 1387, 10:49 صبح
آیا شما مشکل برنامه را تونستی مشاهده کنید؟

بعد از اصلاحات:
آیا برنامه توی کامپیوتر شما درست کار کرد؟

البته من الان در پشت کامپیوتر اصلی خودم نیستم که دستور شما را تست کنم ولی

مثل اینکه قبلا Me.Validate()
Me.Table1BindingSource.EndEdit()

را امتحان کرده بودم و نتیجه نگرفتم.


با تشکر

mostafaaa
سه شنبه 06 اسفند 1387, 16:41 عصر
سلام دوست من
هرگز ، امکان نداره، به هیچ وجه ، ... من کدی رو که تست نکردم توی سایت قرار نمیدم!!!؟؟؟؟؟؟؟؟؟؟
یا علی

karimi64bit
دوشنبه 13 دی 1389, 00:38 صبح
با سلام
بهترین روش برای ثبت داده با datatabl
یک DataSet با درج ورودی درست کنید مثل این
UPDATE Tbl_asnad
SET pcode = @pcode, hcode = @hcode, name = @name, fname = @fname, pic = @pic
WHERE (pcode = @pcodefind)
حالا برید تو برنامه
Me.Tbl_asnadTableAdapter.UpdateQuery(TextBox6.Text , TextBox7.Text, TextBox8.Text, TextBox9.Text, arrPic, TextBox6.Text)
اصلاً وقتی عبارت
Me.Tbl_asnadTableAdapter.UpdateQuery(
رو میزنی اسامی ورودی ها رو میخواد بهترین روش ویژوالی هستش