Professional Documents
Culture Documents
Chuong 6 Lap Trinh CSDL
Chuong 6 Lap Trinh CSDL
CHNG 6
LP TRNH C S D LIU
1. Khi nim v k thut DAO
DAO (Data Access Objects Cc i tng truy xut d liu) l tp hp
bao gm lp cc i tng c th dng lp trnh truy cp v x l d liu
trong cc h CSDL. y CSDL Access, ngn ng lp trnh VBA.
1.1 Np th vin DAO
np th vin DAO3.6 vo lm vic, hy thc hin nh sau:
Bc 1: M ca s lp trnh VBA;
Bc 2: Chn thc n Tools | References .. Hp thoi sau xut hin:
Hy chn (tch) mc Microsoft DAO 3.6 Object Libraly trn danh sch
Available References; chn xong, nhn OK ng li.
1.2 S lin kt qun l c s d liu
Trong :
59
Trong :
Workspaces nh ngha tp hp cc vng lm vic. y c th coi l
lp lm vic cao nht. V l thuyt c th khai bo mt vi vng lm vic
(Workspace), nhng trn thc t ch cn khai bo mt vng lm vic v vng
60
61
Khai bo
Dim db As DAO.Database
' Gn db cho mt CSDL c th
Set db = OpenDatabase(C:\Baitap\qlbh.mdb)
'c bit, lnh gn db cho CSDL hin ti nh sau:
Set db = CurrentDb
Khi khng lm vic vi CSDL no , c th ra lnh ng gii phng
b
nh bng cch:
db.Close
Sau khi lnh ny thc thi, tt c cc i tng con ca db nu ang m s
c
ng li gii phng b nh. Bn thn db cng c gii phng b nh (bng
Nothing), tt nhin tp CSDL v d liu vn cn nguyn trn a.
2.3 i tng RecordSet
2.3.1 Khai bo
Recordset l i tng dng miu t tp hp cc bn ghi ca mt bng,
ca
mt query hoc tp cc bn ghi kt qu ca vic thi hnh mt cu lnh SQL no
.
Lp cc i tng con ca Recordset c th hin qua s sau:
Khai bo:
Set rs=db.OpenRecordset(<Name>)
Trong :
- Set rs = db.OpenRecordset l lnh to ra tp hp cc bn ghi
t CSDL db gn vo bin kiu recordset rs;
62
Msgbox rs.Fields("hoten").Value
hoc
Msgbox rs.Fields("hoten")
2.3.3 Mt s phng thc ca Recordset
a, Phng thc Close
ng Recordset, gii phng b nh. Ch thc hin hnh ng ny khi
khng lm vic vi Recordset no .
b, Phng thc di chuyn bn ghi ca Recorset
- Phng thc MoveFirts: Dch chuyn con tr v bn ghi u tin
- Phng thc MoveLast: Dch chuyn con tr v bn ghi cui cng
- Phng thc MoveNext: Dch n bn ghi k sau
- Phng thc MovePrevious: Dch n bn ghi k trc
V d: duyt v hin th ton b Hoten ca bng canbo
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("canbo")
If rs.RecordCount > 0 Then
rs.MoveFirst
While rs.EOF = False
MsgBox rs.Fields("hoten").Value
rs.MoveNext
Wend
End If
c, Phng thc AddNew, Update
thm mi mt bn ghi vo Recordset. Qui trnh thm mt bn ghi mi
nh sau:
1. Ra lnh Addnew
2. Gn gi tr cho cc trng ca bn ghi mi
3. Ra lnh Update
.
V d: thm mi mt h s cn b mi vo bng canbo
Dim
Dim
Set
Set
db
rs
db
rs
As DAO.Database
As DAO.Recordset
= CurrentDb
= db.OpenRecordset("canbo")
64
rs.AddNew
rs.Fields("canboID") = "CB0001"
rs.Fields("hoten") = "Lang Vn Tin"
rs.Fields("ngaysinh") = #10/08/1989#
rs.Fields("gioitinh") = True
rs.Fields("chucvuID") = "CV001"
rs.Update
End If
End Sub
to v kch hot mt query trn VBA bng cch thc thi cu lnh SQL
chng ta thc hin nh sau:
'Khai bo mt bin kiu Database v mt bin kiu QueryDef
Dim db As DAO.Database
Dim qr As DAO.QueryDef
66
Trong :
- db l bin kiu Database c gn bi CSDL cn lm vic (bng
mi s c to ra trn CSDL ny);
- <Tn bng mi> l tn bng cn to.
- Lnh db.TableDefs.Append tbl l lnh ghi cu trc bng ang khai bo
ln CSDL ch nh.
b, Phng thc CreateField
to ra cc trng cho mt bng kiu TableDef no . thm mt
trng mi ln bng, s dng c php sau:
tbl.Fields.Append tbl.CreateField(<tn trng>,<KiuDL>,<ln>)
Trong :
- <tn trng> - tn trng mi cn to;
- <KiuDL> - l mt tu chn khai bo kiu d liu ca trng cn
to. Kiu d liu c khai bo theo cc hng s nh sau:
dbBoolean
Boolean
dbByte
Byte
dbChar
Currency
dbDate
Date/Time
dbDecimal
Decimal
dbDouble
Double
dbFloat
Float
dbGUID
GUID
dbInteger
Integer
68
dbLong
Long
dbMemo
Memo
dbNumeric
Numeric
dbSingle
Single
dbText
Text
dbTime
Time
- < ln> l mt tu chn khai bo ln d liu nu cn.
V d:
Sub TaoBangMoi()
On Error GoTo Loi
Dim tbl As DAO.TableDef
Set tbl = db.CreateTableDef("NewTable")
tbl.Fields.Append tbl.CreateField("ID", dbInteger)
tbl.Fields.Append tbl.CreateField("Name", dbText)
tbl.Fields.Append tbl.CreateField("Age", dbByte)
tbl.Fields.Append tbl.CreateField("DateBirth", dbDate)
tbl.Fields.Append tbl.CreateField("Comment", dbMemo)
db.TableDefs.Append tbl
Exit Sub
Loi:
If Err.Number = 3010 Then
MsgBox " tn ti bng c tn " + tbl.Name
End If
End Sub
1.6 i tng Relation
i tng Relation dng to kt ni (RelationShip) gia 2 bng trong
CSDL Access.
V d: to kt ni gia 2 bng hoadon v khach trong CSDL Qun l bn hng.
Sub CreatRelationShip()
On Error GoTo Loi
Dim db As DAO.Database
Dim rls As DAO.Relation
Set db = CurrentDb
Set rls = db.CreateRelation("TaoQuanHe", "khach", "hoadon",
dbRelationUpdateCascade)
69
rls.Fields.Append rls.CreateField("khachID")
rls.Fields("khachID").ForeignName = "khachID"
db.Relations.Append rls
Loi:
If Err.Number = 3012 Then
MsgBox " tn ti quan h ny !"
End If
End Sub
Trong trung hp tn ti kt ni ny, mt thng bo li ting Vit "
tn ti quan h ny !" xut hin.
3. t lc d liu
t lc l lp bi ton ph dng trong thc t. Vi bi ton ny phi c
nhng yu cu c th v lc d liu (iu kin lc). Kt qu tr v s l mt tp
hp cc bn ghi, c th c kt xut trn form hoc c in ra my in di
dng report.
3.1 Quy trnh thc hin
Bc 1: Xy dng Subform - form s cha nhng kt qu lc c.
Bc 2: Xy dng Mainform - form cha nhng thit lp iu kin
lc.
Bc 3: Thc hin lc ra cc bn ghi tho mn cc iu kin trn
Mainform v hin th kt qu ln Subform.
V d: Thc hin form lc d liu sau:
71
72
73