CSDL

Chia sẻ bởi Trần Ngọc Vũ An | Ngày 23/10/2018 | 58

Chia sẻ tài liệu: CSDL thuộc Bài giảng khác

Nội dung tài liệu:

5/21/2010
Design: Nguyen Hien Du
1
1. Bộ máy (Engine) cơ sở dữ liệu là gì?
Chức năng cơ bản của CSDL được cung cấp bởi một bộ máy CSDL, là hệ thống chương trình quản lý cách thức chứa và trả về dữ liệu.
Bộ máy CSDL ở đây là Microsofts Jet. Jet là một hệ thống con được nhiều ứng dụng của Microsoft sử dụng.
Cơ sở dữ liệu
Chú ý : trước khi lập trình phải khai báo thư viện DAO như sau:
Tools/References/Microsof DAO 3.6 Object Library/ok
5/21/2010
Design: Nguyen Hien Du
2
2. Sơ đồ quan hệ của các đối tượng
5/21/2010
Design: Nguyen Hien Du
3
3. Các đối tượng phục vụ việc xử lý đối tượng
Đối tượng kiểu Database:
dùng để thao tác với một cơ sở dữ liệu
Đối tượng kiểu Tabledef:
Dùng để tạo, xoá, sửa cấu trúc của bảng
Đối tượng kiểu QueryDef:
Dùng để tạo, xoá, sửa cấu trúc của truy vấn
Đối tượng kiểu Recorset:
Dùng để xử lý các bản ghi của CSDL
5/21/2010
Design: Nguyen Hien Du
4
4.Các chức năng xử lý
Khi sử dụng đối tượng kết hợp với phương thức và thuộc tính ta có thể xử lý một số công việc sau:
Sắp xếp các bản ghi theo một trật tự nhất định nào đó.
Lấy ra những bản ghi thoả mãn một số điều kiện nào đó
Dò tìm các bản ghi mà ta cần
Thêm, xoá và sửa các bản ghi
5/21/2010
Design: Nguyen Hien Du
5
Biến Kiểu DATABaSE
1. Làm việc với một cơ sở dữ liệu cần:
+ Khai báo một biến kiểu Database
+ Cho biến này tham chiếu đến một CSDL cụ thể nào đó trong một vùng làm việc nào đó
2. Để kết nối với CSDL hiện hành có 2 cách
Cách 1: (Dùng hàm CurrentDB)
`Khai báo biến DB kiểu Database
5/21/2010
Design: Nguyen Hien Du
6
Dim DB as Database
` Thắt chặt mối quan hệ giữa biến DB và CSDL hiện hành.
Set DB=CurrentDB()
Cách 2:
Dim DB as Database
Set DB= DBEngine.Workspace(0).Databases(0)
5/21/2010
Design: Nguyen Hien Du
7
3. Làm việc với một CSDL khác
Tại một thời điểm có thể đồng thời làm việc với nhiều CSDL khác nhau. Như vậy có thể đồng thời cùng xử lý bảng, truy vấn.
Tuy nhiên chỉ cho phép sử dụng biểu mẫu, Macro, Report, Modul của CSDL hiện tại.
Cách làm việc
Dim DB as Database
Dim Ws as Workspace
Set Ws=DBEngine.Workspace(0)
Set DB=Ws.Opendatabase()
5/21/2010
Design: Nguyen Hien Du
8
Để đóng một đối tượng ta dùng phương thức Close
DB.Close
Ví dụ:
Dim db As Database
a = Dir("Ketoanmt.MDB")
If a = "" Then
MsgBox "Ketoanmt.MDB not found"
Exit Sub
End If
a = VBA.CurDir$() & "" & a
Set db = Workspaces(0).OpenDatabase(a)
MsgBox "ketoanmt.MDB is now open"
db.Close
5/21/2010
Design: Nguyen Hien Du
9
Biến kiểu RecorSet
Để xử lý dữ liệu của bảng, truy vấn ta dùng biến khai báo kiểu Recordset
Có 3 loại Recordset
5/21/2010
Design: Nguyen Hien Du
10
a. Recordset loại Table:
Chỉ áp dụng cho bảng của CSDL hiện tại, có thể thêm, xoá, sửa, sắp xếp tìm kiếm theo phương thức Seek
b. Recordset loại Dynaset:
Có thể áp dụng trên bảng, truy vấn. Có thể thay đổi dữ liệu (thêm, xoá, sửa) và tìm kiếm theo phương thức Find
c. Recordset loại Snapshot:
Có thể áp dụng trên bảng và truy vấn nhưng chỉ cho xem dữ liệu
5/21/2010
Design: Nguyen Hien Du
11
Phương thức Openrecordset()
là phương thức cơ bản để tạo một biến Recordset
Cách viết:
Set Bien_R=Bien_O.OpenRecordset(Nguồn,loại)
- Bien_O: là một biến đối tượng kiểu database, Tabledef, hoặc Querydef
- Nguồn: là chuỗi ký tự biểu thị tên bảng, truy vấn hoặc câu lệnh SQL
- Loại: là một trong các giá trị (dbOpenTable, dbOpenDynaset, dbOpenSnapshot)
5/21/2010
Design: Nguyen Hien Du
12
Ví dụ: Tạo Recordset gắn với csdl hiện hành
Dim db As DAO.Database
Dim Rs As DAO.Recordset
Set db = DBEngine.Workspaces(0).Databases(0)
Set Rs = db.OpenRecordset("DSCB", dbOpenTable)
While Not Rs.EOF
MsgBox Rs.Fields("Hoten").Value
Rs.MoveNext
Wend
Rs.Close
db.Close
5/21/2010
Design: Nguyen Hien Du
13
Ví dụ 2. Kết hợp với các lệnh SQL
Dim db As DAO.Database
Dim Rs As DAO.Recordset
Set db = DBEngine.Workspaces(0).Databases(0)
Set Rs = db.OpenRecordset("SELECT Hoten FROM DSCB", dbOpenDynaset)
While Not Rs.EOF
MsgBox Rs.Fields("Hoten").Value
Rs.MoveNext
Wend
Rs.Close
db.Close
5/21/2010
Design: Nguyen Hien Du
14
Ví dụ 3. Kết hợp với truy vấn. giả sử ta tạo query có tên "HT".
Dim db As DAO.Database
Dim Rs As DAO.Recordset
Set db = DBEngine.Workspaces(0).Databases(0)
Set Rs = db.OpenRecordset("HT", dbOpenDynaset)
While Not Rs.EOF
MsgBox Rs.Fields("Hoten").Value
Rs.MoveNext
Wend
Rs.Close
db.Close
5/21/2010
Design: Nguyen Hien Du
15
Hoăc có thể viết
Dim db As DAO.Database
Dim Rs As DAO.Recordset
Dim Qr As DAO.QueryDef
Set db = DBEngine.Workspaces(0).Databases(0)
Set Qr = db.QueryDefs("a1")
Set Rs = Qr.OpenRecordset()
While Not Rs.EOF
MsgBox Rs.Fields("Hoten").Value
Rs.MoveNext
Wend
Rs.Close
db.Close
5/21/2010
Design: Nguyen Hien Du
16
2. Tham chiếu đến các trường của Recordset
Để lấy dữ liệu của các trường hoặc thay đổi giá trị của các trường cần tham chiếu đến các trường của Recordset.
Dùng tên trường
Có thể dùng 3 cách viết sau:
Bien_Rec!tên trường
Bien_Rec("Tên trường")
Bien_Rec.Fields("Tên trường").Value
Ví dụ:
5/21/2010
Design: Nguyen Hien Du
17
Dim db As DAO.Database
Dim Rs As DAO.Recordset
Dim Qr As DAO.QueryDef
Set db = DBEngine.Workspaces(0).Databases(0)
Set Rs = db.OpenRecordset("HT", dbOpenDynaset)
While Not Rs.EOF
MsgBox Rs!Hoten & Rs.Fields("Ngaysinh").Value & Rs("kv")
Rs.MoveNext
Wend
Rs.Close
db.Close
5/21/2010
Design: Nguyen Hien Du
18
b. Dùng số thứ tự của trường
Để truy cập tới các trường thông qua số thứ tự cần dùng đối tượng và các thuộc tính sau:
Dùng thuộc tính count của đối tượng Fields để xác định:
N = Bien_Rec.Fields.Count
- Trong đó các trường thứ i (i=0..N-1) được viết như sau:
Bien_Rec.Fields(i)
Để xác định tên trường thứ i ta dùng thuộc tính Name:
Bien_Rec.Fields(i).Name
Để truy cập tới giá trị của trường ta dùng:
Bien_Rec.Fields(i).Value
5/21/2010
Design: Nguyen Hien Du
19
Ví dụ
Sub Dembg()
Dim Db as DAO.Database,
DimRec as DAO.RecordSet, dem as integer
Set Db=CurrentDb()
Set Rec=Db.OpenrecordSet("diem")
dem=Rec.RecordCount
Msgbox"tổng số bản ghi là" & dem
End Sub
5/21/2010
Design: Nguyen Hien Du
20
3. Tham chiếu đến các ô diều khiển của biểu mẫu
Để tham chiếu đến các ô của biểu mẫu ta có thể dùng các cách:
- Forms!Tên_biểu_mẫu!ô_điều_khiển
- Forms! Tên_biểu_mẫu("ô_điều_khiển")
ví dụ: giả sử forms Hoso có các textbox co tên Hoten, Ngaysinh ta viết như sau:
Forms![Hoso]![Hoten]
Forms![Hoso]("Ngaysinh")
5/21/2010
Design: Nguyen Hien Du
21
Một số phương thức của REcordset
Phương thức di chuyển
MoveFirst: Về bản ghi đầu tiên
MovePrevious: Về bản ghi trước
MoveNext: về bản ghi tiếp
MoveLast: Về bản ghi cuối cùng
Phương thức thêm, xoá, sửa
ADD: Thêm mới bản ghi
UPDATE: Cập nhật (Ghi lại) Bản ghi
EDIT: Sửa bản ghi
DELETE: Xóa bản ghi
5/21/2010
Design: Nguyen Hien Du
22
4. Phương thức tìm kiếm loại Dynaset,Snapshot
FindFirst : Tìm bản ghi đầu tiên
FindLast :Tìm bản ghi cuối cùng
FindNext :Tìm bản ghi tiếp theo
FindPrevious :Tìm bản ghi trước đó
5. Thuộc tính NoMatch()
NoMatch=False : nếu tìm thấy
NoMatch=True : Nếu không tìm thấy
6. Nhân biết vị trí bản ghi đầu, cuối
EOF = True: đã ở bản ghi cuối
BOF=True : đã ở bản ghi đầu tiên
5/21/2010
Design: Nguyen Hien Du
23
1. Khởi tạo cơ sở dữ liệu.
Cấu trúc:
Set db = ws.CreateDatabase (name, locale, options)
Trong đó:
Db: là biến có kiểu là Database
Ws: là biến có kiểu Workspace
Name: tên csdl cần tạo
Locate: chọn ngôn ngữ sử dụng và mật khẩu csdl
Option: lựa chọn phiên bản bộ máy csdl
Khởi tạo đối tượng
5/21/2010
Design: Nguyen Hien Du
24
Dim Ws as dao.workspace
Dim db as dao.database

