Page 5 of 9

Re: VB.Net và Access Database

Posted: Sat 17/07/2010 5:46 pm
by lungocqua
bigboy83 wrote:cho em hỏi làm sao để cập nhật trực tiếp từ datagirdview mà ko cần xài textbox, chỉ cần nhập rồi nó tự cập nhật :( em tìm ko có

mong các anh chỉ giúp em

rất cảm ơn

Bạn xem cái này thử xem. Hãy xem thêm cái lỗi đã sửa ơ bên dưới nữa.
viewtopic.php?f=8&t=12759&p=76819#p76819
viewtopic.php?f=8&t=12955&p=77752#p77752

Re: VB.Net và Access Database

Posted: Sat 17/07/2010 8:51 pm
by bigboy83
Da cảm ơn anh, em đã làm đựoc rồi . anh cho em hỏi thêm nếu thêm trực tiếp thì có đựoc ko, em xem thấy có UserAddedRow, và RowsAdded, và em làm vẫn ko đựoc em xem các bài trên diễn đàn có bài hướng dẫn trên diễn đàn thì nói là nên cập nhật từ textbox
mong anh chỉ giúp thêm phần này

cảm ơn anh rất nhiều ah.

Re: VB.Net và Access Database

Posted: Sat 17/07/2010 9:23 pm
by lungocqua
Bạn có thể cập nhật (thêm) nhiều dòng cùng lúc trên DataGridView rồi cập nhật xuống dữ liệu. Đoạn mã này mình lấy trên diễn đàn có sửa lại đôi chút, chưa hoàn hảo lắm. Vì thời gian có hạn. :D
  1. Imports System.Data
  2. Imports System.Data.OleDb
  3. Public Class Form1
  4.     Dim cnn As New OleDbConnection, da As OleDbDataAdapter, dt As DataTable, bs As New BindingSource, cb As OleDbCommandBuilder
  5.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  6.         If cnn.State = ConnectionState.Closed Then
  7.             KetNoi()
  8.         End If
  9.         da = New OleDbDataAdapter("select * from SV", cnn)
  10.         da.Fill(dt)
  11.         cb = New OleDbCommandBuilder(da)
  12.         da.Update(dt)
  13.         dt.AcceptChanges()
  14.         dt.Clear()
  15.         dt.Dispose()
  16.         da.Dispose()
  17.         cnn.Close()
  18.         nguon()
  19.     End Sub
  20.     Sub KetNoi()
  21.         Dim str As String = "Provider= Microsoft.JET.OLEDB.4.0;Data Source = " & Application.StartupPath & "\db.mdb;"
  22.         Try
  23.             cnn = New OleDbConnection(str)
  24.             cnn.Open()
  25.         Catch ex As Exception
  26.             MsgBox(ex.Message, MsgBoxStyle.Exclamation)
  27.             cnn.Close()
  28.             Exit Sub
  29.         End Try
  30.     End Sub
  31.     Sub nguon()
  32.         On Error Resume Next
  33.         If cnn.State = ConnectionState.Closed Then
  34.             KetNoi()
  35.         End If
  36.         dt = New DataTable
  37.         da = New OleDbDataAdapter("select * from SV", cnn)
  38.         da.Fill(dt)
  39.         Me.DataGridView1.DataSource = dt
  40.         dt.Dispose()
  41.         da.Dispose()
  42.         cnn.Close()
  43.     End Sub
  44.  
  45.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  46.         nguon()
  47.     End Sub
  48. End Class
  49.  
  50. Public Class KetNoi
  51.     Dim cnn As OleDbConnection
  52.     Sub KetNoi()
  53.         Dim str As String = "Provider= Microsoft.JET.OLEDB.4.0;Data Source = " & Application.StartupPath & "\db.mdb;"
  54.         Try
  55.             cnn = New OleDbConnection(str)
  56.             cnn.Open()
  57.         Catch ex As Exception
  58.             MsgBox(ex.Message, MsgBoxStyle.Exclamation)
  59.             cnn.Close()
  60.             Exit Sub
  61.         End Try
  62.     End Sub
  63. End Class

Re: VB.Net và Access Database

Posted: Tue 20/07/2010 8:32 pm
by bigboy83
cam ơn anh nhiều lắm em tải về rồi và nó chạy rất tốt ,, cảm ơn làn nữa :D :)

Re: VB.Net và Access Database

