Thông tin

Căn Bản Về Kết Nối CSDL Access trong VB.Net

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

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

Căn Bản Về Kết Nối CSDL Access trong VB.Net

Gửi bàigửi bởi vuathongtin » T.Năm 08/07/2010 8:35 am

Tên bài viết: Căn Bản Về Kết Nối CSDL Access trong VB.Net
Tác giả: vuathongtin
Cấp độ bài viết: Cơ Bản
Tóm tắt:



Các khái nhiệm :

Datatable : giống như table trong file access, mọi thao tác (thêm, xóa, sửa,.. ) được thực hiện trên datatable rùi mới đưa vào file nguồn ---> datatable là bảng (table) dữ liệu trung gian.
Datatable gồm : datarow, dataset,....
Dữ liệu từ table của file nguồn được kết nối bởi Connection, sau đó đc đổ vào datatable (hoặc các thành phần trong datatable) thông qua DataAdapter.

Lấy ví dụ cho dễ hiểu nha :
Bạn chỉ cần tưởng tượng rằng : bạn có một cái bể nước (DataSource) , một cái máy bơm (DataAdapter) và một cái thùng đựng nước (DataSet). Thì khi lấy nước dùng cái bơm lấy nước từ bể, kiểm tra và lọc nước sau đó lại dùng cái bơm hút lại về cái bể nước. Đó chính là vai trò của cái bơm và DataAdapter tương tự như vậy.


--> Mình chỉ ghi theo những j mình hiểu thôi nên cũng ko chính xác lắm.

CSDL làm ví dụ : http://www.mediafire.com/?ntn0rmtmzdt

1. Khai báo
Namespace chỉ để kết nối Access
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
Imports System.Data.OleDb
Parsed in 0.034 seconds, using GeSHi 1.0.8.4

hoặc
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
Imports System.Data
Parsed in 0.025 seconds, using GeSHi 1.0.8.4


Biến toàn cục :
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
   Dim con As New OleDbConnection
    Dim da As New OleDbDataAdapter
    Dim dt As New DataTable
Parsed in 0.012 seconds, using GeSHi 1.0.8.4


2. Kết nối với CSDL :
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
Sub ketnoi()
        con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "  data source= " & Application.StartupPath & "\QUAN_LY_SINH_VIEN.mdb"
        con.Open()
    End Sub
Parsed in 0.026 seconds, using GeSHi 1.0.8.4


--> QUAN_LY_SINH_VIEN.mdb là CSDL cần kết nối
Chú ý : Bạn muốn biết Provider của CSDL bạn dùng là gì bạn nên vào trang http://www.connectionstrings.com/để tìm hiểu


3. Load dữ liệu vào datatable, datagridview,...
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
 ketnoi()
' kiểm tra kết nối
       If con.State = ConnectionState.Open Then  ' hoặc : con.State = 1
            MsgBox("Thanh cong")
        End If
 da = New OleDbDataAdapter("Select * from SINHVIEN", con)
 da.Fill(dt)
 DataGridView1.DataSource = dt
Parsed in 0.091 seconds, using GeSHi 1.0.8.4


4. Next, Previous, Last, First, Count
Cách 1 : Dùng "BindingContext "
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
' Next
Me.BindingContext.Item(dt).Position = Me.BindingContext.Item(dt).Position + 1
 
' Previous
Me.BindingContext.Item(dt).Position = Me.BindingContext.Item(dt).Position - 1

' Last
Me.BindingContext.Item(dt).Position = Me.BindingContext.Item(dt).Count - 1

' First
C1:  DataGridView1.CurrentCell = DataGridView1.Item("tên hàng", 0)
ví dụ :  DataGridView1.CurrentCell = DataGridView1.Item("MSSV", 0)

C2: Me.BindingContext.Item(dt).Position = 0

'Trỏ đến vị trí mới nhập

DataGridView1.CurrentCell =DataGridView1.Item("Tên cột sẽ chọn trên dòng", "chỉ số dòng mới chèn vào")

Ví dụ : trỏ đến dòng thứ 20 của cột MSSV
DataGridView1.CurrentCell = DataGridView1.Item("MSSV", 20)

' Count
lbl_tongso.Text = "Tổng số : " & Me.BindingContext.Item(dt).Count.tostring
hoặc :
lbl_tongso.Text = "Tổng số : " & Me.dt.Rows.Count.tostring
hoặc :
lbl_tongso.Text = "Tổng số : " & Me.dt.DefaultView.Count.tostring

 
Parsed in 0.275 seconds, using GeSHi 1.0.8.4

