سلام دوستان
من میخواستم در روش اتصال دیتابیس به دیتاگرید طوری کدنویسی کنم که بعد از وارد کردن داده در دیتاگرید نیاز نباشه که دوباره کد اتصال رو فراخوانی کنم که دیتاگرید به روز بشه.یعنی با یکبار ثبت کردن هم در دیتابیس هم در دیتاگرید اطلاعات ثبت شوند.برای همین اومدم دستورات زیر رو نوشتم تا به گونه دیتابیس بایند بشه.
نام جدول دیتابیس : 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
هنگامی که دستور حذف رو میزنم به درستی کارمیکنه . مشکل زمانی پیش میاد که من بخوام دکمه ثبت رو بزنم سپس دکمه حذف همون رکورد رو بزنم خطا میاد ! به نظرتون چرا اینطوریه؟
نکته اخر :
آیا اینطور کد نویسی برای من مشکلی بوجود نمیاره؟ سرعت اتصال و ثبت داده به نظر خودم در این حالت خیلی عالیه. شما نظری دارید در این باره؟