Ví dụ 1:
Set db = ws.CreateDatabase("Newdb.mdb", dbLangGeneral, dbEncrypt)

Ví dụ 2:
Set db = ws.CreateDatabase("NewDB.mdb", dbLangGeneral & ";pwd=Password"
, dbEncrypt)
5/21/2010
Design: Nguyen Hien Du
25
2. Khởi tạo Table
Set TB = DB.CreateTableDef (name)
Trong đó:
TB: là biến có kiểu Tabledef
Name: tên bảng cần tạo
Ví dụ:
Dim tb as dao.tabledef
Set tb = db.CreateTableDef("Khachhang")
5/21/2010
Design: Nguyen Hien Du
26
3. tạo trường
Cấu trúc:
Set fd = Tb.CreateField (name, type, size)
Trong đó:
Fd: biến kiểu trường
Name: tên trường
Type: kiểu của trường
Size: độ rộng của trường
Lưu ý: đối với kiểu number hoặc date không đặt độ rộng cho trường, chỉ áp dụng cho kiểu text
5/21/2010
Design: Nguyen Hien Du
27
Các kiểu dữ liệu của trường:
dbBoolean
dbByte
dbChar
dbCurrency
dbDate
dbDouble
dbInteger
dbLong
dbLongBinaryLong Binary (OLE Object)
dbMemo
dbNumeric, dbSingle, dbText
......
5/21/2010
Design: Nguyen Hien Du
28
Ví dụ:
Set db = OpenDatabase("Khachhang.mdb")
Set td = db.CreateTableDef("Custommer")
With td
.Fields.Append .CreateField("Makh", dbText) .Fields.Append .CreateField("Tenkhach", dbtext)
.Fields.Append .CreateField("Soluong", dbinteger)
End With
db.TableDefs.Append td
5/21/2010
Design: Nguyen Hien Du
29
ví dụ : Ta có bảng NHANSU gồm các trường : hoten, mucluong, ngáyinh, namlenluong. Tạo thủ tăng lương thêm 10000 đồng cho những cán bộ lên lương từ năm 2000 trở về trước .
Sub tangluong()
Dim db as DAO.Database, Rec as DAO. RecordSet
Set Db=currentDb() (gắn biến db vào CSDL hiệnthời)
Set Rec=Db.OpenRecordSet("NHANSU")
Do Until Rec.EOF (làm cho đến hết tệp)
5/21/2010
Design: Nguyen Hien Du
30
if Rec![namlenluong]<=2000 then
Rec.edit (cho phép sửa nội dung các bảnghi)
Rec![mucluong]=rec![mucluong]+10000
Rec Update (cập nhật giá trị mới )
End if
Rec.MoveNext (di chuyển đến hết bản ghi)
loop
Rec.Close: db.close
End sub
5/21/2010
Design: Nguyen Hien Du
31
ví dụ 4: Ta có bảng DIEM gồm các trường : SBD , hoten, tongdiem. Tạo một thủ tục in danh sáchnhững thí sinh có tongDiem>=20
Sub danhsach()
Dim Db as DAO. Database
Dim Rec as DAO.RecordSet
Set Db=CurrentDb()
Set Rec=Db.OpenRecordSet("Diem")
Rec.Movefirst (chuyển trỏ đến bản ghi đầu tiên)
5/21/2010
Design: Nguyen Hien Du
32
Do Until Rec.EOF
if Rec![TongDiem]>=20 Then
Msgbox"SBD:" & Rec![SBD] & vbcrlf & "họ tên:" & Rec![hoten] & vbcrlf & "tổng diiểm" & Rec![tongdiem]
End if
Rec.MoveNext (chuyển trỏ đến bản ghi kế tiếp)
loop
Rec.Close
Db.Close
End sub
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...

Người chia sẻ: Trần Ngọc Vũ An
Dung lượng: | Lượt tài: 1
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)