Chú ý : dt là khai báo của datatable

Cách 2 : Dùng "Bindingsource"
ví dụ : Khi viết code cho button " Next"
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
   Dim binding As New BindingSource
        binding.DataSource = dt
        DataGridView1.DataSource = binding
        binding.MoveNext()
Parsed in 0.050 seconds, using GeSHi 1.0.8.4


--> Ý nghĩa : BindingSoure cung cấp các giao thức "MoveNext, MoveFirst,.." , ta chỉ việc khai báo datasource của DataGridView1 gián tiếp với dt thông qua Bindingsource là sử dụng đc các giao thức đó

Những cái kia viết tương tự .....

5. Tìm kiếm
Cách 1 : Dùng SQL " Lọc với điều kiện cho trước"
Cú pháp :
Mã: Chọn tất cả
Select <tên field> from <tên table> where <điều kiện>

5.1.1. Dùng phép so sánh =
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
da = New OleDbDataAdapter("Select * from SINHVIEN where MSSV='" & txt_tim.Text & "'", con)
da.Fill(dt)
DataGridView1.DataSource = dt
Parsed in 0.013 seconds, using GeSHi 1.0.8.4


5.1.2. Dùng Hàm Instr

Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
da = New OleDbDataAdapter("Select * from SINHVIEN where instr(MSSV,'" & txt_tim.Text & "')>0", con)
Parsed in 0.075 seconds, using GeSHi 1.0.8.4


Hàm InStr() trả về vị trí của ký tự (nhóm ký tự) đầu tiên được truyền vào trong chuối String.


Ví dụ :
InStr(doan_van,"T")
' Ở đây, chữ "T" được tính là chữ "T" của chữ: "Tro".


5.1.3. Dùng toán tử LIKE
Cú pháp :
Mã: Chọn tất cả
"Select * from CV where NOIDUNG LIKE '%" & txtTimKiem.Text & "%'"


Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
da = New OleDbDataAdapter("Select * from SINHVIEN where MSSV like '" & txt_tim.Text & "'", con)
Parsed in 0.012 seconds, using GeSHi 1.0.8.4


Cách 2 : Dùng chức năng "RowFilter" trong datatable
Cú pháp :
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
dt.DefaultView.RowFilter= chuoiloc ' dt là khai báo của datatable
Parsed in 0.011 seconds, using GeSHi 1.0.8.4


Ví dụ :
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
dim chuoiloc as string= string.format ("Ten like '{0}%'",txt_timten.text)
   dt.DefaultView.RowFilter= chuoiloc
Parsed in 0.082 seconds, using GeSHi 1.0.8.4


Ngoài ra nếu datagridview được kết nối qua một bindingsource thì có thể phương thức "Filter" của BindingSource .
Ví dụ :
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
  Dim binding As New BindingSource
  binding.DataSource = dt
  DataGridView1.DataSource = binding
 binding.Filter = String.Format("Ten like '{0}%'", txtsearchstr.Text)
Parsed in 0.013 seconds, using GeSHi 1.0.8.4


6. Thêm
Lấy form tạo người dùng làm ví dụ
tbl_nguoidung : nguoidung, matkhau

6.1. Phương pháp 1 : Chậm mà chắc

B1 : Kiểm tra kết nối và đổ (fill) dữ liệu từ nguồn vào datatable ---> Ta đã có 1 table ( bước này có khi ko dùng đến)

B2 : Khai báo 1 Row (dòng) mới vào dt (datatable), và add dữ liệu vào Row theo cấu trúc row trong (datatable)

Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
 ' Khai báo row mới
Dim row As DataRow = dt.NewRow
 ' Add du lieu vao cau truc Row
row("nguoidung") = txt_tennguoidung.Text
row("matkhau") = txt_matkhau.Text
dt.Rows.Add(row)
Parsed in 0.027 seconds, using GeSHi 1.0.8.4


B3 : Dùng Command để update vào file nguồn
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
' Dung command de update vao database nguon
 Dim commandtao As New OleDb.OleDbCommand()
commandtao.Connection = frm_dangnhap.con
commandtao.CommandType = CommandType.Text ' Loại lenh su dung la Text
commandtao.CommandText = "Insert into tbl_nguoidung values (@nguoidung,@matkhau)"

' Truyen tham so vao cac values
commandtao.Parameters.Add("@nguoidung", OleDb.OleDbType.VarChar, 30, "nguoidung")
commandtao.Parameters.Add("@matkhau", OleDb.OleDbType.VarChar, 20, "matkhau")