Posted: Tue 20/07/2010 9:05 pm
by vuathongtin
Viết thì dài dòng như vậy chứ thật sự chỉ nằm trong 3 dòng code thôi.
Nguyên tắc : Cập nhật lại những thay đổi trong dataadapter
  1. Sub capnhatthaydoi()
  2.        Dim OleDbCommandBuilde cb= New OleDbCommandBuilder(da)
  3.         da.Update(dt)
  4.         dt.AcceptChanges()
  5.     End Sub

Re: VB.Net và Access Database

Posted: Thu 22/07/2010 8:21 am
by lungocqua
vuathongtin wrote:Viết thì dài dòng như vậy chứ thật sự chỉ nằm trong 3 dòng code thôi.
Nguyên tắc : Cập nhật lại những thay đổi trong dataadapter
  1. Sub capnhatthaydoi()
  2.        Dim OleDbCommandBuilde cb= New OleDbCommandBuilder(da)
  3.         da.Update(dt)
  4.         dt.AcceptChanges()
  5.     End Sub

Chính xác! :)

Re: VB.Net và Access Database

Posted: Wed 01/09/2010 10:54 pm
by hachun
Thật xấu hổ khi nhờ các bạn việc này.
Tôi đang học liên thông và đang làm bài tốt nghiệp bằng ngôn ngữ VB NET. Như các bạn đã biết, học như tôi thì chỉ cưỡi ngựa xem hoa thôi mà thật ra tôi chưa tiếp xúc với ngôn ngữ này, kể cả VB6.
Vậy nên tôi chân thành nhờ các bạn giải quyết giúp tôi vấn đề này:
Giả sử tôi có CSDL Access nhanvien.mdb đặt trong thu mục Debug. Tôi tạo một form trên đó có các nút lệnh: Thêm mới, Sửa, Xóa. Đồng thời bên dưới có một DataGirdView.
Nhờ các bạn viết giúp tôi câu lệnh cho các nút Thêm mới, Sửa, Xóa và lênh để DataGirdView hiển thị luôn sự thay đổi.
Chân thành cảm ơn các bạn!

Re: VB.Net và Access Database

Posted: Thu 02/09/2010 9:28 am
by vietteiv
bạn chịu khó đọc lại hết các bài hướng dẫn cơ bản trong forum, ắt sẽ làm được thôi. bạn nên tự làm rồi gặp vướng mắc chỗ nào thì gởi câu hỏi lên nhờ các bạn giải đáp thì tốt hơn.

Re: VB.Net và Access Database

Posted: Thu 02/09/2010 11:31 pm
by hachun
Cảm ơn bạn, để tôi tìm và thử lại lần nữa, có gì sẽ hỏi sau và mong nhận được sự giúp đỡ của các bạn!

Re: VB.Net và Access Database

Posted: Wed 08/09/2010 10:20 pm
by hachun
Các bạn ơi cho tôi hỏi chút, Tôi làm theo hướng dẫn đến phần Insert data thi gặp lỗi này, nhờ các bạn chỉ cách khắc phục:
Image
Cảm ơn các bạn nhiều!

Re: VB.Net và Access Database

Posted: Thu 09/09/2010 8:29 am
by lungocqua
Lỗi này chắc là do bạn Insert dữ liệu vào không phù hợp với các trường trong của bảng trong dữ liệu của bạn. Bạn nên kiểm tra lại thử xem. Thử Insert một cái của khóa chính coi có được không. :-/

Re: VB.Net và Access Database

Posted: Thu 09/09/2010 11:27 am
by vuathongtin
Dịch ra thấy : "lỗi trùng dữ liệu" , chắc là do trong bảng dữ liệu của bạn, có một số trường quy định thuộc tính là ko đc trùng dữ liệu đã nhập vào (not duplicate data).

Re: VB.Net và Access Database

Posted: Sun 12/09/2010 5:46 pm
by hachun
Tôi sửa mãi mà không được, nhờ các bạn sửa giúp! Cảm ơn các bạn nhiều!

Re: VB.Net và Access Database

