• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

VB.Net và Access Database

Các bài viết hướng dẫn về Visual Basic .NET và C#

Điều hành viên: tungcan5diop, QUANITGROBEST

Hình đại diện của người dùng
lungocqua
Guru
Guru
Bài viết: 1225
Ngày tham gia: T.Ba 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 time
Liên hệ:

Re: VB.Net và Access Database

Gửi bàigửi bởi lungocqua » T.Bảy 17/07/2010 5:46 pm

bigboy83 đã viết: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


Ta đã trở lại và quên hết tất cả! :D

bigboy83
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 66
Ngày tham gia: T.Năm 26/03/2009 8:26 am

Re: VB.Net và Access Database

Gửi bàigửi bởi bigboy83 » T.Bảy 17/07/2010 8:51 pm

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.

Hình đại diện của người dùng
lungocqua
Guru
Guru
Bài viết: 1225
Ngày tham gia: T.Ba 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 time
Liên hệ:

Re: VB.Net và Access Database

Gửi bàigửi bởi lungocqua » T.Bảy 17/07/2010 9:23 pm

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
Tập tin đính kèm
Cap Nhat Nhieu Dong_VB2005.zip
Cập nhật nhiều dòng từ DataGridView xuống dữ liệu.
Reup 16/02/2011
Link phụ: http://www.mediafire.com/?mqgwnwgmdiw
(25.58 KiB) Đã tải 1247 lần
Sửa lần cuối bởi lungocqua vào ngày T.Tư 16/02/2011 4:34 pm với 1 lần sửa.
Ta đã trở lại và quên hết tất cả! :D

bigboy83
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 66
Ngày tham gia: T.Năm 26/03/2009 8:26 am

Re: VB.Net và Access Database

Gửi bàigửi bởi bigboy83 » T.Ba 20/07/2010 8:32 pm

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 :)

Hình đại diện của người dùng
vuathongtin
Điều hành viên
Điều hành viên
Bài viết: 1028
Ngày tham gia: CN 02/05/2010 10:03 pm
Đến từ: Xứ sở DG
Has thanked: 2 time
Been thanked: 105 time
Liên hệ:

Re: VB.Net và Access Database

Gửi bàigửi bởi vuathongtin » T.Ba 20/07/2010 9:05 pm

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
Bùi Thành Nhân
CNTT-Sở Thông tin & Truyền thông tỉnh Phú Yên
giasulaptrinh.com
Skype:vuathongtin

Hình đại diện của người dùng
lungocqua
Guru
Guru
Bài viết: 1225
Ngày tham gia: T.Ba 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 time
Liên hệ:

Re: VB.Net và Access Database

Gửi bàigửi bởi lungocqua » T.Năm 22/07/2010 8:21 am

vuathongtin đã viết: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! :)
Ta đã trở lại và quên hết tất cả! :D

hachun
Thành viên chính thức
Thành viên chính thức
Bài viết: 15
Ngày tham gia: CN 29/08/2010 8:30 pm

Re: VB.Net và Access Database

Gửi bàigửi bởi hachun » T.Tư 01/09/2010 10:54 pm

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!

Hình đại diện của người dùng
vietteiv
Quản trị
Quản trị
Bài viết: 1318
Ngày tham gia: T.Bảy 10/02/2007 12:17 am
Đến từ: Cung cấp giải pháp quản lý doanh nghiệp, dự án, tư vấn xây dựng
Has thanked: 6 time
Been thanked: 69 time
Liên hệ:

Re: VB.Net và Access Database

Gửi bàigửi bởi vietteiv » T.Năm 02/09/2010 9:28 am

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.

hachun
Thành viên chính thức
Thành viên chính thức
Bài viết: 15
Ngày tham gia: CN 29/08/2010 8:30 pm

Re: VB.Net và Access Database

Gửi bàigửi bởi hachun » T.Năm 02/09/2010 11:31 pm

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!

hachun
Thành viên chính thức
Thành viên chính thức
Bài viết: 15
Ngày tham gia: CN 29/08/2010 8:30 pm

Re: VB.Net và Access Database

Gửi bàigửi bởi hachun » T.Tư 08/09/2010 10:20 pm

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:
Hình ảnh
Cảm ơn các bạn nhiều!