' Dùng da để thực thi những thay đổi vào file nguồn
da.InsertCommand = commandtao
da.Update(dt)
 
Parsed in 0.015 seconds, using GeSHi 1.0.8.4


6.2 . Phương pháp 2 : Nhanh cho mau thấy, không cần biết hậu quả :P

B1, B2 : tương tự phương pháp 1
B3 : Dùng CommandBuilder để làm da thực thi nhưng thay đổi vào file nguồn

Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
Dim cb As OleDbCommandBuilder
cb = New OleDbCommandBuilder(da)
da.Update(dt)
cb.Dispose()
Parsed in 0.011 seconds, using GeSHi 1.0.8.4


Ngoài ra có thể Insert dựa vào
dataset

7. Sửa :
B1 : Tương tự như Thêm
B2 : Khai báo
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
Dim cb As New OleDb.OleDbCommandBuilder
Dim row As DataRow = frm_dangnhap.dt_nguoidung.Select("nguoidung = '" & frm_dangnhap.txt_nguoidung.Text & "'")(0)
row.BeginEdit()
row("matkhau") = txt_matkhaumoi.Text
row.EndEdit()
Parsed in 0.013 seconds, using GeSHi 1.0.8.4


B3 : Tương tự B3 của 6.2
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
Dim cb As OleDbCommandBuilder
cb = New OleDbCommandBuilder(da)
da.Update(dt)
cb.Dispose()
Parsed in 0.012 seconds, using GeSHi 1.0.8.4


Ngoài ra B2 có thể làm tương tự như B2 của 6.1 (chậm mà chắc)
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
' Dung command de update vao database nguon
 Dim commandtao As New OleDb.OleDbCommand()
commandtao.Connection = frm_dangnhap.con
commandtao.CommandType = CommandType.Text ' Loại lenh su dung la Text
commandtao.CommandText = "Update tbl_nguoidung set nguoidung=@nguoidung,matkhau=@matkhau"

' Truyen tham so vao cac values
commandtao.Parameters.Add("@nguoidung", OleDb.OleDbType.VarChar, 30, "nguoidung")
commandtao.Parameters.Add("@matkhau", OleDb.OleDbType.VarChar, 20, "matkhau")

' Dùng da để thực thi những thay đổi vào file nguồn
da.UpdateCommand = commandtao
da.Update(dt)
 
Parsed in 0.027 seconds, using GeSHi 1.0.8.4

Giải thích :
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
frm_dangnhap.dt_nguoidung.Select("nguoidung = '" & frm_dangnhap.txt_nguoidung.Text & "'")(0)
Parsed in 0.011 seconds, using GeSHi 1.0.8.4
--> lấy bảng đầu tiên trong tập hợp các bảng của datatable

8. Xóa :
B1 : Tương tự như Thêm
B2 :
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
Dim cb As New OleDb.OleDbCommandBuilder
Dim row As DataRow = frm_dangnhap.dt_nguoidung.Select("nguoidung = '" & frm_dangnhap.txt_nguoidung.Text & "'")(0)
row.BeginEdit()
row.delete()
row.EndEdit()
Parsed in 0.013 seconds, using GeSHi 1.0.8.4


B3 : Tương tự B3 của 6.2
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
Dim cb As OleDbCommandBuilder
cb = New OleDbCommandBuilder(da)
da.Update(dt)
cb.Dispose()
Parsed in 0.012 seconds, using GeSHi 1.0.8.4


Cách 2 : Thực thi trực tiếp câu lệnh SQL
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
 Dim row As DataRow = dt.Select("nguoidung = '" & Txt_nguoidung.Text & "'")(0)
 cmd = New OleDbCommand("Delete * from tbl_nguoidung where (nguoidung='" & txt_nguoidung.Text & "')", con)
cmd.ExecuteNonQuery()
row.delete()
Parsed in 0.013 seconds, using GeSHi 1.0.8.4


Chỉ cần viết 1 thủ tục Thực thi trực tiếp command thông qua lệnh ExecuteNonQuery()
ta có thể insert, update hoặc delete 1 cách dễ dàng . 1 thủ tục làm nhiều công việc

Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
Sub thucthi(ByVal chuoitruyvan As String, ByRef con As OleDbConnection)
            cmd = New OleDbCommand(chuoitruyvan, con)
            cmd.ExecuteNonQuery()
  End Sub
Parsed in 0.013 seconds, using GeSHi 1.0.8.4


Chú thích :
- con là biến toàn cục ( đã khai báo ở trên)
- Chuoitruyvan là lệnh SQL