Posted: Sun 12/09/2010 7:17 pm
by lungocqua
Nút Thêm
  1. Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
  2.         'Tao 1 row moi theo c?u trúc row trong dt
  3.         Dim adapter As New OleDbDataAdapter
  4.         Dim dt As New DataTable("tblNhaCC")
  5.         Dim da As New OleDbDataAdapter
  6.         Dim row As DataRow = dt.NewRow
  7.         'Sửa ở đây
  8.         '<-
  9.         'Lỗi: dt chỉ là cái bảng trống chưa có cột nào nên khi thêm dòng thì sẽ báo lỗi.
  10.         'Khắc phục: Thêm các cột cần thiết rồi hãy thêm dòng mới của các cột đó vào.
  11.         dt.Columns.Add("MaNCC")
  12.         dt.Columns.Add("TenNCC")
  13.         dt.Columns.Add("DC")
  14.         dt.Columns.Add("DT")
  15.         dt.Columns.Add("Fax")
  16.         '->
  17.         row("MaNCC") = txtMaNCC.Text '<- Thiếu sót: Bạn nên kiểm tra độ dài của kí tự ở ô textbox. Tốt nhất là bạn nên hạn chế độ dài của các ô textbox (MaxLength) bên khâu thiết kế.
  18.         row("TenNCC") = txtTenNCC.Text
  19.         row("DC") = txtDC.Text
  20.         row("DT") = txtDT.Text
  21.         row("Fax") = txtFax.Text
  22.         dt.Rows.Add(row)  ' add row m?i này vào dt
  23.         DataGridView1.DataSource = dt '<- Thiếu sót: Nên nạp lại toàn bộ dữ liệu lên DataGridView. Hiện tại thì bạn chỉ nạp các dữ liệu mới thêm khi lên DataGridView.
  24.         'Tao command d? update s? thay d?i trên vào file data ngu?n
  25.         Dim commandInsert As New OleDbCommand()
  26.         commandInsert.Connection = con
  27.         commandInsert.CommandType = CommandType.Text
  28.         'SQL for Insert
  29.         commandInsert.CommandText = "Insert Into tblNhaCC Values (@MaNCC,@TenNCC,@DC,@DT,@Fax)"
  30.         'Nap tham so cho các command trên
  31.         commandInsert.Parameters.Add("@MaNCC", OleDbType.VarChar, 10, "MaNCC")  ' N?p giá tr? cho tham s? @STT thông qua giá tr? c?a c?t ngu?n STT
  32.         commandInsert.Parameters.Add("@TenNCC", OleDbType.VarChar, 150, "TenNCC")
  33.         commandInsert.Parameters.Add("@DC", OleDbType.VarChar, 150, "DC")
  34.         commandInsert.Parameters.Add("@DT", OleDbType.VarChar, 13, "DT")
  35.         commandInsert.Parameters.Add("@Fax", OleDbType.VarChar, 13, "Fax")
  36.         'Dùng da d? áp d?t s? thay d?i trên vào File data ngu?n
  37.         da.InsertCommand = commandInsert 'gán command
  38.         da.Update(dt)
  39.     End Sub

Nút Xóa
[vbnet]Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click
'Get Record can update trong Table
Dim adapter As New OleDbDataAdapter()
Dim dt As New DataTable("tblNhaCC")

'<- dt chỉ là cái bảng trống nên khi dùng dt.Select sẽ báo lỗi.
'Khắc phục: lấy cấu trúc và dữ liệu của chính DataGridView1 làm cấu trúc bảng và dữ liệu cho dt.
dt = Me.DataGridView1.DataSource
'->

Dim da As New OleDbDataAdapter()
Dim row As DataRow = dt.Select("MaNCC = '" & (txtMaNCC.Text) & "'")(0)
row.BeginEdit()
row.Delete()
row.EndEdit()
'Tao command d? update s? thay d?i trên vào file data ngu?n
Dim commandDelete As New OleDbCommand()
commandDelete.Connection = con
commandDelete.CommandType = CommandType.Text
'SQL for Delete
commandDelete.CommandText = "Delete From tblNhaCC Where MaNCC=@MaNCC"
'Nap tham so cho các command trên
commandDelete.Parameters.Add("@MaNCC", OleDbType.VarChar, 10, "MaNCC")
'Dùng da d? áp d?t s? thay d?i trên vào File data ngu?n
da.DeleteCommand = commandDelete 'gán command

'Cập nhật lại những gì đã thay đổi.
'<-
da.Update(dt)
'->
End Sub[/vbnet]
Nút Sửa
[vbnet]Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click
'Get Record can update trong Table
Dim adapter As New OleDbDataAdapter()
Dim dt As New DataTable("tblNhaCC")
Dim da As New OleDbDataAdapter()

