VB.Net và Access Database

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

Các điều hành viên: tungcan5diop, QUANITGROBEST

Đăng trả lời
bigboy83
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 66
Ngày tham gia: Thứ 5 26/03/2009 8:26 am

Re: VB.Net và Access Database

Gửi bài 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.
Hình đại diện của thành viên
lungocqua
Guru
Guru
Bài viết: 1225
Ngày tham gia: Thứ 3 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 times
Tiếp xúc:

Re: VB.Net và Access Database

Gửi bài 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
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 về 1415 lần
Sửa lần cuối bởi 1 vào ngày lungocqua với 0 lần sửa trong tổng số.
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: Thứ 5 26/03/2009 8:26 am

Re: VB.Net và Access Database

Gửi bài 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 :)
Hình đại diện của thành viên
vuathongtin
Điều hành viên
Điều hành viên
Bài viết: 1028
Ngày tham gia: Chủ nhật 02/05/2010 10:03 pm
Đến từ: Xứ sở DG
Has thanked: 2 times
Been thanked: 105 times
Tiếp xúc:

Re: VB.Net và Access Database

Gửi bài 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
Bùi Thành Nhân
* Chuyên gia MMO
cachkiemtien.online
Hình đại diện của thành viên
lungocqua
Guru
Guru
Bài viết: 1225
Ngày tham gia: Thứ 3 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 times
Tiếp xúc:

Re: VB.Net và Access Database

Gửi bài by lungocqua »

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: Chủ nhật 29/08/2010 8:30 pm

Re: VB.Net và Access Database

Gửi bài 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!
Hình đại diện của thành viên
vietteiv
Quản trị
Quản trị
Bài viết: 1325
Ngày tham gia: Thứ 7 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 times
Been thanked: 70 times
Tiếp xúc:

Re: VB.Net và Access Database

Gửi bài 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.
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: Chủ nhật 29/08/2010 8:30 pm

Re: VB.Net và Access Database

Gửi bài 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!
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: Chủ nhật 29/08/2010 8:30 pm

Re: VB.Net và Access Database

Gửi bài 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:
Hình ảnh
Cảm ơn các bạn nhiều!
Hình đại diện của thành viên
lungocqua
Guru
Guru
Bài viết: 1225
Ngày tham gia: Thứ 3 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 times
Tiếp xúc:

Re: VB.Net và Access Database

Gửi bài 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. :-/
Ta đã trở lại và quên hết tất cả! :D
Hình đại diện của thành viên
vuathongtin
Điều hành viên
Điều hành viên
Bài viết: 1028
Ngày tham gia: Chủ nhật 02/05/2010 10:03 pm
Đến từ: Xứ sở DG
Has thanked: 2 times
Been thanked: 105 times
Tiếp xúc:

Re: VB.Net và Access Database

Gửi bài 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).
Bùi Thành Nhân
* Chuyên gia MMO
cachkiemtien.online
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: Chủ nhật 29/08/2010 8:30 pm

Re: VB.Net và Access Database

Gửi bài 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!
Hình đại diện của thành viên
lungocqua
Guru
Guru
Bài viết: 1225
Ngày tham gia: Thứ 3 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 times
Tiếp xúc:

Re: VB.Net và Access Database

Gửi bài 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
  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 2 vào ngày lungocqua với 0 lần sửa trong tổng số.
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: Chủ nhật 29/08/2010 8:30 pm

Re: VB.Net và Access Database

Gửi bài 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!
Hình đại diện của thành viên
lungocqua
Guru
Guru
Bài viết: 1225
Ngày tham gia: Thứ 3 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 times
Tiếp xúc:

Re: VB.Net và Access Database

Gửi bài 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
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: Chủ nhật 29/08/2010 8:30 pm

Re: VB.Net và Access Database

Gửi bài 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!
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: Chủ nhật 29/08/2010 8:30 pm

Re: VB.Net và Access Database

Gửi bài 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ì!.
Hình ảnh
Hình đại diện của thành viên
lungocqua
Guru
Guru
Bài viết: 1225
Ngày tham gia: Thứ 3 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 times
Tiếp xúc:

Re: VB.Net và Access Database

Gửi bài 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:
  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 thành viên
vuathongtin
Điều hành viên
Điều hành viên
Bài viết: 1028
Ngày tham gia: Chủ nhật 02/05/2010 10:03 pm
Đến từ: Xứ sở DG
Has thanked: 2 times
Been thanked: 105 times
Tiếp xúc:

Re: VB.Net và Access Database

Gửi bài 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 :

Mã: Chọn tất cả

 row("MaNCC") = txtMaNCC.Text
Bùi Thành Nhân
* Chuyên gia MMO
cachkiemtien.online
Tuan1102
Bài viết: 5
Ngày tham gia: Thứ 7 18/09/2010 1:03 am

Re: VB.Net và Access Database

Gửi bài by Tuan1102 »

Cho em hỏi câu này, chẳng là em đang thử lập trình 1 ứng dụng quản lý nhỏ sử dụng CSDL là Access. Trong đó có mục login với 2 trường mà acc và pass. Nay em muốn làm sao để khi người dùng gõ đúng acc và pass thì mới mở form kế tiếp.
Cách làm của em như sau:
Public Class LoginForm2

' TODO: Insert code to perform custom authentication using the provided username and password
' (See http://go.microsoft.com/fwlink/?LinkId=35339).
' The custom principal can then be attached to the current thread's principal as follows:
' My.User.CurrentPrincipal = CustomPrincipal
' where CustomPrincipal is the IPrincipal implementation used to perform authentication.
' Subsequently, My.User will return identity information encapsulated in the CustomPrincipal object
' such as the username, display name, etc.
Dim acc1, acc2 As String
Dim pass1, pass2 As String


Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click

acc1 = UsernameTextBox.Text
pass1 = PasswordTextBox.Text
acc2 = Db1DataSet.Tài_khoản.Mã_nhân_viênColumn.Container.ToString
pass2 = Db1DataSet.Tài_khoản.Mật_khẩuColumn.Container.ToString


If acc1.Length = 0 Or pass1.Length = 0 Then
MsgBox("Xin hãy nhập lại thông tin")
Else

If acc1 Like acc2 And pass1 Like pass2 Then
Form2.Show()
Form1.Hide()
Me.Hide()
Else
MsgBox("Sai tên người dùng hoặc mật khẩu, hãy nhập lại")
End If

End If

End Sub

Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel.Click
Me.Close()
End Sub

Private Sub LoginForm2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'TODO: This line of code loads data into the 'Db1DataSet.Tài_khoản' table. You can move, or remove it, as needed.
Me.Tài_khoảnTableAdapter.Fill(Me.Db1DataSet.Tài_khoản)

End Sub

End Class
Cách mà em nghĩ ra là lấy các giá trị của cột "Mã nhân viên" trong bảng "Tài khoản" đặt vào biến acc2 sau đó thì đem so sánh với đoạn text trong text box (biến acc1) => Đúng thì cho đi tiếp form kế. Tương tự với dòng password
Nhưng có lẽ là 2 dòng được đánh dấu đỏ của em bị sai, rất mong mọi người chỉ giùm cho cách sửa. Đây là lần đầu em tập làm với CSDL nên chưa biết gì, bản thân 2 dòng lệnh gán giá trị cho acc2 và pass2 là em tự nghĩ ra nên chắc là sai hoàn toàn
Đăng trả lời

Quay về