Ví dụ :
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
Dim chuoitruyvan1 as string="Insert into NhanVien(MaNV,Ho,Ten) values('" & txt_ma.Text & "','" & txt_ho.Text & "','" & txt_ten.Text & "')"
Dim chuoitruyvan2 As String = "update NhanVien set MaNV='" & txt_ma.Text & "',Ho='" & txt_ho.Text & "',Ten='" & txt_ten.Text & "' where MaNV='" & txt_ma.Text & "'"
Dim chuoitruyvan3 as string="delete * from NhanVien where MaNV='" & txt_ma.Text & "'"

them(chuoitruyvan1,con) ' Thêm dữ liệu
them(chuoitruyvan2,con) ' Update lại dữ liệu
them(chuoitruyvan3,con) ' Xóa dữ liệu tại vị trí mã được chọn
Parsed in 0.078 seconds, using GeSHi 1.0.8.4


Tóm lại : theo cách hiểu hiện tại của mình:
Để thao tác với CSDL trong ADO.Net có 4 cách
1- Dùng command để thực thi tham số truyền vào
ví dụ :
Mã: Chọn tất cả
da.insertcommand=cmd

2- Dùng commandBuider để chấp nhận những thay đổi trong datatable
VD: Dim OleDbcommandbuider = new OleDbCommandbuilder(da)
3- Dùng câu lệnh thực thi ExenonQuery hoăc ExeReader
Mã: Chọn tất cả
VD: cmd.ExeNonQuery

4- Dùng Store procedure


9. Tạo Báo Cáo (Crytal Report ):
Bạn có thể tham khảo 3 bài viết sau :
1. bài viết TẠO REPORT TRONG 1h của tungcan5diop http://caulacbovb.com/forum/viewtopic.php?f=8&t=5727&start=20

2. Tìm hiểu và thao tác với Crystal Report của anhtuyenbk http://caulacbovb.com/forum/viewtopic.php?f=23&t=562

3. Dynamic Crystal Report của thuytrang2542000 http://caulacbovb.com/forum/viewtopic.php?f=23&t=5357#p33693

===> Tóm lại để làm Report chỉ cần 2 bước cơ bản sau :
Bước 1: (Tạo thư mục baocao chứa 3 cái sau đây)
- Tạo Dataset --> ds_baocao
- Crytal Report theo cấu trúc của dataset (field của dataset tương ứng với field trong file nguồn) ----> rpt_baocao
- Form hiển thị báo cáo (chứa control CrytalReportView) --> frm_baocao

Bước 2 : Viết thủ tục inbaocao
Nạp dữ liệu cho Crytal Report theo datatable
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
Dim myreport As New rpt_baocao
  myreport.SetDataSource(dt_nhanvien)
Parsed in 0.012 seconds, using GeSHi 1.0.8.4


Nạp form trong report
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
 Dim f As New  frm_report
 f.CrystalReportViewer1.ReportSource = myreport
 f.Show()
Parsed in 0.017 seconds, using GeSHi 1.0.8.4


Bổ Sung : (Cập nhật ngày 11-08-2010)

1. Cập nhật những thay đổi trong lưới vào CSDL
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
    Sub capnhatthaydoi()
                   cb = New OleDbCommandBuilder(da)
                   da.Update(dt)
                   dt.AcceptChanges()
              End Sub
Parsed in 0.013 seconds, using GeSHi 1.0.8.4


2. Lấy dữ liệu từ DataGridview thông qua các sự kiện (Event):
Form có 1 datagrid, trong datagrid có 3 cột là Id, Ten, Dt . Khi mình bấm vào 1 dòng nào đó trên datagrid thì các textbox sẽ hiển thị nội dung tương ứng của dòng đc click


Cách 1 :
Ở sự kiện RowHeaderMouseClick trong DataGridView:
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
textBox1.Text = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
textBox2.Text = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
textBox3.Text = dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString();
Parsed in 0.013 seconds, using GeSHi 1.0.8.4


Cách 2 :
Sự kiện CurrentCellChanged
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
On Error Resume Next
 i = DataGridView1.CurrentRow.Index() 'i =  BindingContext.Item(dt).Position
        txt_diachi1.Text = DataGridView1.Item("Diachi1",i).Value
Parsed in 0.013 seconds, using GeSHi 1.0.8.4

hoặc :
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
txt_diachi1.Text = DataGridView1.CurrentRow.Cells("Diachi1").Value().ToString
Parsed in 0.027 seconds, using GeSHi 1.0.8.4


