Imports System.IO
Public Form1
Button1_Click( sender System.Object, e System.EventArgs)
Button1.Click
sDBFile =
sBackUpFile = !"
' Backup *.mdb database
#$ File.Exists(sDBFile) %&
db '( DAO.DBEngine
)*"&(*"+*"*$*"&
*"&
db.CompactDatabase(sDBFile, sBackUpFile)
#$
'Restore&*,$*&*",
#$ File.Exists(sBackUpFile) %&
File.Copy(sBackUpFile, sDBFile, %)
#$
End
. Access tuy cũng là hệ quản trị cơ sở dữ liệu nhưng nó khác với SQL Server là nó còn cho phép xây
dựng thành phần giao diện gồm chung với dữ liệu + các xử lý khác trong cùng tập tin .mdb. Nó nói
chung là không phân biệt xử lý client - server.
2. Nếu cẩn thận và chuyên nghiêp hơn ta có thể tách làm 2 phần: 1 tập tin chứa dữ liệu và các truy
vấn mang tính tiền xử lý và 1 tập tin chứa thành thành giao diện + các xử lý khác. Với cách làm này
ta chỉ cần sao chép dự phòng đối với tập tin thứ nhất.
3. Sao chép dự phòng đối với Access thật ra chỉ là thao tác copy tập tin.
4. Trong VB.Net có thể viết đoạn mã lệnh đơn giản như sau (Tôi ví dụ minh hoạ bằng ứng dụng loại
Console cho đơn giản trình bày)
Imports System.IO
Module Module1
Sub Main()
Dim f As FileInfo = New FileInfo("C:\Pro_TamHiep.mdb")
f.CopyTo("c:\Pro_TamHiep.bak")
End Sub
End Module
Access không có chức năng restore đúng nghĩa như các hệ quản trị cơ sở dữ liệu cao cấp hơn nó như
SQL Server, Oracle
Tuy nhiên nó có hỗ trợ chức năng tự sửa (menu > tools > database utilities > compact and
repair database). Nếu tự sửa vẫn không được thì đành lấy bản đã sao chép thay thế bản bị hư.
1. Tìm hiểu về khái niệm ADO.Net
Trong Net (VB.Net và C#) chỉ tồn tại khái niệm ADO.Net chứ ko tồn tại khái niệm cũ
ADO (của VB6.)
Các bạn có thể thấy được ADO.Net Model qua hình dưới đây. Có thể diễn đạt theo
thứ tự là
Database > Conection > Command > DataAdapter > Datatable hay Dataset và
các bạn làm việc theo thứ tự này.
2. Namespace cần thiết để thao tác với Access
Để thao tác với Access ta chỉ cần Imports các namespace sau đây
Mã: Chọn tất cả
1. Imports System.Data
2. Imports System.Data.OleDb 'sử dụng với access
3.
3. Connect với Database
Muốn thao tác với Database dĩ nhiên bước đầu tiên là phải tạo Connect cho nó.
Ta tạo như sau:
- Connect có tầm vực cục bộ trong Form cần khai báo
Ví dụ file cần kết nối là SolieuTest.mdb được đặt trong thư mục Debug và có
Password là 123456.
Mã: Chọn tất cả
1. Public Class Form1
2. Dim con As OleDbConnection ' Cục bộ trong Form
3.
Private Sub Form1_Load(ByVal sender As System.Object, B
yVal e AsSystem.EventArgs) Handles MyBase.Load
4. Dim str As String = "Provider=
Microsoft.Jet.OLEDB.4.0;" _
5. & "Data Source = " &
Application.StartupPath & "\SolieuTest.mdb;"_
6. & "Jet OLEDB:Database Password = 123456"
7. con = New OleDbConnection(str)
8. con.Open()
9. End Sub
10.
4. Command ( Lệnh ):
- Để cho chương trình biết ta cần làm những gì đối với Database như select.
Insert
- Ví dụ đây là command dùng để Select hết tất cả dữ liệu trong bảng ra.
Mã: Chọn tất cả
1. Dim command As New OleDbCommand()
2. command.Connection = con ' Kết nối
3. command.CommandType = CommandType.Text 'Loại
lệnh sử dụng là Text hay là một query trong access
4. command.CommandText = "Select * From
DanhsachSV" 'Lệnh cần làm với Database
5.
- Để sử dụng commnand được tốt các bạn cần phải nắm vững ngôn ngữ SQL (trong
Box ebook có nhiều sách về SQL)
- Nạp tham số cho command > Very very Important. Ví dụ
Mã: Chọn tất cả
1. command.CommandText = "Select * From DanhsachSV Where
Name = @Name"
Ở đây ta có @Name là tham số mà ta cần phải điền giá trị cho nó, ta gán giá trị như
sau
Mã: Chọn tất cả
1. commandInsert.Parameters.Add("@Name",
OleDbType.VarChar).Value = txtName.Text
Vậy là ta đã gán giá trị từ Textbox txtName vào tham số @Name rồi đó
5. DataAdapter và Dataset, DataTable
- Chúng ta đã có Connect và commnand rồi, giờ chúng ta cần có một cái máy sử
dụng những cái trên để thực thi lệnh mà ta đưa ra > Đó chính là DataAdapter.
- Khai báo một DataAdapter chỉ đơn giản thế này
Mã: Chọn tất cả
1. Dim adapter As New OleDbDataAdapter()
Ngoài ra còn các hình thức khởi tạo khác, nhưng chỉ được xài với các loại
command thuộc dạng Select và tùy theo cách mà chúng ta cảm thấy quen thuộc
nhất
Mã: Chọn tất cả
1. OleDbDataAdapter (OleDbCommand)
2. OleDbDataAdapter (StringSelect, OleDbConnection)
3. OleDbDataAdapter (StringSelect, StringConnect)
4.
- Sau khi thực hiện lệnh, chúng ta sẽ có được kết quả trả về và nó được lưu trong
DataTable (đại diện cho một table ) và DataSet ( đại diện cho một Table Collection).
- Lưu ý: Muốn làm thay đổi dữ liệu nguồn (trên file) thì ta phải tác động vào các
DataTable hay Dataset đồng thời cung cấp thêm các câu SQL tương ứng để thực
thi sự thay đổi đó. Chúng ta sẽ nói chi tiết về vấn đề này trong phần tới.
6. Select dữ liệu
- Để cho đơn giản trong quá trình học các đối tượng sau dt và da bạn cho nó có tầm
vực cục bộ trong form (nằm chung với vị trí tạo connect)
Mã: Chọn tất cả
1. 'Tạo một đối tượng Datatable nhận dữ liệu trả về
2. Dim dt As New DataTable("DanhsachSV")
3. 'Tạo bộ máy DataAdapter thực hiện command
4. Dim da As New OleDbDataAdapter()
- Để trích xuất một dữ liệu ra chúng ta dùng đoạn code sau
- Ở đây chúng ta xét trường hợp là đã có sẵn đoạn code tạo Connect ở trên rồi
Mã: Chọn tất cả
1. Private Sub btnLoad_Click(ByVal sender As System.Object,
ByVal e AsSystem.EventArgs) Handles btnLoad.Click
2. 'Tạo command để lấy dữ liệu ra ngoài
3. Dim command As New OleDbCommand()
4. command.Connection = con ' Kết nối
5. command.CommandType = CommandType.Text 'loại
lệnh sử dụng là Text hay là một query trong access
6. command.CommandText = "Select * From DanhsachSV"
7. da.SelectCommand = command ‘ gán command cho da
8. da.Fill(dt) 'Nạp dữ liệu vào Table
9. DataGridView1.DataSource = dt 'Load dữ liệu lên
DataGridview
10.
11. End Sub
12.
7. Data Binding
- Đôi khi chúng ta thấy cần kết hợp DataGridview và các Textbox, để khi chúng ta
click vào một hàng bất kỳ nào trên DataGridview thì dữ liệu của hàng đó sẽ hiện lên
Textbox. Đó là kỹ thuật Data Binding.
- Thêm đoạn code sau vào sau đoạn code select ở trên các bạn sẽ thấy hiệu quả
ngay.
Mã: Chọn tất cả
1. 'Databinding
2. txtSTT.DataBindings.Add("Text", dt, "STT") ‘ Ở
đây ta cần binding textbox txtSTT với giá trị Text ở cột
STT của Table
3. txtName.DataBindings.Add("Text", dt, "Name")
4. txtAdress.DataBindings.Add("Text", dt, "Address")
5. txtPhone.DataBindings.Add("Text", dt, "Phone")
6. txtEmail.DataBindings.Add("Text", dt, "Email")
7.
8. Insert một Row mới vào trong Table
- Để insert một Row mới vào File data trước hết ta cần thêm một dòng mới vào
DataTable hay DataSet.
Mã: Chọn tất cả
1. Private Sub btnInsert_Click(ByVal sender As System.Object
, ByVal e AsSystem.EventArgs) Handles btnInsert.Click
2. 'Tao 1 row moi theo cấu trúc row trong dt
3. Dim row As DataRow = dt.NewRow()
4. row("STT") = txtSTT.Text
5. row("Name") = txtName.Text
6. row("Address") = txtAdress.Text
7. row("Phone") = txtPhone.Text
8. row("Email") = txtEmail.Text
9. dt.Rows.Add(row) ' add row mới này vào dt
10. DataGridView1.DataSource = dt
11. 'Tao command để update sự thay đổi trên vào file
data nguồn
12. Dim commandInsert As New OleDbCommand()
13. commandInsert.Connection = con
14. commandInsert.CommandType = CommandType.Text
15. 'SQL for Insert
16. commandInsert.CommandText = "Insert Into
DanhsachSV Values (@STT,@Name,@Address,@Phone,@Email)"
17. 'Nap tham so cho các command trên
18. commandInsert.Parameters.Add("@STT",
OleDbType.Numeric, 50, "STT") ' Nạp giá trị cho tham số
@STT thông qua giá trị của cột nguồn STT
19. commandInsert.Parameters.Add("@Name",
OleDbType.VarChar, 50, "Name")
20. commandInsert.Parameters.Add("@Address",
OleDbType.VarChar, 50,"Address")
21. commandInsert.Parameters.Add("@Phone",
OleDbType.VarChar, 50, "Phone")
22. commandInsert.Parameters.Add("@Email",
OleDbType.VarChar, 50, "Email")
23. 'Dùng da để áp đặt sự thay đổi trên vào File data
nguồn
24. da.InsertCommand = commandInsert 'gán command
25. da.Update(dt)
26.
27. End Sub
9. Update (chỉnh sửa một Record)
Để chính sửa một Record thì trước tiên bạn phải xác định được Record đó ở đâu
trong Database cái đã > Xác định nó thông qua Primary Key.
Ví dụ bạn có giao diện như sau
Bạn thấy rằng ta có Primary key ở đây là STT, và khi bạn click vào DataGridview là
ta đã lấy được thông tin của Record hiện thời rồi.
Vậy đoạn code để Update một record như sau
Mã: Chọn tất cả
1. Private Sub btnUpdate_Click(ByVal sender As System.Object
, ByVal e AsSystem.EventArgs) Handles btnUpdate.Click
2. 'Get Record can update trong Table
3. Dim row As DataRow = dt.Select("STT = '" &
Convert.ToInt32(txtSTT.Text) &"'")(0)
4. 'Update row
5. row.BeginEdit()
6. row("Name") = txtName.Text
7. row("Address") = txtAddress.Text
8. row("Phone") = txtPhone.Text
9. row("Email") = txtEmail.Text
10. row.EndEdit()
11. 'Tao command để update sự thay đổi trên vào file
data nguồn
12. Dim commandUpdate As New OleDbCommand()
13. commandUpdate.Connection = con
14. commandUpdate.CommandType = CommandType.Text
15. 'SQL for Update
16. commandUpdate.CommandText = "Update DanhsachSV
Set Name=@Name, Address=@Address, Phone=@Phone,
Email=@Email Where STT=@STT"
17. 'Nap tham so cho các command trên
18. commandUpdate.Parameters.Add("@Name",
OleDbType.VarChar, 20, "Name")
19. commandUpdate.Parameters.Add("@Address",
OleDbType.VarChar, 20,"Address")
20. commandUpdate.Parameters.Add("@Phone",
OleDbType.VarChar, 20, "Phone")
21. commandUpdate.Parameters.Add("@Email",
OleDbType.VarChar, 20, "Email")
22. commandUpdate.Parameters.Add("@STT",
OleDbType.Integer, 20, "STT")
23. 'Dùng da để áp đặt sự thay đổi trên vào File data
nguồn
24. da.UpdateCommand = commandUpdate 'gán command
25. 'Dim a As New OleDbCommandBuilder(da)
26. da.Update(dt)
27. End Sub
10. Delete 1 Record
- Xóa một Record cũng tương tự như Update chỉ khác phần SQL và tham số .
- Đây là cái dễ nhất
Mã: Chọn tất cả
1. Private Sub btnDelete_Click(ByVal sender As System.Object
, ByVal e AsSystem.EventArgs) Handles btnDelete.Click
2. 'Get Record can update trong Table
3. Dim row As DataRow = dt.Select("STT = '" &
Convert.ToInt32(txtSTT.Text) &"'")(0)
4. row.BeginEdit()
5. row.Delete()
6. row.EndEdit()
7. 'Tao command để update sự thay đổi trên vào file
data nguồn
8. Dim commandDelete As New OleDbCommand()
9. commandDelete.Connection = con
10. commandDelete.CommandType = CommandType.Text
11. 'SQL for Delete
12. commandDelete.CommandText = "Delete From
DanhsachSV Where STT=@STT"
13. 'Nap tham so cho các command trên
14. commandDelete.Parameters.Add("@STT",
OleDbType.Numeric, 20, "STT")
15. 'Dùng da để áp đặt sự thay đổi trên vào File data
nguồn
16. da.DeleteCommand = commandDelete 'gán command
17. End Sub
18.
- Chú ý : Để xóa hết tất cả Record trong bản ta chỉ cần dùng SQL sau “Delete
From DanhsachSV” . Các bạn thấy ko có còn tham số nào cả > ko cần truyền
thêm giá trị gì cả
11. Insert, Update, Delete theo kiểu Mì Ăn Liền
- Chắc các bạn đều thấy rằng, trong các phần Insert, Update, Delete ở trên khá
phức tạp đòi hỏi phải luyện tập thường xuyên mới có thể thành thạo cũng như nắm
vững SQL.
- Do đó, Net cung cấp sẵn cho ta một đối tượng cho phép ta ko cần phải mất công
sức để viết lại những cái trên - áp dụng tốt cho đa số trường hợp nhưng tốc độ dĩ
nhiên là kém hơn cách viết trên một chút.
Đơn giản các bạn chỉ cần thêm một dòng code này vào và loại bỏ tất cả các
command Insert, Update, Delete.
Ví dụ Update: các bạn sẽ thấy quá trình sẽ đơn giản đi rất nhiều
Mã: Chọn tất cả
1. Dim MiAnLien As New OleDbCommandBuilder(da) ' Nó ở đây nè
sẽ làm giúp ta làm mọi việc
2. 'Get Record can update trong Table
3. Dim row As DataRow = dt.Select("STT = " &
Convert.ToInt32(txtSTT.Text))(0)
4. 'Update row
5. row.BeginEdit()
6. row("Name") = txtName.Text
7. row("Address") = txtAddress.Text
8. row("Phone") = txtPhone.Text
9. row("Email") = txtEmail.Text
10. row.EndEdit()
11. ‘Update dữ liệu
12. da.Update(dt)
13.
- Insert, Delete thì cũng tương tự thôi, các bạn hãy tự làm.
12. Gọi thực thi một Query có sẵn trong file
Access
- Ví dụ bạn mở file access của bạn ra click vào Tab Queries và viết một Query tên
là QuerySelect (xin nhắc lại query này ở trong file access ko phải ta viết ở
trong chương trình)
Mã: Chọn tất cả
1. SELECT *
2. FROM DanhsachSV
3. WHERE STT>[@STT];
4.
- Bạn đang thắc mắc là làm sao ta có thể gọi thực thi query này từ chương trình và
nhận kết quả trả về từ nó, cũng như làm sao nạp giá trị cho tham số @STT trong
query trên
- Để làm điều này thật đơn giản, ta dùng command mà thôi
Mã: Chọn tất cả
1. Private Sub btnQuery_Click(ByVal sender As System.Object,
ByVal e AsSystem.EventArgs) Handles btnQuery.Click
2. Dim command As New OleDbCommand()
3. command.Connection = con
4. command.CommandType =
CommandType.StoredProcedure ' Xác định ta đang gọi query
trong file access
5. command.CommandText = "QuerySelect" 'Tên của
Query
6. command.Parameters.Add("@STT",
OleDbType.Numeric).Value = 5 'Nạp giá trị cho tham số
@STT
7. 'Nạp command trên vào DataAdapter tùy theo dạng
của command là Select, insert, update hay delete
8. da.SelectCommand = command
9. dt.Clear() 'Xóa dữ liệu cũ
10. da.Fill(dt)
11. DataGridView1.DataSource = dt
12. End Sub
13.
s