Hình đại diện của người dùng
lungocqua
Guru
Guru
Bài viết: 1225
Ngày tham gia: T.Ba 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 time
Liên hệ:

Re: VB.Net và Access Database

Gửi bàigửi bởi lungocqua » T.Năm 09/09/2010 8:29 am

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. :-/
Ta đã trở lại và quên hết tất cả! :D

Hình đại diện của người dùng
vuathongtin
Điều hành viên
Điều hành viên
Bài viết: 1028
Ngày tham gia: CN 02/05/2010 10:03 pm
Đến từ: Xứ sở DG
Has thanked: 2 time
Been thanked: 105 time
Liên hệ:

Re: VB.Net và Access Database

Gửi bàigửi bởi vuathongtin » T.Năm 09/09/2010 11:27 am

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).
Bùi Thành Nhân
CNTT-Sở Thông tin & Truyền thông tỉnh Phú Yên
giasulaptrinh.com
Skype:vuathongtin

hachun
Thành viên chính thức
Thành viên chính thức
Bài viết: 15
Ngày tham gia: CN 29/08/2010 8:30 pm

Re: VB.Net và Access Database

Gửi bàigửi bởi hachun » CN 12/09/2010 5:46 pm

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!

Hình đại diện của người dùng
lungocqua
Guru
Guru
Bài viết: 1225
Ngày tham gia: T.Ba 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 time
Liên hệ:

Re: VB.Net và Access Database

Gửi bàigửi bởi lungocqua » CN 12/09/2010 7:17 pm

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
  1. Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click
  2.         'Get Record can update trong Table
  3.         Dim adapter As New OleDbDataAdapter()
  4.         Dim dt As New DataTable("tblNhaCC")
  5.  
  6.         '<- dt chỉ là cái bảng trống nên khi dùng dt.Select sẽ báo lỗi.
  7.         '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.
  8.         dt = Me.DataGridView1.DataSource
  9.         '->
  10.  
  11.         Dim da As New OleDbDataAdapter()
  12.         Dim row As DataRow = dt.Select("MaNCC = '" & (txtMaNCC.Text) & "'")(0)
  13.         row.BeginEdit()
  14.         row.Delete()
  15.         row.EndEdit()
  16.         'Tao command d? update s? thay d?i trên vào file data ngu?n
  17.         Dim commandDelete As New OleDbCommand()
  18.         commandDelete.Connection = con
  19.         commandDelete.CommandType = CommandType.Text
  20.         'SQL for Delete
  21.         commandDelete.CommandText = "Delete From tblNhaCC Where MaNCC=@MaNCC"
  22.         'Nap tham so cho các command trên
  23.         commandDelete.Parameters.Add("@MaNCC", OleDbType.VarChar, 10, "MaNCC")
  24.         'Dùng da d? áp d?t s? thay d?i trên vào File data ngu?n
  25.         da.DeleteCommand = commandDelete 'gán command
  26.  
  27.         'Cập nhật lại những gì đã thay đổi.
  28.         '<-
  29.         da.Update(dt)
  30.         '->
  31.     End Sub

Nút Sửa
  1. Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click
  2.         'Get Record can update trong Table
  3.         Dim adapter As New OleDbDataAdapter()
  4.         Dim dt As New DataTable("tblNhaCC")
  5.         Dim da As New OleDbDataAdapter()
  6.  
  7.         '<-Lỗi này tương tự như ở trên
  8.         dt = Me.DataGridView1.DataSource
  9.         '
  10.  
  11.         Dim row As DataRow = dt.Select("MaNCC='" & (txtMaNCC.Text) & "'")(0)
  12.         'Update row
  13.         row.BeginEdit()
  14.         row("TenNCC") = txtTenNCC.Text
  15.         row("DC") = txtDC.Text
  16.         row("DT") = txtDT.Text
  17.         row("Fax") = txtFax.Text
  18.         row.EndEdit()
  19.         'Tao command d? update s? thay d?i trên vào file data ngu?n
  20.         Dim commandUpdate As New OleDbCommand()
  21.         commandUpdate.Connection = con
  22.         commandUpdate.CommandType = CommandType.Text
  23.         'SQL for Update
  24.         commandUpdate.CommandText = "Update tblNhaCC Set MaNCC=@MaNCC, TenNCC=@TenNCC, DC=@DC, DT=@DT, Fax=@Fax  Where MaNCC=@MaNCC"
  25.         'Nap tham so cho các command trên
  26.         commandUpdate.Parameters.Add("@MaNCC", OleDbType.VarChar, 20, "MaNCC")
  27.         commandUpdate.Parameters.Add("@TenNCC", OleDbType.VarChar, 20, "TenNCC")
  28.         commandUpdate.Parameters.Add("@DC", OleDbType.VarChar, 20, "DC") '<- Bạn đã đảo lộn hai trường 'Địa chỉ' và 'Điện thoại'
  29.         commandUpdate.Parameters.Add("@DT", OleDbType.VarChar, 20, "DT") '<- Bạn đã đảo lộn hai trường 'Điện thoại' và 'Điạ chỉ'
  30.         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?
  31.         'Dùng da d? áp d?t s? thay d?i trên vào File data ngu?n
  32.         da.UpdateCommand = commandUpdate 'gán command
  33.         'Dim a As New OleDbCommandBuilder(da)
  34.         da.Update(dt)
  35.     End Sub

