PDA

View Full Version : دیتاگرید بایند شده به دیتابیس یا بالعکس



samiasoft
دوشنبه 29 خرداد 1396, 05:07 صبح
سلام دوستان

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

نام جدول دیتابیس : Table2
فیلد IDNumber از نوع اتونامبر می باشد.
فیلد numer کلید اصلی دیتابیس می باشد.

Public connect As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "/data.mdb") 'data.dll Public strsql As String
Public Bs As New BindingSource
Public da As New OleDbDataAdapter
Public ds As New DataSet
Public DataRow As DataRow


برای اتصال دیتابیس اکسس :
connect.Open()

strsql = "select esm,dat,fnumber,numer,idnumber from Table2 Order By idnumber "
da = New OleDbDataAdapter(strsql, connect)


Dim tblmap As DataTableMapping
tblmap = da.TableMappings.Add("Table", "Table2")


Ds.Clear()
da.Fill(Ds, "Table2")

Bs.DataSource = ds
Bs.DataMember = "Table2"

DataGridView1.DataSource = Bs

connect.Close()

برای اضافه کردن داده از دستور زیر استفاده کردم :
Try DataRow = ds.Tables(0).NewRow

DataRow("esm") = TextBox4.Text
DataRow("dat") = TextBox3.Text
DataRow("fnumber") = TextBox2.Text
DataRow("numer") = TextBox1.Text


ds.Tables("Table2").Rows.Add(DataRow)


Dim CB As New OleDbCommandBuilder(da)
da.InsertCommand = CB.GetInsertCommand
da.Update(ds)

MsgBox("با موفقیت ثبت شد", MsgBoxStyle.Information, "hi")
Catch ex As Exception

DataRow.RejectChanges()

MsgBox("تکراری")
End Try

برای حذف هم از دستور زیر استفاده کردم :
DataGridView1.Rows.RemoveAt(DataGridView1.Selected Rows(0).Index)

Dim Cb As New OleDbCommandBuilder(da)
da.DeleteCommand = Cb.GetDeleteCommand
da.Update(ds, "Table2")


برای ویرایش کردن :

Try

Form1.DataGridView1.SelectedRows(0).Cells(3).Value = TextBox1.Text
Form1.DataGridView1.SelectedRows(0).Cells(2).Value = TextBox2.Text
Form1.DataGridView1.SelectedRows(0).Cells(1).Value = TextBox3.Text
Form1.DataGridView1.SelectedRows(0).Cells(0).Value = TextBox4.Text


Bs.EndEdit()


Dim CB As New OleDbCommandBuilder(da)
da.UpdateCommand = CB.GetUpdateCommand
da.Update(ds)


MsgBox("با موفقیت ویرایش شد", MsgBoxStyle.Information, "hi")
Catch ex As Exception


ds.RejectChanges()

MsgBox("تکراری")
End Try



هنگامی که دستور حذف رو میزنم به درستی کارمیکنه . مشکل زمانی پیش میاد که من بخوام دکمه ثبت رو بزنم سپس دکمه حذف همون رکورد رو بزنم خطا میاد ! به نظرتون چرا اینطوریه؟

نکته اخر :
آیا اینطور کد نویسی برای من مشکلی بوجود نمیاره؟ سرعت اتصال و ثبت داده به نظر خودم در این حالت خیلی عالیه. شما نظری دارید در این باره؟

samiasoft
دوشنبه 29 خرداد 1396, 23:21 عصر
دوستان نظری ندارید؟

چرا بعد اضافه کردن و بلافاصله بعد حذف خطا میاد ؟!

http://s9.picofile.com/file/8298271626/2017_06_20_004145.jpg

نکته ای که جالبه این هستش که درحالی که من رکوردی را ویرایش میکنم و بعدش همونو حذف میکنم به درستی حذف میشود.


همچنین وقتی داده ای را اضافه میکنم و سپس میخوام اونو ویرایش کنم همچین خطایی میاد.

به نظرم هنگام ثبت داده ما باید یه مورددیگری رو هم اپدیت میکردیم که من از قلم انداختم؟ یا اینکه دستور دیگری برای اضافه کردن بنویسم

من همچنین دستور DataRow.AcceptChanges() رو بعد از اضافه کردن نوشتم ولی درست نشد.

samiasoft
سه شنبه 30 خرداد 1396, 06:19 صبح
دوستــــــــــــــــــان بالاخره تونستم مشکل رو حل کنم:لبخند:

مشکل بابت فیلد اتونامبر
IDNumber بود که با حذف این فیلد دیگه خطایی ندارم و به درستی کل پروژه کار میکنه.


اما دوستان نمیشد این فیلد رو حذف نمیکردیم و خطا رو حل میکردیم ؟ چون با حذف این فیلد هنگام لود کردن ردیف رکوردهای ثبت شده از قدیم به جدید به هم میریزه. چون هنگام لود من برحسب order by ایدی نامبر دیتابیس رو لود میکردم.

حال به نظرتون چاره چیه؟