'<-Lỗi này tương tự như ở trên
dt = Me.DataGridView1.DataSource
'

Dim row As DataRow = dt.Select("MaNCC='" & (txtMaNCC.Text) & "'")(0)
'Update row
row.BeginEdit()
row("TenNCC") = txtTenNCC.Text
row("DC") = txtDC.Text
row("DT") = txtDT.Text
row("Fax") = txtFax.Text
row.EndEdit()
'Tao command d? update s? thay d?i trên vào file data ngu?n
Dim commandUpdate As New OleDbCommand()
commandUpdate.Connection = con
commandUpdate.CommandType = CommandType.Text
'SQL for Update
commandUpdate.CommandText = "Update tblNhaCC Set MaNCC=@MaNCC, TenNCC=@TenNCC, DC=@DC, DT=@DT, Fax=@Fax Where MaNCC=@MaNCC"
'Nap tham so cho các command trên
commandUpdate.Parameters.Add("@MaNCC", OleDbType.VarChar, 20, "MaNCC")
commandUpdate.Parameters.Add("@TenNCC", OleDbType.VarChar, 20, "TenNCC")
commandUpdate.Parameters.Add("@DC", OleDbType.VarChar, 20, "DC") '<- Bạn đã đảo lộn hai trường 'Địa chỉ' và 'Điện thoại'
commandUpdate.Parameters.Add("@DT", OleDbType.VarChar, 20, "DT") '<- Bạn đã đảo lộn hai trường 'Điện thoại' và 'Điạ chỉ'
commandUpdate.Parameters.Add("@Fax", OleDbType.VarChar, 20, "Fax") '<- Bạn đã để sai kiểu dữ liệu ở đây. Sửa Integer -> VarChar. Độ dài của dữ liệu cho mỗi trường là 20 kí tự, như vậy là có ít quá không?
'Dùng da d? áp d?t s? thay d?i trên vào File data ngu?n
da.UpdateCommand = commandUpdate 'gán command
'Dim a As New OleDbCommandBuilder(da)
da.Update(dt)
End Sub[/vbnet]
Hoàn tất! :)
Link demo của tập tin phía trên: http://www.mediafire.com/?cla62yt2w2tcx19 (up 16/02/2011)

Re: VB.Net và Access Database

Posted: Sun 12/09/2010 9:10 pm
by hachun
Chân thành cảm ơn bạn! Không ngờ bạn trả lời nhanh vậy. Có gì tôi lại hỏi tiếp nhé, mong bạn lungocqua và các bạn giúp đỡ và đừng cười tôi nhé! :-S
Chúc các bạn sức khỏe!

Re: VB.Net và Access Database