Hoàn tất! :)
Link demo của tập tin phía trên: http://www.mediafire.com/?cla62yt2w2tcx19 (up 16/02/2011)
Sửa lần cuối bởi lungocqua vào ngày T.Tư 16/02/2011 4:40 pm với 2 lần sửa.
Ta đã trở lại và quên hết tất cả! :D

hachun
Thành viên chính thức
Thành viên chính thức
Bài viết: 15
Ngày tham gia: CN 29/08/2010 8:30 pm

Re: VB.Net và Access Database

Gửi bàigửi bởi hachun » CN 12/09/2010 9:10 pm

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!

Hình đại diện của người dùng
lungocqua
Guru
Guru
Bài viết: 1225
Ngày tham gia: T.Ba 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 time
Liên hệ:

Re: VB.Net và Access Database

Gửi bàigửi bởi lungocqua » T.Hai 13/09/2010 12:55 am

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
Ta đã trở lại và quên hết tất cả! :D

hachun
Thành viên chính thức
Thành viên chính thức
Bài viết: 15
Ngày tham gia: CN 29/08/2010 8:30 pm

Re: VB.Net và Access Database

Gửi bàigửi bởi hachun » T.Hai 13/09/2010 1:49 am

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!

hachun
Thành viên chính thức
Thành viên chính thức
Bài viết: 15
Ngày tham gia: CN 29/08/2010 8:30 pm

Re: VB.Net và Access Database

Gửi bàigửi bởi hachun » T.Ba 14/09/2010 10:39 pm

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ì!.
Hình ảnh

Hình đại diện của người dùng
lungocqua
Guru
Guru
Bài viết: 1225
Ngày tham gia: T.Ba 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 time
Liên hệ:

Re: VB.Net và Access Database

Gửi bàigửi bởi lungocqua » T.Tư 15/09/2010 12:21 am

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:
  1.     Private Sub frmNhaCC_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2. '....Code phần này giữ nguyên. Chỉ thêm một dòng bên dưới.
  3. '....
  4.         txt_MaCC = txtMaNCC.Text '<-Thêm tại đây.
  5.     End Sub

Nút Sửa thì bạn sửa lại dòng báo lỗi như sau:
  1. Dim row As DataRow = dt.Select("MaNCC = '" & (txt_MaCC) & "'")(0)

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ó.
  1. 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.

Để 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.
  1.     Private Sub DataGridView1_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.SelectionChanged
  2.         txt_MaCC = txtMaNCC.Text
  3.     End Sub

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
Ta đã trở lại và quên hết tất cả! :D

Hình đại diện của người dùng
vuathongtin
Điều hành viên
Điều hành viên
Bài viết: 1028
Ngày tham gia: CN 02/05/2010 10:03 pm
Đến từ: Xứ sở DG
Has thanked: 2 time
Been thanked: 105 time
Liên hệ:

Re: VB.Net và Access Database

Gửi bàigửi bởi vuathongtin » T.Tư 15/09/2010 12:40 am

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 :

Mã: Chọn hết

 row("MaNCC") = txtMaNCC.Text
Bùi Thành Nhân
CNTT-Sở Thông tin & Truyền thông tỉnh Phú Yên
giasulaptrinh.com
Skype:vuathongtin


Quay về “[.NET] Bài viết hướng dẫn”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách