• 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#

Moderators: tungcan5diop, QUANITGROBEST

User avatar
lungocqua
Guru
Guru
Posts: 1225
Joined: Tue 18/08/2009 11:51 am
Location: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 times
Contact:

Re: VB.Net và Access Database

Postby lungocqua » Sat 17/07/2010 5:46 pm

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


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ổ
Posts: 66
Joined: Thu 26/03/2009 8:26 am

Re: VB.Net và Access Database

Postby bigboy83 » Sat 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.

User avatar
lungocqua
Guru
Guru
Posts: 1225
Joined: Tue 18/08/2009 11:51 am
Location: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 times
Contact:

Re: VB.Net và Access Database

Postby lungocqua » Sat 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
Attachments
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) Downloaded 1336 times
Last edited by lungocqua on Wed 16/02/2011 4:34 pm, edited 1 time in total.
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ổ
Posts: 66
Joined: Thu 26/03/2009 8:26 am

Re: VB.Net và Access Database

Postby bigboy83 » Tue 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 :)

User avatar
vuathongtin
Điều hành viên
Điều hành viên
Posts: 1028
Joined: Sun 02/05/2010 10:03 pm
Location: Xứ sở DG
Has thanked: 2 times
Been thanked: 105 times
Contact:

Re: VB.Net và Access Database

Postby vuathongtin » Tue 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
* Chuyên gia MMO
congtacvien.online

User avatar
lungocqua
Guru
Guru
Posts: 1225
Joined: Tue 18/08/2009 11:51 am
Location: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 times
Contact:

Re: VB.Net và Access Database

Postby lungocqua » Thu 22/07/2010 8:21 am

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! :)
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
Posts: 15
Joined: Sun 29/08/2010 8:30 pm

Re: VB.Net và Access Database

Postby hachun » Wed 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!

User avatar
vietteiv
Quản trị
Quản trị
Posts: 1323
Joined: Sat 10/02/2007 12:17 am
Location: 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 times
Been thanked: 71 times
Contact:

Re: VB.Net và Access Database

Postby vietteiv » Thu 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
Posts: 15
Joined: Sun 29/08/2010 8:30 pm

Re: VB.Net và Access Database

Postby hachun » Thu 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
Posts: 15
Joined: Sun 29/08/2010 8:30 pm

Re: VB.Net và Access Database

Postby hachun » Wed 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:
Image
Cảm ơn các bạn nhiều!

User avatar
lungocqua
Guru
Guru
Posts: 1225
Joined: Tue 18/08/2009 11:51 am
Location: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 times
Contact:

Re: VB.Net và Access Database

Postby lungocqua » Thu 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

User avatar
vuathongtin
Điều hành viên
Điều hành viên
Posts: 1028
Joined: Sun 02/05/2010 10:03 pm
Location: Xứ sở DG
Has thanked: 2 times
Been thanked: 105 times
Contact:

Re: VB.Net và Access Database

Postby vuathongtin » Thu 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
* Chuyên gia MMO
congtacvien.online

hachun
Thành viên chính thức
Thành viên chính thức
Posts: 15
Joined: Sun 29/08/2010 8:30 pm

Re: VB.Net và Access Database

Postby hachun » Sun 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!

User avatar
lungocqua
Guru
Guru
Posts: 1225
Joined: Tue 18/08/2009 11:51 am
Location: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 times
Contact:

Re: VB.Net và Access Database

Postby lungocqua » Sun 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
[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)
Last edited by lungocqua on Wed 16/02/2011 4:40 pm, edited 2 times in total.
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
Posts: 15
Joined: Sun 29/08/2010 8:30 pm

Re: VB.Net và Access Database

Postby hachun » Sun 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!

User avatar
lungocqua
Guru
Guru
Posts: 1225
Joined: Tue 18/08/2009 11:51 am
Location: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 times
Contact:

Re: VB.Net và Access Database

Postby lungocqua » Mon 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
Posts: 15
Joined: Sun 29/08/2010 8:30 pm

Re: VB.Net và Access Database

Postby hachun » Mon 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
Posts: 15
Joined: Sun 29/08/2010 8:30 pm

Re: VB.Net và Access Database

Postby hachun » Tue 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ì!.
Image

User avatar
lungocqua
Guru
Guru
Posts: 1225
Joined: Tue 18/08/2009 11:51 am
Location: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 times
Contact:

Re: VB.Net và Access Database

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

User avatar
vuathongtin
Điều hành viên
Điều hành viên
Posts: 1028
Joined: Sun 02/05/2010 10:03 pm
Location: Xứ sở DG
Has thanked: 2 times
Been thanked: 105 times
Contact:

Re: VB.Net và Access Database

Postby vuathongtin » Wed 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 :

Code: Select all

 row("MaNCC") = txtMaNCC.Text
Bùi Thành Nhân
* Chuyên gia MMO
congtacvien.online


Return to “[.NET] Bài viết hướng dẫn”

Who is online

Users browsing this forum: No registered users and 1 guest