Posted: Mon 13/09/2010 12:55 am
by lungocqua
Dùng thử cái này xem! :D
  1. Imports System.Data
  2. Imports System.Data.OleDb
  3. Public Class frmNCC
  4.     Dim con As OleDbConnection
  5.     Private Sub frmNhaCC_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  6.         Dim str As String = "Provider= Microsoft.Jet.OLEDB.4.0;" _
  7.                         & "Data Source = " & Application.StartupPath & "\QLBH.mdb;"
  8.         con = New OleDbConnection(str)
  9.         con.Open()
  10.         Dim dt As New DataTable
  11.         Dim da As New OleDbDataAdapter("Select * From tblNhaCC", con)
  12.         da.Fill(dt)
  13.         DataGridView1.DataSource = dt
  14.         txtMaNCC.DataBindings.Add("Text", dt, "MaNCC")
  15.         txtTenNCC.DataBindings.Add("Text", dt, "TenNCC")
  16.         txtDC.DataBindings.Add("Text", dt, "DC")
  17.         txtDT.DataBindings.Add("Text", dt, "DT")
  18.         txtFax.DataBindings.Add("Text", dt, "Fax")
  19.     End Sub
  20.  
  21.     Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
  22.         Dim adapter As New OleDbDataAdapter
  23.         Dim dt As New DataTable
  24.         Dim cb As OleDbCommandBuilder
  25.         Dim da As New OleDbDataAdapter("select * from tblNhaCC", con)
  26.         da.Fill(dt)
  27.         Dim row As DataRow = dt.NewRow
  28.         row("MaNCC") = txtMaNCC.Text
  29.         row("TenNCC") = txtTenNCC.Text
  30.         row("DC") = txtDC.Text
  31.         row("DT") = txtDT.Text
  32.         row("Fax") = txtFax.Text
  33.         dt.Rows.Add(row)
  34.         cb = New OleDbCommandBuilder(da)
  35.         da.Update(dt)
  36.         dt.AcceptChanges()
  37.         da.Dispose()
  38.         cb.Dispose()
  39.         nguon()
  40.         con.Close()
  41.         Me.DataGridView1.MultiSelect = False
  42.         Me.DataGridView1.Item(0, Me.DataGridView1.RowCount - 2).Selected = True
  43.         DataGridView1.MultiSelect = True
  44.         Me.txtMaNCC.Focus()
  45.         Me.txtMaNCC.SelectAll()
  46.     End Sub
  47.  
  48.     Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click
  49.         Dim adapter As New OleDbDataAdapter
  50.         Dim dt As New DataTable
  51.         Dim cb As OleDbCommandBuilder
  52.         Dim da As New OleDbDataAdapter("select * from tblNhaCC", con)
  53.         da.Fill(dt)
  54.         Dim row As DataRow = dt.Select("MaNCC = '" & (txtMaNCC.Text) & "'")(0)
  55.         row.BeginEdit()
  56.         row("TenNCC") = txtTenNCC.Text
  57.         row("DC") = txtDC.Text
  58.         row("DT") = txtDT.Text
  59.         row("Fax") = txtFax.Text
  60.         row.EndEdit()
  61.         cb = New OleDbCommandBuilder(da)
  62.         da.Update(dt)
  63.         dt.AcceptChanges()
  64.         da.Dispose()
  65.         cb.Dispose()
  66.         Dim macc As String = Me.txtMaNCC.Text
  67.         nguon()
  68.         con.Close()
  69.         For i As Integer = 0 To Me.DataGridView1.RowCount - 2
  70.             If Me.DataGridView1.Item(0, i).Value = macc Then
  71.                 Me.DataGridView1.MultiSelect = False
  72.                 Me.DataGridView1.Item(0, i).Selected = True
  73.                 DataGridView1.MultiSelect = True
  74.                 Exit For
  75.             End If
  76.         Next
  77.     End Sub
  78.  
  79.     Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click
  80.         Dim adapter As New OleDbDataAdapter
  81.         Dim dt As New DataTable
  82.         Dim cb As OleDbCommandBuilder
  83.         Dim da As New OleDbDataAdapter("select * from tblNhaCC", con)
  84.         da.Fill(dt)
  85.         Dim row As DataRow = dt.Select("MaNCC = '" & (txtMaNCC.Text) & "'")(0)
  86.         row.BeginEdit()
  87.         row.Delete()
  88.         row.EndEdit()
  89.         cb = New OleDbCommandBuilder(da)
  90.         da.Update(dt)
  91.         dt.AcceptChanges()
  92.         da.Dispose()
  93.         cb.Dispose()
  94.         nguon()
  95.         con.Close()
  96.     End Sub
  97.  
  98.     Sub nguon()
  99.         Dim dt As New DataTable
  100.         Dim da As New OleDbDataAdapter("select * from tblNhaCC", con)
  101.         da.Fill(dt)
  102.         DataGridView1.DataSource = dt
  103.         txtMaNCC.DataBindings.Clear()
  104.         txtMaNCC.DataBindings.Add("Text", dt, "MaNCC")
  105.         txtTenNCC.DataBindings.Clear()
  106.         txtTenNCC.DataBindings.Add("Text", dt, "TenNCC")
  107.         txtDC.DataBindings.Clear()
  108.         txtDC.DataBindings.Add("Text", dt, "DC")
  109.         txtDT.DataBindings.Clear()
  110.         txtDT.DataBindings.Add("Text", dt, "DT")
  111.         txtFax.DataBindings.Clear()
  112.         txtFax.DataBindings.Add("Text", dt, "Fax")
  113.     End Sub
  114.  
  115.     Private Sub btnThoat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnThoat.Click
  116.         Me.Close()
  117.     End Sub
  118.  
  119.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  120.         txtMaNCC.Clear()
  121.         txtTenNCC.Clear()
  122.         txtDC.Clear()
  123.         txtDT.Clear()
  124.         txtFax.Clear()
  125.     End Sub
  126. End Class

Re: VB.Net và Access Database