Cách 3 : (nên dùng cách này)
Hoặc dùng sự kiện SelectionChanged
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
 i = DataGridView1.CurrentRow.Index() 'i =  BindingContext.Item(dt).Position
        txt_diachi1.Text = DataGridView1.Item("Diachi1",i).Value
Parsed in 0.026 seconds, using GeSHi 1.0.8.4

hoặc :
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
 txt_diachi1.Text = DataGridView1.CurrentRow.Cells("Diachi1").Value().ToString
Parsed in 0.013 seconds, using GeSHi 1.0.8.4


3. Bắt lỗi trong SQL:

bắt lỗi cú pháp cho dữ liệu nhé. Thường thì nó hay bị lỗi đấu nhấy đơn (" ' ") đó.

Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
Function ThayThe(ByVal Chuoi As String, Optional ByVal KiTuCu As String = "'", Optional KiTuMoi ByValAs String = "''") As String
  Return Chuoi.Replace(KiTuCu, KiTuMoi)
End Function
 
Parsed in 0.015 seconds, using GeSHi 1.0.8.4

sử dụng :
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
sql = "Insert Into NhanVien (MaNV, Ho, Ten) Values ('" & ThayThe(Me.txtMa.Text.Trim) & "', '" & ThayThe(Me.txtHo.Text.Trim) & "', '" & ThayThe(Me.txtTen.Text.Trim) & "')"
Parsed in 0.014 seconds, using GeSHi 1.0.8.4


Xem project demo về report : http://caulacbovb.com/forum/download/file.php?id=9840
Sửa lần cuối bởi vuathongtin vào ngày T.Ba 17/08/2010 10:09 am với 10 lần sửa.
“chúng ta học cách chạy xe chứ không phải học cách chạy cái xe cụ thể nào cả”
Hình đại diện của thành viên
vuathongtin
Thành viên trung thành
Thành viên trung thành
 
Bài viết: 279
Ngày tham gia: CN 02/05/2010 10:03 pm
Đến từ: Phú Yên

Re: Căn Bản Về Kết Nối CSDL Access trong VB.Net

Gửi bàigửi bởi lungocqua » T.Sáu 09/07/2010 6:26 am

Bải viết của bạn tốt đấy. Có lẽ dùng DataGridview để hiển thị và chỉnh sửa dữ liệu thì dễ dàng hơn dùng ListView nhỉ! :D
:-/
Hình đại diện của thành viên
lungocqua
Thành viên tâm huyết
Thành viên tâm huyết
 
Bài viết: 539
Ngày tham gia: T.Ba 18/08/2009 11:51 am
Cảnh cáo: 1

Re: Căn Bản Về Kết Nối CSDL Access trong VB.Net

Gửi bàigửi bởi duykhanh » T.Bảy 07/08/2010 3:04 pm

Xem ra cái bài này còn hay hơn của anhtuyen ! :)
Học sinh lớp 7/4 trường THCS Phan Tây Hồ, Gò Vấp - TP.HCM
duykhanh
Thành viên trung thành
Thành viên trung thành
 
Bài viết: 328
Ngày tham gia: T.Ba 11/08/2009 10:54 am
Đến từ: Gò Vấp - TP.HCM

Re: Căn Bản Về Kết Nối CSDL Access trong VB.Net

Gửi bàigửi bởi ico » T.Tư 11/08/2010 3:14 pm

vuathongtin đã viết:5. Tìm kiếm
Cách 1 : Dùng SQL " Lọc với điều kiện cho trước"
Cú pháp :

Mã: Chọn tất cả
Select <tên field> from <tên table> where <điều kiện>


5.1.1. Dùng phép so sánh =

da = New OleDbDataAdapter("Select * from SINHVIEN where MSSV='" & txt_tim.Text & "'", con)
da.Fill(dt)
DataGridView1.DataSource = dt