Posted: Mon 13/09/2010 1:49 am
by hachun
Cảm ơn bạn, tôi đang định thêm một nút lệnh Load lại dữ liệu trên DataGridView vì code trước nó không hiển thị luôn được sau khi thêm một bản ghi mới. Giờ thì tôi có code của bạn rồi!

Re: VB.Net và Access Database

Posted: Tue 14/09/2010 10:39 pm
by hachun
lungocqua cho tớ hỏi thêm chút, code của bạn chạy rất tốt, nhưng khi tớ thử sửa ở trường khóa thì báo lỗi như hình dưới, các trường khác không ảnh hưởng gì!.
Image

Re: VB.Net và Access Database

Posted: Wed 15/09/2010 12:21 am
by lungocqua
Lỗi này là do, bạn có thể hiểu nôm na như thế này. Khi mình cập nhật dự liệu của một dòng nào đó thường thì sẽ có điều kiện kèm theo, giống như câu lệnh Update trong SQL vậy đó. Nó sẽ chỉ rõ chính xác bạn muốn cập nhật dòng nào trong cái bảng đó. Ở đây thì trong bài của bạn thì mình lấy trường MaCC làm điều kiện. Nên khi dữ liệu của MaCC thay đổi thì không cò điều kiện để mà so sánh đối chiếu nữa nên nó mới phát sinh ra lỗi. Giải pháp tình thế tạm dùng cách này vậy.
Thêm một biến txt_MaCC vào đầu chương trình.
  1. Imports System.Data
  2. Imports System.Data.OleDb
  3. Public Class frmNCC
  4.     Dim con As OleDbConnection
  5.     Dim txt_MaCC As String'<-Thêm biến này
  6. '........

Thêm một dòng cuối trong sự kiện Load:
[vbnet] Private Sub frmNhaCC_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'....Code phần này giữ nguyên. Chỉ thêm một dòng bên dưới.
'....
txt_MaCC = txtMaNCC.Text '<-Thêm tại đây.
End Sub[/vbnet]
Nút Sửa thì bạn sửa lại dòng báo lỗi như sau:
[vbnet]Dim row As DataRow = dt.Select("MaNCC = '" & (txt_MaCC) & "'")(0)[/vbnet]
Mình mới phát hiện thêm một lỗi nhỏ bên nút Xóa bị sửa lại luôn. Lỗi nhỏ này sẽ xuất hiện khi bạn nhập một từ khóa của MaNCC có dấu nháy kép rồi xóa nó.
[vbnet]Dim row As DataRow = dt.Select("MaNCC = '" & (txtMaNCC.Text.Replace("'", "''")) & "'")(0) '<-Bổ sung thêm sửa lỗi. Thay dấu nháy đơn bằng hai dấu nháy dơn.[/vbnet]
Để sửa hoàn chỉnh cái lỗi này thì bạn cần thêm một sự kiện SelectionChanged của DataGridView1.
[vbnet] Private Sub DataGridView1_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.SelectionChanged
txt_MaCC = txtMaNCC.Text
End Sub[/vbnet]
Nói thêm: Cái này thật ra không có gì khó hiểu. Như mình đã nói ở trên thì biến txt_MaCC để lưu lại giá trị của MaNCC khi bạn sửa rồi mang nó đi xét điều kiện thế thôi. Đặt nó trong sự kiện Load vì khi mới load Form lên thì các ô textbox đã Bindings thì sẽ có dữ liệu hiển thị và nó sẽ nhận lấy giá trị đó. Còn đạt trong DataGridView1_SelectionChanged khi bạn muốn sửa giá trị nào trên DataGridView1 thì bạn chon dòng đó rồi sẽ có xảy ra Bindings cho các ô textbox và nó cũng nhận lấy giá trị thay đổi từ cái ô textbox (txtMaNCC.Text) đó. :D

Re: VB.Net và Access Database

Posted: Wed 15/09/2010 12:40 am
by vuathongtin
Nguyên tắc khi update là dựa vào khóa nào đó (thường là khóa chính ) để lấy là record cần sửa.
Vì thế: khi update thì chỉ đc phép update các trường còn lại của record chứa khóa đó.
Trong Project của bạn khóa bạn dùng là MaNCC, mà bạn lại update lại khóa này nên mới bị lỗi (ko thể xác định đc record cần update)
--> Do đó bạn nên xóa dòng :

Code: Select all

 row("MaNCC") = txtMaNCC.Text