Cái này chỉ là tìm sau đó là viết thêm dòng đó vào chứ đâu phải lọc. =((
Mình muốn tìm được rồi thì chỉ hiện dòng đó thôi còn các dòng khác ẩn đi thì làm thế nào??

Ngoài ra mình cũng muốn hỏi bạn làm thế nào để chúng ta có thể sửa trực tiếp trên DataGirdView sau đó nhấn vào một button thì nó sẽ tự động cập nhật vào CSDL ??
icosoftware.co.cc

Offline 10 tháng
ico
Thành viên năng nổ
Thành viên năng nổ
 
Bài viết: 70
Ngày tham gia: T.Ba 20/07/2010 9:23 am

Re: Căn Bản Về Kết Nối CSDL Access trong VB.Net

Gửi bàigửi bởi vuathongtin » T.Tư 11/08/2010 3:45 pm

Thao tác tìm kiếm của mình ko sai, bạn test thử thì biết, còn vấn đề bạn muốn thao tác trực tiếp (Xóa, sửa, Thêm,..) trên lưới DatagridView thì mình đã bổ sung thêm vào bài viết trên rùi, bạn tham khảo đi.
“chúng ta học cách chạy xe chứ không phải học cách chạy cái xe cụ thể nào cả”
Hình đại diện của thành viên
vuathongtin
Thành viên trung thành
Thành viên trung thành
 
Bài viết: 279
Ngày tham gia: CN 02/05/2010 10:03 pm
Đến từ: Phú Yên

Re: Căn Bản Về Kết Nối CSDL Access trong VB.Net

Gửi bàigửi bởi ico » T.Tư 11/08/2010 7:21 pm

Chắc bạn hiểu nhầm ý của mình rồi, mình không có ý nói phép tìm kiếm sai (chắc tại mình học văn hơi kém nên diễn đạt không được rõ ràng cho lắm :D ) mà mình chỉ muốn nói là nếu là tìm kiếm thì chỉ nên hiên ra kết quả tìm kiếm và ẩn các cái khác đi còn code của bạn là tìm sau đó nó điền kết quả tìm được vào cuối bảng. Mong bạn giúp mình cái code này!! [-O<
vuathongtin đã viết:Sub capnhatthaydoi()
cb = New OleDbCommandBuilder(da_sinhvien)
ketnoi.da_sinhvien.Update(dt_sinhvien)
ketnoi.dt_sinhvien.AcceptChanges()
End Sub

Bạn cho mình hỏi ' ketnoi ' ở trên là cái gì vậy (:|

Dù sao cũng cám ơn bạn bài viết rất có ích =D>
icosoftware.co.cc

Offline 10 tháng
ico
Thành viên năng nổ
Thành viên năng nổ
 
Bài viết: 70
Ngày tham gia: T.Ba 20/07/2010 9:23 am

Re: Căn Bản Về Kết Nối CSDL Access trong VB.Net

Gửi bàigửi bởi vuathongtin » T.Tư 11/08/2010 7:29 pm

tìm kiếm thì chỉ nên hiên ra kết quả tìm kiếm và ẩn các cái khác đi còn code của bạn là tìm sau đó nó điền kết quả tìm được vào cuối bảng.

Bạn nói ko đúng rùi, code mình chỉ lọc ra trong lưới Datagridview những giá trị thỏa điều đkiện thôi, còn những giá trị ko thỏa thì nó ko hiện ra.

Trong Vb có 1 cách tìm kiếm cũng khá hay là trỏ đến giá trị cần tìm (tức là Filter trong recordset) nhưng mình ko thấy cách này trong Vb.Net

ketnoi.da_sinhvien.Update(dt_sinhvien)
ketnoi.dt_sinhvien.AcceptChanges()


Cái này mình quên chưa sửa lại, do mình lấy trong Class của mình ra ấy mà.
“chúng ta học cách chạy xe chứ không phải học cách chạy cái xe cụ thể nào cả”
Hình đại diện của thành viên
vuathongtin
Thành viên trung thành
Thành viên trung thành
 
Bài viết: 279
Ngày tham gia: CN 02/05/2010 10:03 pm
Đến từ: Phú Yên

Re: Căn Bản Về Kết Nối CSDL Access trong VB.Net

Gửi bàigửi bởi ico » T.Tư 11/08/2010 8:30 pm

Cảm ơn bạn mình làm được cái tìm kiếm rồi nhưng cho mình hỏi làm thế nào để xác định được ô được lựa chọn trong DataGirdView có rỗng hay không.
Và dùng Code nào để không phải lựa chọn bất kỳ 1 ô nào trong Datagirdview ?

Và mong bạn nhanh chóng cho mình code update :D
icosoftware.co.cc

Offline 10 tháng
ico
Thành viên năng nổ
Thành viên năng nổ
 
Bài viết: 70
Ngày tham gia: T.Ba 20/07/2010 9:23 am

Re: Căn Bản Về Kết Nối CSDL Access trong VB.Net

Gửi bàigửi bởi vuathongtin » T.Tư 11/08/2010 8:53 pm

Code Update tức là Sửa đấy
để xác định được ô được lựa chọn trong DataGirdView có rỗng hay không.

Cái này nghe lạ nhỉ, chắc là phải kiểm trả giá trị từng cell trong Row
Mã: Chọn tất cả
If DatagridView.CurrentRow.Cells(0).Value = String.Empty and DatagridView.CurrentRow.Cells(1).Value = String.Empty and .... then <Báo rỗng>
“chúng ta học cách chạy xe chứ không phải học cách chạy cái xe cụ thể nào cả”
Hình đại diện của thành viên
vuathongtin
Thành viên trung thành
Thành viên trung thành
 
Bài viết: 279
Ngày tham gia: CN 02/05/2010 10:03 pm
Đến từ: Phú Yên

Re: Căn Bản Về Kết Nối CSDL Access trong VB.Net

Gửi bàigửi bởi ico » T.Tư 11/08/2010 9:30 pm

Trong phần code update
Nó bôi đen (à nhầm Vàng) vào dòng da.Update(dt) rồi báo lỗi:
Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information.
icosoftware.co.cc

Offline 10 tháng
ico
Thành viên năng nổ
Thành viên năng nổ
 
Bài viết: 70
Ngày tham gia: T.Ba 20/07/2010 9:23 am

Re: Căn Bản Về Kết Nối CSDL Access trong VB.Net

Gửi bàigửi bởi lungocqua » T.Tư 11/08/2010 11:50 pm

Bạn dùng thử cái này: viewtopic.php?t=4103&p=81130#p81130
:-/
Hình đại diện của thành viên
lungocqua
Thành viên tâm huyết
Thành viên tâm huyết
 
Bài viết: 539
Ngày tham gia: T.Ba 18/08/2009 11:51 am
Cảnh cáo: 1

Re: Căn Bản Về Kết Nối CSDL Access trong VB.Net

Gửi bàigửi bởi ico » T.Năm 12/08/2010 9:28 am

Mình làm theo cái bài mà lungocqua bảo lỗi (chả khác gì)
Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information.
B3 Của phần Xóa mình cũng bị lỗi như thế.

Code của mình đây:
Mã: Chọn tất cả

Imports System.Data.OleDb
Imports System.Data
Public Class Form1
    Dim da As New OleDbDataAdapter
    Dim dt As New DataTable
    Dim cb As OleDbCommandBuilder
    Dim con As New OleDbConnection
    Dim bs As New BindingSource
 
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        KetNoi()
        ' kiểm tra kết nối
        If con.State = ConnectionState.Open Then  ' hoặc : con.State = 1
            ToolStripStatusLabel1.Text = "Đã Kết Nối Tới Dữ Liệu Tại: " & con.DataSource
        End If
        da = New OleDbDataAdapter("Select * from DIRECTORY", con)
        da.Fill(dt)
        DataGridView1.DataSource = dt

Sub KetNoi()
        Dim str As String = "Provider= Microsoft.JET.OLEDB.4.0;Data Source = " & Application.StartupPath & "\contact.mdb;"
        Try
            con = New OleDbConnection(str)
            con.Open()
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Exclamation)
            con.Close()
            Exit Sub
        End Try
    End Sub
Sub nguon()
        On Error Resume Next
        If con.State = ConnectionState.Closed Then
            KetNoi()
        End If
        dt = New DataTable
        da = New OleDbDataAdapter("select * from DIRECTORY", con)
        da.Fill(dt)
        Me.DataGridView1.DataSource = dt
        dt.Dispose()
        da.Dispose()
        con.Close()
    End Sub

Public Class KetNoi
    Dim con As OleDbConnection
    Sub KetNoi()
        Dim str As String = "Provider= Microsoft.JET.OLEDB.4.0;Data Source = " & Application.StartupPath & "\contact.mdb;"
        Try
            con = New OleDbConnection(str)
            con.Open()
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Exclamation)
            con.Close()
            Exit Sub
        End Try
    End Sub
End Class
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        If con.State = ConnectionState.Closed Then
            KetNoi()
        End If
        da = New OleDbDataAdapter("select * from DIRECTORY", con)
        da.Fill(dt)
        cb = New OleDbCommandBuilder(da)
        da.Update(dt)
        dt.AcceptChanges()
        dt.Clear()
        dt.Dispose()
        da.Dispose()
        con.Close()
        nguon()
    End Sub
icosoftware.co.cc

Offline 10 tháng
ico
Thành viên năng nổ
Thành viên năng nổ
 
Bài viết: 70
Ngày tham gia: T.Ba 20/07/2010 9:23 am

Re: Căn Bản Về Kết Nối CSDL Access trong VB.Net

Gửi bàigửi bởi lungocqua » T.Năm 12/08/2010 9:33 am

Bạn dùng CSDL là SQL hả? SQL tì phải sửa lại một tí rồi. :D
:-/
Hình đại diện của thành viên
lungocqua
Thành viên tâm huyết
Thành viên tâm huyết
 
Bài viết: 539
Ngày tham gia: T.Ba 18/08/2009 11:51 am
Cảnh cáo: 1

Re: Căn Bản Về Kết Nối CSDL Access trong VB.Net

Gửi bàigửi bởi vuathongtin » T.Năm 12/08/2010 9:45 am

Bạn post Project của bạn lên đây để mình chỉnh lại cho,
“chúng ta học cách chạy xe chứ không phải học cách chạy cái xe cụ thể nào cả”
Hình đại diện của thành viên
vuathongtin
Thành viên trung thành
Thành viên trung thành
 
Bài viết: 279
Ngày tham gia: CN 02/05/2010 10:03 pm
Đến từ: Phú Yên

Re: Căn Bản Về Kết Nối CSDL Access trong VB.Net

Gửi bàigửi bởi ico » T.Năm 12/08/2010 5:25 pm

Nguồn nè bạn:
Bạn sử luôn cho mình cái nút Xóa, Chỉnh Sửa Và Cập Nhật
Tập tin đính kèm
KPD.rar
KPD
(194.21 KiB) Đã tải về 26 lần.
icosoftware.co.cc

Offline 10 tháng
ico
Thành viên năng nổ
Thành viên năng nổ
 
Bài viết: 70
Ngày tham gia: T.Ba 20/07/2010 9:23 am

Re: Căn Bản Về Kết Nối CSDL Access trong VB.Net

Gửi bàigửi bởi vuathongtin » T.Năm 12/08/2010 6:31 pm

Mình Làm Cho Bạn code demo cập nhật ngay trên lưới nè,
Còn project của bạn, bạn chỉ cần chỉnh lại trong Table DIRECTORY, chọn field HOTEN làm khóa chính là tất cả lỗi đều đc khắc phục.
Tập tin đính kèm
VIDU.rar
(64.02 KiB) Đã tải về 39 lần.
“chúng ta học cách chạy xe chứ không phải học cách chạy cái xe cụ thể nào cả”
Hình đại diện của thành viên
vuathongtin
Thành viên trung thành
Thành viên trung thành
 
Bài viết: 279
Ngày tham gia: CN 02/05/2010 10:03 pm
Đến từ: Phú Yên

Re: Căn Bản Về Kết Nối CSDL Access trong VB.Net

Gửi bàigửi bởi ico » T.Năm 12/08/2010 8:43 pm

Mình làm được cái Capnhat rồi. Nhưng bạn xem cho mình trong project của mình ấy có 2 cái radiobutton là Nam và Nữ
Bạn làm cho mình cái Row filter được không mình làm nó toàn báo lỗi không có cột GT hay (GIOITINH) gì đó!!
icosoftware.co.cc

Offline 10 tháng
ico
Thành viên năng nổ
Thành viên năng nổ
 
Bài viết: 70
Ngày tham gia: T.Ba 20/07/2010 9:23 am

Re: Căn Bản Về Kết Nối CSDL Access trong VB.Net

Gửi bàigửi bởi vuathongtin » T.Năm 12/08/2010 8:55 pm

Tại trong table của bạn, bạn để field GT, bạn vào sửa lại thành GIOITINH
“chúng ta học cách chạy xe chứ không phải học cách chạy cái xe cụ thể nào cả”
Hình đại diện của thành viên
vuathongtin
Thành viên trung thành
Thành viên trung thành
 
Bài viết: 279
Ngày tham gia: CN 02/05/2010 10:03 pm
Đến từ: Phú Yên

Re: Căn Bản Về Kết Nối CSDL Access trong VB.Net

Gửi bàigửi bởi ico » T.Năm 12/08/2010 9:41 pm

Hổng được bạn ơi
icosoftware.co.cc

Offline 10 tháng
ico
Thành viên năng nổ
Thành viên năng nổ
 
Bài viết: 70
Ngày tham gia: T.Ba 20/07/2010 9:23 am

Re: Căn Bản Về Kết Nối CSDL Access trong VB.Net

Gửi bàigửi bởi lungocqua » T.Năm 12/08/2010 9:48 pm

Để mình xem cái nào! :-? Nó không chạy hay có báo lỗi gì không bạn? :-/
:-/
Hình đại diện của thành viên
lungocqua
Thành viên tâm huyết
Thành viên tâm huyết
 
Bài viết: 539
Ngày tham gia: T.Ba 18/08/2009 11:51 am
Cảnh cáo: 1

Trang kế tiếp

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.