You are on page 1of 41

§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn

Windows

Ch¬ng 7:
LËp tr×nh C¬ Së D÷ LiÖu
I. Tæng quan vÒ lËp tr×nh c¬ së d÷ liÖu
1. Mét sè kh¸i niÖm c¬ b¶n
Ng«n ng÷ lËp tr×nh Visual Basic, cho tíi thêi ®iÓm hiÖn t¹i lµ ng«n ng÷
phï hîp nhÊt cho c¸c øng dông truy cËp c¬ së d÷ liÖu. Ta thÊy:
- Mét ch¬ng tr×nh qu¶n lý th«ng thêng sÏ ®i kÌm víi mét c¬ së d÷
liÖu chøa ®ùng c¸c th«ng tin vÒ lÜnh vùc cÇn qu¶n lý.
- C«ng viÖc cña ngêi lËp tr×nh lµ t¹o ra c¸c giao diÖn cho phÐp
cËp nhËt, t×m kiÕm, thèng kª b¸o c¸o trªn c¬ së d÷ liÖu ®ã.
Ch¬ng nµy tËp trung giíi thiÖu c¸c ph¬ng ph¸p ®Ó t¹o ra c¸c øng dông nh
vËy. Ta lµm quen víi mét sè kh¸i niÖm
- Recordset: lµ mét “kiÓu d÷ liÖu” trong Visual Basic. Trong lËp tr×nh
c¬ së d÷ liÖu, ta thêng xuyªn thùc hiÖn thao t¸c trªn c¸c b¶ng d÷ liÖu hoÆc trªn
mét tËp b¶n ghi cña b¶ng. Khi ®ã, ®èi tîng Recordset ®îc t¹o ra dïng ®Ó chøa
tËp hîp c¸c b¶n ghi mµ ta lÊy vÒ tõ mét hay nhiÒu b¶ng nµo ®ã trong c¬ së d÷
liÖu.
Nh vËy, Recordset t¬ng tù nh mét cÊu tróc d÷ liÖu ®Ó chøa c¸c b¶n ghi
lÊy ®îc vµ mét sè ph¬ng thøc thao t¸c trªn tËp b¶n ghi ®ã.
VÒ b¶n chÊt, mét biÕn cã kiÓu Recordset, t¹i mét thêi ®iÓm cã thÓ chøa
mét b¶ng d÷ liÖu. Tuy nhiªn, ®ã lµ sù më réng kh¸i niÖm b¶ng d÷ liÖu b»ng
c¸ch thªm vµo ®ã c¸c thao t¸c c¬ b¶n trªn b¶ng d÷ liÖu ®ã.
- Bé m¸y c¬ së d÷ liÖu (DataBase Engine): Mét øng dông sÏ kÕt nèi tíi
c¬ së d÷ liÖu theo m« h×nh sau:
øng dông

Bé m¸y c¬ së d÷
liÖu (Data Base
Engine)

C¬ së d÷
liÖu

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 1 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
H×nh 1: M« h×nh kÕt nèi c¬ së d÷ liÖu tõ øng dông Visual Basic
V× c¸c c¬ së d÷ liÖu ®îc t¹o ra tõ nhiÒu hÖ qu¶n trÞ c¬ së d÷ liÖu kh¸c
nhau nªn mét øng dông Visual Basic kh«ng thÓ truy cËp trùc tiÕp chóng mµ
th«ng qua c¸c bé m¸y c¬ së d÷ liÖu kh¸c nhau. C¸c bé m¸y nµy ®ãng vai trß
trung gian trong qu¸ tr×nh giao tiÕp gi÷a øng dông víi c¬ së d÷ liÖu.
- Connection: Mét biÕn ®èi tîng cã kiÓu Connection ®îc dïng ®Ó kÕt
nèi víi mét c¬ së d÷ liÖu. Th«ng thêng, qu¸ tr×nh kÕt nèi cÇn cã c¸c th«ng tin
®Çu vµo nh: Tªn bé m¸y c¬ së d÷ liÖu dïng ®Ó kÕt nèi, tªn, ®êng dÉn tíi c¬ së
d÷ liÖu, tªn ngêi truy cËp, mËt khÈu ..v..v…C¸c th«ng tin ®ã ®îc gép chung
trong mét chuçi gäi lµ chuçi kÕt nèi (ConnectString). Khi sö dông biÕn cã kiÓu
Connection ®Ó kÕt nèi tíi c¬ së d÷ liÖu, ta cÇn x¸c ®Þnh ConnectString cña
biÕn ®ã vµ sö dông chuçi kÕt nèi nµy ®Ó kÕt nèi tíi c¬ së d÷ liÖu, gäi lµ “Më
c¬ së d÷ liÖu”
- C¸c OCX: Lµ c¸c ®iÒu khiÓn cã thÓ ®a vµo mét øng dông Visual
Basic. C¸c ®iÒu khiÓn nµy cã thÓ lµ néi t¹i (Build - in: cã s½n trong m«i trêng
lËp tr×nh Visual Basic) hoÆc do c¸c nhµ lËp tr×nh t¹o nªn vµ ®a vµo m«i trêng
lËp tr×nh nµy (cßn gäi lµ Add - in). Ta cã thÓ t×m kiÕm c¸c OCX b»ng c¸ch
chän: Project\ Components.
- C¸c ActiveX: Lµ c¸c kiÓu d÷ liÖu ®Æc biÖt cã thÓ dïng trong khi lËp
tr×nh. Thùc chÊt ®©y lµ c¸c líp ®èi tîng ®· ®îc ®Þnh nghÜa s½n vµ cung cÊp
cho chóng ta nh÷ng thuéc tÝnh, ph¬ng thøc rÊt h÷u dông khi lËp tr×nh. Nh
vËy, ngoµi c¸c kiÓu d÷ liÖu c¬ b¶n nh: integer, single, double, string… ta cßn
cã c¸c kiÓu d÷ liÖu kh¸c tiÖn dông h¬n, chÝnh lµ c¸c ActiveX. Cã thÓ lùa
chän c¸c kiÓu d÷ liÖu ActiveX b»ng c¸ch chän: Project\ References.
2. T¹o mét c¬ së d÷ liÖu
a. C¸c kiÓu d÷ liÖu c¬ b¶n:
C¬ së d÷ liÖu néi t¹i cña Visual Basic cung cÊp rÊt nhiÒu kiÓu d÷ liÖu
kh¸c nhau. Sau ®©y lµ mét sè kiÓu th«ng dông cã thÓ dïng ®Ó ®Þnh nghÜa
kiÓu cho c¸c trêng trong b¶ng d÷ liÖu:

Tªn kiÓu ý nghÜa - §é réng


Boolean KiÓu logic chØ nhËn 2 gi¸ trÞ True/ False
Byte KiÓu sè nguyªn ng½n 1 byte
Integer KiÓu sè nguyªn 2 byte
Long KiÓu sè nguyªn dµi 4 byte
Single KiÓu sè thùc ®¬n 4 byte
Double KiÓu sè thùc kÐp 8 byte
Date/ Time KiÓu ngµy/ giê

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 2 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
Text KiÓu v¨n b¶n tíi 255 ký tù
Memo KiÓu v¨n b¶n ghi chó tíi 32000 ký tù

Mét sè kiÓu d÷ liÖu cña Visual Basic t¬ng thÝch víi c¸c kiÓu d÷ liÖu
trong Access. Tuy nhiªn mét sè kiÓu kh¸c kh«ng thÓ ®îc ®Þnh nghÜa trong
m«i trêng Access.
b. T¹o c¬ së d÷ liÖu tõ Access
Mét øng dông Visual Basic cã thÓ truy cËp c¬ së d÷ liÖu ®îc thiÕt kÕ
trong m«i têng Access (hay cã ®Þnh d¹ng Access). ViÖc t¹o c¬ së d÷ liÖu tõ hÖ
qu¶n trÞ c¬ së d÷ liÖu Access lµ t¬ng ®èi ®¬n gi¶n vµ quen thuéc. ë ®©y chØ
giíi thiÖu nh÷ng thao t¸c c¬ b¶n:
- Vµo m«i trêng Microsoft Access.
- Më mét c¬ së d÷ liÖu míi ®Ó thiÕt kÕ.
- T¹o c¸c b¶ng (table) cña c¬ së d÷ liÖu (Create Table in Design View):
+ §Æt tªn trêng, kiÓu d÷ liÖu cña trêng vµ mét sè thuéc tÝnh kh¸c
cña trêng d÷ liÖu ®ang ®Þnh nghÜa.
+ T¹o kho¸ cho b¶ng quan hÖ (nÕu cÇn)
- T¹o c¸c truy vÊn trong c¬ së d÷ liÖu (nÕu cÇn). C¸c truy vÊn cã vai trß
nh mét b¶ng quan hÖ trong m«i trêng lËp tr×nh Visual Basic.
- T¹o c¸c quan hÖ rµng buéc tÝnh toµn vÑn d÷ liÖu Relationship (nÕu
cÇn).
Chó ý:
Th«ng thêng, ta sö dông m«i trêng Access ®Ó t¹o c¬ së d÷ liÖu dïng cho
øng dông ®ang x©y dùng trong m«i trêng Visual Basic.
c. T¹o c¬ së d÷ liÖu b»ng tr×nh Data Manager cña Visual Studio
ViÖc t¹o c¬ së d÷ liÖu b»ng Microsoft Access lµ t¬ng ®èi thuËn tiÖn vµ
®¬n gi¶n. Tuy nhiªn, mét khã kh¨n ®Æt ra lµ chóng ta lu«n ph¶i cµi ®Æt m«i
trêng Microsoft Access kÌm theo bé Visual Studio. Mét bÊt tiÖn n¶y sinh lµ:
nÕu øng dông Visual Basic cÇn truy cËp c¬ së d÷ liÖu thuéc hÖ qu¶n trÞ c¬ së
d÷ liÖu nµo, ta ®Òu sö dông hÖ qu¶n trÞ c¬ së d÷ liÖu ®ã ®Ó t¹o d÷ liÖu th×
b¾t buéc ph¶i cµi ®Æt hÖ qu¶n trÞ c¬ së d÷ liÖu ®ã kÌm theo.
§Ó gi¶i quyÕt vÊn ®Ò trªn, Visual Basic ®· x©y dùng mét m«i trêng
gióp ta t¹o ra c¸c c¬ së d÷ liÖu thuéc c¸c hÖ qu¶n trÞ c¬ së d÷ liÖu kh¸c nhau
(hay cã ®Þnh d¹ng t¬ng thÝch nhiÒu hÖ qu¶n trÞ c¬ së d÷ liÖu kh¸c nhau) nh
Access, Dbase, Foxpro, Paradox… mµ kh«ng cÇn ph¶i cµi ®Æt c¸c hÖ qu¶n
trÞ c¬ së d÷ liÖu nµy trªn m¸y.

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 3 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
§Ó t¹o c¬ së d÷ liÖu b»ng Visual Data Manager ta lµm nh sau:
-Tõ cöa sæ lËp tr×nh Visual Basic, Chän Add – Ins\ Visual Data
Manager. Khi ®ã m«i trêng thiÕt kÕ c¬ së d÷ liÖu sÏ xuÊt hiÖn.
-Chän File\ New vµ chän mét lo¹i c¬ së d÷ liÖu muèn t¹o (cã thÓ chän
MS. Access). Khi ®ã cöa sæ t¹o c¬ së d÷ liÖu sÏ xuÊt hiÖn nh h×nh sau:

H×nh 2: Cöa sæ t¹o c¬ së d÷ liÖu cña Visual Data Manager


- Trªn Data Base Window, chän Properties, kÝch ph¶i chän New Table
®Ó t¹o b¶ng quan hÖ míi. Khi ®ã ta cÇn:
+ §Æt tªn b¶ng quan hÖ cÇn t¹o.
+ Chän Add Field ®Ó thªm mét trêng míi vµo b¶ng quan hÖ ®ang
®Þnh nghÜa.
+ §Ó thªm trêng míi, ta cÇn nhËp tªn trêng, kiÓu d÷ liÖu cña trêng
vµ ®Æt mét sè thuéc tÝnh cho trêng d÷ liÖu ®ã (nÕu cÇn).
- Chän Build table ®Ó lu b¶ng quan hÖ võa t¹o.
Khi ®· cã c¸c b¶ng quan hÖ, ta cã thÓ t¹o c¸c query tuú ý b»ng c¸ch kÝch
ph¶i vµo mét trong c¸c b¶ng quan hÖ ®· t¹o vµ chän New Query.

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 4 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
3. C¸c hµm thêng dïng
Trong qu¸ tr×nh lËp tr×nh c¬ së d÷ liÖu, ta thêng dïng c¸c hµm sau ®Ó
kiÓm tra tÝnh hîp lÖ vµ chuÈn ho¸ d÷ liÖu:

Tªn hµm Chøc n¨ng


Str(Number) §æi c¸c sè thµnh chuçi
Chr() §æi sè thµnh ký tù t¬ng øng (ASCII)
Trim(Chuçi) C¾t c¸c ký tù trèng hai bªn chuçi
Ltrim(Chuçi) C¾t c¸c ký tù trèng bªn tr¸i chuçi
Rtrim(chuçi) C¾t c¸c ký tù trèng bªn ph¶i chuçi
IsDate(Chuçi) KiÓm tra xem chuçi cã d¹ng Date kh«ng (True/False)
IsNumeric(Chuçi) KiÓm tra xem chuçi cã d¹ng sè kh«ng (True/False)
IsString(Gi¸ trÞ) KiÓm tra xem gi¸ trÞ cã ë d¹ng x©u kh«ng (True/False)
CDate(Gi¸ trÞ) §æi gi¸ trÞ cã ®Þnh d¹ng date sang kiÓu Date
CString(Gi¸ trÞ) §æi gi¸ trÞ sang ®Þnh d¹ng string
Val(Gi¸ trÞ) §æi gi¸ trÞ cã ®Þnh d¹ng sè sang kiÓu sè

C¸c hµm nµy thêng ®îc dïng ®Ó kiÓm tra xem d÷ liÖu ®· phï hîp cha
(tríc khi lu vµo c¬ së d÷ liÖu) hoÆc chuÈn ho¸ d÷ liÖu (nÕu cÇn).
II. cËp nhËt d÷ liÖu qua c¸c ®iÒu khiÓn
1. Giíi thiÖu chung
Mét c«ng viÖc rÊt quan träng, cã trong hÇu hÕt c¸c øng dông lµ t¹o ra c¸c
giao diÖn dïng cho viÖc cËp nhËt d÷ liÖu. Visual Basic ®· cung cÊp c¸c ®iÒu
khiÓn rÊt h÷u dông cho ngêi lËp tr×nh.
Trong phÇn nµy, chóng ta sÏ t×m hiÓu vÒ hai cÆp ®iÒu khiÓn c¬ b¶n
®Ó t¹o c¸c form cËp nhËt d÷ liÖu cho øng dông: CÆp Data vµ DBGrid, cÆp
ADODC vµ DataGrid.
Trong c¸c ®iÒu khiÓn trªn th×:
- §iÒu khiÓn Data vµ ADODC: dïng ®Ó kÕt nèi tíi c¬ së d÷ liÖu vµ tíi
b¶ng quan hÖ cÇn cËp nhËt.
- §iÒu khiÓn DBGrid vµ DataGrid: lµ c¸c líi lµm nhiÖm vô hiÓn thÞ d÷
liÖu trong b¶ng ®· ®îc ®iÒu khiÓn Data vµ ADODC kÕt nèi tíi. V× lý do ®ã,
chóng thêng ®i theo cÆp.
Víi mçi cÆp ®iÒu khiÓn, ta cÇn:
Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 5 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
- N¾m ®îc c¸ch thuéc tÝnh cña chóng ®Ó sö dông khi cÇn
- N¾m ®îc c¸c ph¬ng thøc cña chóng ®Ó t¹o c¸c thao t¸c khi truy cËp d÷
liÖu.
2. CÆp Data vµ DB Grid
§iÒu khiÓn Data lu«n cã s½n trªn thanh c«ng cô. §Ó cã ®îc ®iÒu khiÓn
DBGrid, ta chän: Chän Project\ Components\ Microsoft Data Bound Grid
Control 5.0 (hoÆc cao h¬n).
§Ó hiÓn thÞ ®îc d÷ liÖu qua 2 ®iÒu khiÓn trªn, ta lµm theo c¸c bíc sau:
Bíc 1: VÏ hai ®iÒu khiÓn trªn vµo form.
Bíc 2: ThiÕt ®Æt c¸c thuéc tÝnh cho ®iÒu khiÓn Data ®Ó kÕt nèi tíi c¬
së d÷ liÖu vµ b¶ng quan hÖ cÇn thiÕt b»ng c¸ch:
- Chän ®iÒu khiÓn Data.
- §Æt thuéc tÝnh DataBaseName b»ng c¸ch chän c¬ së d÷ liÖu muèn kÕ nèi tíi.
- §Æt thuéc tÝnh RecordSource b»ng c¸ch chän tªn b¶ng quan hÖ (hoÆc Query)
muèn thao t¸c.
Bíc 3: Chän ®iÒu khiÓn DBGrid.
Bíc 4: ThiÕt ®Æt mèi quan hÖ gi÷a hai ®iÒu khiÓn:
- §Æt thuéc tÝnh DataSource cña ®iÒu khiÓn DBGrid b»ng c¸ch chän tªn cña ®iÒu
khiÓn Data trªn form.
§Õn ®©y, c«ng viÖc hiÓn thÞ d÷ liÖu ®· hoµn tÊt. Tuy nhiªn, ta cÇn
quan t©m tíi c¸c thuéc tÝnh kh¸c cña c¸c ®iÒu khiÓn trªn ®Ó thiÕt ®Æt khi
cÇn. Danh s¸ch c¸c thuéc tÝnh c¬ b¶n cña 2 ®iÒu khiÓn trªn ®îc liÖt kª trong
b¶ng díi ®©y:
[1]. Danh s¸ch mét sè thuéc tÝnh cña ®iÒu khiÓn Data

Stt Tªn thuéc tÝnh ý nghÜa

1 Connect KiÓu c¬ së d÷ liÖu sÏ lµm viÖc (Access, Fox, Oracle…). MÆc


®Þnh lµ Access
2 Caption Tiªu ®Ò sÏ hiÖn lªn trªn Data
3 DataBase name Tªn c¬ së d÷ liÖu sÏ kÕt nèi
KiÓu bé m¸y c¬ së d÷ liÖu dïng ®Ó kÕt nèi. NÕu lµm viÖc trªn c¬
4 DefaultType
së d÷ liÖu Access th× chän UseJet.
5 Record Source Tªn b¶ng trong c¬ së d÷ liÖu võa chän trong Data Base name.
[2]. Mét sè thuéc tÝnh cña DBGrid
(chän ®iÒu khiÓn, kÝch ph¶i, chän Properties)
Stt Tªn thuéc tÝnh ý nghÜa
Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 6 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
1 AllowAdd new Cho phÐp kh«ng cho phÐp thªm b¶n ghi míi ngay trªn DB Grid
Cho phÐp/ kh«ng cho phÐp sö dông c¸c phÝm mòi tªn khi cËp
2 AllowArrow
nhËt
3 Allow Delete Cho phÐp/ kh«ng cho phÐp xo¸ d÷ liÖu ngay trªn DB Grid
4 Allow Update Cho phÐp/ kh«ng cho phÐp söa ®æi d÷ liÖu ngay trªn DB Grid
5 Column Header Cã/ kh«ng cã phÇn tiªu ®Ò cho mçi cét

6 Data Mode Bound/ Unbound cho phÐp rµng buéc/ kh«ng rµng buéc tíi b¶ng
d÷ liÖu cña data.
7 Data source Nguån d÷ liÖu hiÓn thÞ, thêng chän tªn cña ®iÒu khiÓn Data
8 DefColumn Width §Æt ®é réng mÆc ®Þnh cho c¸c cét. NÕu kh«ng ®Æt th× ®Ó 0
9 HeadLine §Æt sè dßng cho phÇn tiªu ®Ó cña líi
10 Row DividerStyle KiÓu ®êng kÎ ngang cña líi
Víi c¸c thuéc tÝnh trªn, chóng ta cã thÓ thiÕt kÕ mét líi tuú ý. Tuy nhiªn
phÇn sau ®©y sÏ híng dÉn mét c¸ch thiÕt ®Æt mét líi d÷ liÖu hay dïng nhÊt.
- ThiÕt kÕ líi tuú ý:
[1]. Chän líi cÇn thiÕt kÕ, kÝch ph¶i chän edit.
[2]. Chän líi cÇn thiÕt kÕ, kÝch ph¶i chän:
+ Insert: thªm cét.
+ Append: Xo¸ cét.
+ Split: Chia líi thµnh nhiÒu khung nh×n kh¸c nhau.
+ Remove : Xo¸ bá c¸c khung nh×n võa thªm vµo.
+ Retrieve Filed: thiÕt kÕ líi tù déng phï hîp víi b¶ng d÷ liÖu ®· liªn kÕt tíi líi.
[3]. Chän líi cÇn thiÕt kÕ, kÝch ph¶i, chän Properties. Khi ®ã, cã thÓ ®Æt c¸c
thuéc tÝnh ®Ó thiÕt kÕ cho líi. Lu ý c¸ch ®Æt Caption vµ ®é réng cho tõng
cét:
+ Chän Columns: Khi ®ã, chän mét cét tuú ý trong danh s¸ch c¸c cét vµ ®Æt c¸c
thuéc tÝnh cho cét võa chän bao gåm:
. Caption: tiªu ®Ò cét.
. Data field: Tªn trêng mµ cét ®ã sÏ liªn kÕt tíi.
. Default value: Gi¸ trÞ mÆc ®Þnh cho cét, trong trêng hîp cha liªn kÕt
d÷ liÖu hoÆc d÷ liÖu bÞ trèng.
. NumberFormat: §Þnh d¹ng cho d÷ liÖu kiÓu sè.
+ Chän Layout: Khi ®ã, chän tõng cét trong danh s¸ch c¸c cét vµ ®Æt ®é réng cho
c¸c cét trong « Width, ®Æt kiÓu c¨n lÒ trong « Alignment.
3. CÆp ADODC vµ Data Grid

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 7 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
§Ó cã ®îc hai ®iÒu khiÓn nµy, ta cÇn chän: Project\ Components\
Microsoft ADO Data Control 6.0 vµ Microsoft Data Grid Control 6.0.
§Ó hiÓn thÞ ®îc d÷ liÖu qua 2 ®iÒu khiÓn trªn, ta lµm theo c¸c bíc sau:
Bíc 1: VÏ hai ®iÒu khiÓn trªn vµo form.
Bíc 2: ThiÕt ®Æt c¸c thuéc tÝnh cho ®iÒu khiÓn ADODC ®Ó kÕt nèi tíi c¬
së d÷ liÖu vµ b¶ng quan hÖ cÇn thiÕt b»ng c¸ch:
- Chän ®iÒu khiÓn ADODC.
- §Æt thuéc tÝnh ConnectString b»ng c¸ch kÝch chuét vµo thuéc tÝnh nµy trªn cöa
sæ Properties ®Ó x©y dùng chuçi kÕt nèi cho ®iÒu khiÓn.
C¸ch ®Æt chuçi kÕt nèi:
[1]. Chän ConnectString trªn cöa sæ Properties, chän Build.
[2]. Chän bé m¸y liªn kÕt c¬ së d÷ liÖu. NÕu dïng c¬ së d÷ liÖu Access ta
chän Microsoft Jet 4.0 OLE...
[3]. Chän Next ®Ó chän c¬ së d÷ liÖu sÏ kÕt nèi tíi b»ng c¸ch trong môc
Select or Enter data base name.
[4]. Chän Test Connected ®Ó kiÓm tra sù kÕt nèi cã thµnh c«ng kh«ng,
chän OK.
- §Æt thuéc tÝnh RecordSource ®Ó chØ ra b¶ng d÷ liÖu muèn thao t¸c.
Khi ®ã cÇn:
[1]. Chän Record Source trong cöa sæ Properties.
[2]. Trong Command type, chän:
+ adCmdUnknown hoÆc adCmdText nÕu muèn liªn kÕt tíi mét truy
vÊn. Khi ®ã cÇn gâ c©u truy vÊn SQL vµo « Command text.
+ adCmdTable nÕu muèn liªn kÕt tíi mét table. Khi ®ã cÇn chän tªn
b¶ng trong « Table or Stored Proceduce name, chän OK.
Bíc 3: Chän ®iÒu khiÓn DataGrid.
Bíc 4: ThiÕt ®Æt mèi quan hÖ gi÷a hai ®iÒu khiÓn:
- §Æt thuéc tÝnh DataSource b»ng c¸ch chän tªn cña ®iÒu khiÓn ADODC trªn
form.
Khi ®ã, c«ng viÖc hiÓn thÞ d÷ liÖu qua ADODC vµ DataGrid ®· hoµn
tÊt.
Chó ý:
Khi ®Æt ConnectString trùc tiÕp vµo ®iÒu khiÓn ADODC th× ®êng
dÉn tíi c¬ së d÷ liÖu trong chuçi kÕt nèi nµy ®îc ®Æt cøng (cè ®Þnh). Nh
vËy, khi thay ®æi th môc cña c¬ së d÷ liÖu sÏ g©y ra lçi. §Ó kh¾c phôc lçi

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 8 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
nµy, ngêi ta thêng kh«ng ®Æt hai thuéc tÝnh ConnectString vµ RecordSource
ngay lóc thiÕt kÕ mµ ®Æt khi sù kiÖn Form Load x¶y ra vµ sö dông ®êng dÉn
®éng App.Path. BiÕn App.Path sÏ cho ta ®êng dÉn ®éng tíi file thùc thi cña ch-
¬ng tr×nh. Nh vËy, ch¼ng h¹n ta viÕt:
Private Sub Form_Load()
‘§Æt ConnectString cho ADODC, thay ®êng dÉn th môc b»ng biÕn App.Path.
Me.Adodc1.ConnectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " &
App.Path & "\db1.mdb;Persist Security Info=False"
‘§Æt thuéc tÝnh RecordSource cho ADODC
Me.Adodc1.CommandType = adCmdText
Me.Adodc1.RecordSource = "select * from table1"

End Sub

Ngµi ra, ta cÇn tham kh¶o c¸c thuéc tÝnh cña hai ®iÒu khiÓn trªn ®Ó cã
thÓ sö dông khi cÇn. C¸c thuéc tÝnh ®îc liÖt kª trong b¶ng sau:
[1]. C¸c thuéc tÝnh cña ADODC
Stt Tªn thuéc tÝnh ý nghÜa
1. Caption Tiªu ®Ò sÏ hiÓn thÞ trªn ADODC, cã thÓ thay ®æi khi lËp tr×nh
2. CommandType KiÓu cña b¶ng d÷ liÖu sÏ liªn kÕt, bao gåm
3. ConnectString Chuçi kÕt nèi, cho phÐp kÕt nèi ADODC tíi mét c¬ së d÷ liÖu
4. Record Source B¶ng d÷ liÖu trong c¬ së d÷ liÖu mµ ADODC sÏ liªn kÕt tíi
….

[2]. C¸c thuéc tÝnh cña Data Grid


(chän ®iÒu khiÓn DataGrid, kÝch ph¶i, chän Properties)
Stt Tªn thuéc tÝnh ý nghÜa
1. Allow Add New Gièng nh trong Data
2. Allow Arrow Gièng nh trong Data
3. Allow Update Gièng nh trong Data
4. Column Headers Gièng nh trong Data
5. Data Source Chän tªn ADODC trªn form
6. DefColumn Width Gièng nh trong Data
7. Headline Gièng nh trong Data
8. Row DividerStyle Gièng nh trong Data
9. RowHeight ChiÒu cao cña mét dßng trªn líi

Nh vËy, ta còng cã thÓ thiÕt kÕ mét líi DataGrid tuú ý t¬ng tù nh thiÕt
kÕ DBGrid.
V× tÝnh u viÖt cña cÆp ADODC vµ DataGrid nªn ngêi ta thêng sö dông
chóng trong lËp tr×nh c¬ së d÷ liÖu. Do vËy, c¸c vÝ dô tõ ®©y vÒ sau sÏ tËp
trung giíi thiÖu vÒ cÆp ®iÒu khiÓn nµy.

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 9 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
(Lu ý: Khi sö dông cÆp Data – DBGrid rÊt dÔ x¶y ra hiÖn tîng kh«ng kÕt nèi ®îc
tíi c¬ së d÷ liÖu do c¸c phiªn b¶n cña MS Access kh«ng t¬ng thÝch. Khi dã cÇn Convert c¬
së d÷ liÖu sang phiªn b¶n phï hîp. Cã thÓ tr¸nh ®iÒu nµy b»ng c¸ch dïng ADODC-DataGrid)
4. CËp nhËt d÷ liÖu qua c¸c ®iÒu khiÓn
a. MÉu form cËp nhËt
Cã thÓ cã nhiÒu mÉu form cËp nhËt kh¸c nhau nhng nh×n chung, mét
form cËp nhËt lu«n cã c¸c chøc n¨ng:
- Xem: cho phÐp ngêi dïng xem d÷ liÖu. Th«ng thêng d÷ liÖu ®îc thÓ
hiÖn trªn líi.
- Bæ sung: cho phÐp ngêi dïng cã thÓ thªm c¸c b¶n ghi míi vµo trong
b¶ng d÷ liÖu. Cã thÓ bæ sung b¶n ghi trùc tiÕp trªn líi. Tuy nhiªn c¸ch nµy
kh«ng hiÖu qu¶ hoÆc nÕu lµm cho cã hiÖu qu¶ sÏ cÇn mét kü thuËt lËp tr×nh
t¬ng ®èi phøc t¹p. V× vËy ngêi ta thêng dïng c¸c ®iÒu khiÓn ®¬n gi¶n nh
TextBox, ComboBox ®Ó ngêi dïng nhËp d÷ liÖu qua ®ã.
- Xo¸: Cho phÐp xo¸ mét b¶n ghi nµo ®ã trong b¶ng d÷ liÖu.
- Söa: cho phÐp söa ®æi c¸c b¶n ghi ®· cã trong c¬ së d÷ liÖu.
- T×m kiÕm: Ngoµi chøc n¨ng xem, bæ sung, xo¸, söa th«ng thêng form
cËp nhËt thêng ®îc tÝch hîp thªm chøc n¨ng t×m kiÕm nh lµ chøc n¨ng phô, trî
gióp trong qu¸ tr×nh cËp nhËt.
Ta cã thÓ tham kh¶o mét form cËp nhËt nh h×nh sau:

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 10 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
H×nh 3: MÉu form cËp nhËt
Sau ®©y, ta sÏ xem xÐt c¸c kiÓu form cËp nhËt kh¸c nhau. C¸c form cËp
nhËt ®îc giíi thiÖu ngµy cµng hoµn thiÖn vµ ®ßi hái kü thuËt cao h¬n theo
tr×nh tù tõ dÔ tíi khã.
b. T¹o form cËp nhËt ®¬n gi¶n
Trong suèt phÇn lËp tr×nh c¬ së d÷ liÖu nµy, chóng ta lu«n sö dông mét
c¬ së d÷ liÖu duy nhÊt cho c¸c vÝ dô. Ta cÇn t¹o c¬ së d÷ liÖu trong m«i tr êng
Access (hoÆc Visual Basic tuú ý). C¬ së d÷ liÖu cã tªn DB1. mdb vµ bao gåm
mét b¶ng duy nhÊt Table1. B¶ng nµy cã cÊu tróc nh sau:

St Tªn thuéc tÝnh §é réng M« t¶


t
1 ID Text (8) M· nh©n viªn (Kho¸ chÝnh)
2 HoTen Text (50) Hä vµ tªn
3 NgaySinh DataTime Ngµy sinh
4 Luong Long L¬ng

SÏ kh«ng khã ®Ó t¹o mét form cËp nhËt ®¬n gi¶n. Ta lµm theo c¸c bíc
sau:
- ThiÕt kÕ form: bao gåm c¸c ®iÒu khiÓn cÇn thiÕt.
- §Æt liªn kÕt tõ ADODC tíi c¬ së d÷ liÖu: ®Æt ConnectString vµ
RecordSource.
- §Æt liªn kÕt DataGrid tíi ADODC: ®Æt thuéc tÝnh DataSourrce.
- §Æt thuéc tÝnh DataSource cña c¸c ®iÒu khiÓn TextBox, ComboBox
(nÕu cã) b»ng c¸ch chän tªn cña ADODC trªn form.
- §Æt thuéc tÝnh FieldName cña c¸c ®iÒu khiÓn TextBox, ComboBox
(nÕu cã) b»ng c¸ch chän tªn trêng t¬ng øng víi nã (khi ®ã sÏ xuÊt hiÖn).
Nh vËy, mét form cËp nhËt ®· hoµn tÊt. CÇn chó ý tíi c¸c thuéc tÝnh
Allow Update, Allow Delete, Allow Add New.. cña ®iÒu khiÓn DataGrid ph¶i
®îc chän.
Tuy nhiªn form cËp nhËt nµy cã nh÷ng h¹n chÕ rÊt lín lµ mäi viÖc kiÓm
so¸t trong qu¸ tr×nh cËp nhËt ®Òu do ADODC thùc hiÖn. Nh vËy, cha triÖt
®Ó trong khi x©y dùng c¸c øng dông (ch¼ng h¹n c¸c th«ng b¸o lçi b»ng tiÕng
anh khi ngêi dïng nhËp sai d÷ liÖu …)

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 11 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
§Ó cã thÓ t¹o ra c¸c form linh ho¹t h¬n, h·y xem phÇn sau: lËp tr×nh cËp
nhËt dïng ADODC.
5. LËp tr×nh cËp nhËt dïng ADODC
Ta dïng c¸c thuéc tÝnh vµ ph¬ng thøc cña ADODC vµ DataGrid ®Ó lËp
tr×nh t¹o ra c¸c form cËp nhËt rÊt linh ho¹t. Danh s¸ch c¸c thuéc tÝnh, ph¬ng
thøc thêng dïng ®îc cho trong b¶ng sau:
Me.ADODC1. Recordset. RecordCount Cho biÕt tæng sè b¶n ghi cã trong b¶ng
Me.ADODC1. Recordset. AbsulatePosition Cho biÕt sè thø tù cña b¶n ghi hiÖn hµnh
Me.ADODC1. Recordset. EOF B»ng True nÕu truy cËp tíi b¶n ghi cuèi
cïng trong tÖp vµ ngîc l¹i.
Me.ADODC1. Recordset. BOF B»ng True nÕu truy cËp tíi b¶n ghi ®Çu
tiªn trong tÖp vµ ngîc l¹i.
Me. ADODC1. Recordset. Fields(“<Tªn trêng>”) Truy cËp tíi 1 trêng trong b¶ng
Me.ADODC1. Recordset. Add New Thªm mét b¶n ghi míi (b¶n ghi trèng)
Me.ADODC1. Recordset. Move <n> ChuyÓn ®Õn b¶n ghi thø n kÓ tõ b¶n ghi
hiÖn hµnh
Me.ADODC1. Recordset. MoveFirst ChuyÓn ®Õn b¶n ghi ®Çu tiªn
Me.ADODC1. Recordset. MoveLast ChuyÓn ®Õn b¶n ghi cuèi cïng
Me.ADODC1. Recordset. MoveNext ChuyÓn tíi b¶n ghi tiÕp theo
Me.ADODC1. Recordset. MovePrevious ChuyÓn tíi b¶n ghi tríc
Me.ADODC1. Recordset. Update CËp nhËt b¶n ghi míi vµo b¶ng d÷ liÖu
Me.ADODC1. Recordset.Requery Lµm t¬i b¶ng d÷ liÖu recordset
Me.ADODC1. Refresh Lµm t¬i l¹i d÷ liÖu trªn ADODC
Me.ADODC. Delete Xo¸ b¶n ghi hiÖn hµnh trªn ADODC

C¸c thao t¸c c¬ b¶n thêng dïng trong lËp tr×nh cËp nhËt ®îc tãm t¾t díi
®©y:
[1] . Thªm mét b¶n ghi míi (cha lu vµo b¶ng): me.ADODC1. Recordset.
AddNew
[2]. Lu d÷ liÖu vµo b¶ng (d÷ liÖu thªm míi hoÆc d÷ liÖu võa söa) :
me.ADODC1. Recordset. Update.
[3]. Xo¸ b¶n ghi hiÖn hµnh trªn líi: me.ADODC1. Recordset. Delete
VD 1: LËp tr×nh ®Ó t¹o form cËp nhËt vµo b¶ng NhanVien cña c¬ së d÷
liÖu NhanSu theo mÉu sau:

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 12 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows

H×nh 4: VÝ dô vÒ lËp tr×nh cËp nhËt ®¬n gi¶n


C¸c bíc chÝnh:
Bíc 1: §¶m b¶o ®· tån t¹i mét c¬ së d÷ liÖu DB1.mdb trong ®ã cã mét
b¶ng table1 nh ®· giíi thiÖu ë phÇn trªn.
Bíc 2: ThiÕt kÕ form, vÏ c¸c ®iÒu khiÓn vµ ®Æt c¸c rµng buéc cÇn
thiÕt cho ADODC, DataGrid, c¸c TextBox, c¸c ComboBox...c¸c ®iÒu khiÓn
®îc ®Æt tªn lÇn lît lµ: txtID, txtHoten, txtNgaySinh, txtLuong,
txtTongLuong…
Bíc 3: T¹o mét c¬ së d÷ liÖu DB1.mdb tõ MS. Access víi duy nhÊt mét
b¶ng Table1 gåm c¸c trêng: ID, Hoten, NgaySinh, Luong.
Bíc 4: LËp tr×nh, xem c¸c ®o¹n m· chÝnh díi ®©y:
‘ Hµm CoutSalary() tr¶ vÒ tæng l¬ng cña tÊt c¶ c¸c c¸n bé
Public Function CoutSalary()
Dim Total As Double
With Me.Adodc1.Recordset
.MoveFirst
Do While .EOF = False
Total = Total + .Fields("Luong")
.MoveNext
Loop
End With
CoutSalary = Total
End Function
‘M· lÖnh cho nót Thªm vµ Xo¸
Private Sub cmdThem_Click()
Me.Adodc1.Recordset.AddNew
End Sub

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 13 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows

Private Sub cmdXoa_Click()


Me.Adodc1.Recordset.Delete
Me.Adodc1.Recordset.Update
Me.txtTongluong.Text = CoutSalary
End Sub
‘TÝnh l¹i tæng l¬ng khi thay ®æi l¬ng
Private Sub txtLuong_LostFocus()
Me.txtTongluong.Text = CoutSalary
End Sub

NhËn xÐt:
- MÉu form cËp nhËt trªn rÊt ®¬n gi¶n do sö dông c¸c ph¬ng thøc cã s½n
cña ADODC.
- RÊt dÔ x¶y ra lçi khi cËp nhËt, c¸c th«ng b¸o lçi lµ cña ADODC.
- Cha ®¸p øng ®îc c¸c thao t¸c cËp nhËt trong thùc tÕ.
- Hµm CoutSalary() ph¶i viÕt rÊt dµi, ta cã thÓ thùc hiÖn c«ng viÖc nµy
chØ b¼ng 1 c©u SQL: Select Sum(Luong) from table1. Tuy nhiªn, víi ph-
¬ng ph¸p lËp tr×nh dïng ADODC th× viÖc cÇn ph¶i duyÖt tõ ®Çu ®Õn
cuèi b¶ng ®Ó tÝnh tæng l¬ng lµ cÇn thiÕt. §©y còng chÝnh lµ mét h¹n
chÕ cña ADODC.
§Ó kh¾c phôc nhîc ®iÓm trªn, chóng ta sÏ xem xÐt VD2 víi phÇn lËp
tr×nh nhiÒu h¬n.
VD2: LËp tr×nh form cËp nhËt gièng nh mÉu form cËp nhËt chuÈn ë
phÇn trªn, sö dông kü thuËt lËp tr×nh dïng ADODC.
C¸c chó ý:
[1]. Hµm SetStatus: ®Æt l¹i tr¹ng th¸i cho Form nh khi form míi hiÓn
thÞ. Ta cÇn gäi hµm nµy khi Form Load hoÆc khi Thªm míi, Söa ®· hoµn
tÊt…
[2]. Hµm Test: KiÓm tra xem d÷ liÖu nhËp vµo ®· phï hîp cha. Test =
True nÕu d÷ liÖu nhËp vµo ®· phï hîp vµ ngîc l¹i.
[3]. C¬ chÕ sinh gi¸ trÞ cña trêng kho¸ (trêng ID) mét c¸ch tù ®éng vµ
c¸c chó ý khi xo¸ b¶n ghi.
[4]. BiÕn Status : ®Ó ph©n biÖt chøc n¨ng Lu lµ lu cña chøc n¨ng Thªm
míi hay lu cña chøc n¨ng Söa (1 nót lÖnh 2 chøc n¨ng). Khi ngêi dïng chän
Thªm, Status sÏ ®îc ®Æt lµ True vµ khi ngêi dïng chän Söa th× Status ®îc ®Æt
lµ False.

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 14 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
Bíc 1: §¶m b¶o ®· tån t¹i mét c¬ së d÷ liÖu DB1.mdb trong ®ã cã mét
b¶ng table1 nh ®· giíi thiÖu ë phÇn trªn.
Bíc 2: Vµo m«i trêng Visual Basic thiÕt kÕ form cËp nhËt nh h×nh 3.
§Æt tªn cho c¸c Textbox vµ nót lÖnh lÇn lît lµ txtID, txtTen, txtNgaySinh,
txtLuong, cmdThem, cmdSua, cmdLuu, cmdHuy, cmdXoa.
Chó ý: §Æt thuéc tÝnh ConnectString vµ DataSource cho ADODC. §Æt
thuéc tÝnh DataSource cho DataGrid. Kh«ng rµng buéc c¸c textbox vµo
ADODC.
Bíc 3: LËp tr×nh. Xem ®o¹n m· sau:
Public Status As Boolean

Public Sub SetStatus()


'Dat noi dung ban ghi hien hanh len text box
If Me.Adodc1.Recordset.RecordCount > 0 Then
Me.txtID.Text = Me.Adodc1.Recordset.Fields("ID")
Me.txtTen.Text = Me.Adodc1.Recordset.Fields("HoTen")
Me.txtNgaySinh.Text = Me.Adodc1.Recordset.Fields("NgaySinh")
Me.txtLuong.Text = Me.Adodc1.Recordset.Fields("Luong")
End If
'Dat trang thai cho cac nut
Me.cmdThem.Enabled = True
Me.cmdSua.Enabled = True
Me.cmdLuu.Enabled = False
Me.cmdHuy.Enabled = False
Me.cmdXoa.Enabled = True
End Sub

Public Function Test() As Boolean


Test = True
If Trim(Me.txtTen.Text) = "" Then
Test = False
MsgBox "Tªn kh«ng ®îc trèng ! h·y xem lai ", vbOKOnly +
vbExclamation, "Th«ng b¸o"
Me.txtTen.SetFocus
Else
If IsDate(Me.txtNgaySinh.Text) = False Then
Test = False
MsgBox "KiÓu ngµy sinh kh«ng ®óng. H·y xem l¹i !", vbOKOnly +
vbExclamation, "TH«ng b¸o"
Me.txtNgaySinh.SetFocus
Else
If IsNumeric(Me.txtLuong) = False Then
Test = False
MsgBox "KiÓu L¬ng kh«ng ®óng. H·y xem l¹i !", vbOKOnly +
vbExclamation, "TH«ng b¸o"
Me.txtLuong.SetFocus
End If

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 15 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
End If
End If
End Function

Private Sub Form_Load()


‘Dat ConnectString cho ADODC – Duong dan dong
Me.Adodc1.ConnectionString = "Provider= Microsoft. Jet.
OLEDB. 4.0; Data Source=" & App.Path & "\db1.mdb;Persist
Security Info=False"
Me.Adodc1.RecordSource = "select * from table1"
Me.Adodc1.Refresh
SetStatus
End Sub

Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal


LastCol As Integer)
On Error GoTo Er
SetStatus
Exit Sub
Er:
End Sub

Private Sub cmdThem_Click()


'dat trang thai cac nut
Me.cmdThem.Enabled = False
Me.cmdSua.Enabled = False
Me.cmdLuu.Enabled = True
Me.cmdHuy.Enabled = True
Me.cmdXoa.Enabled = False
Status = True
'Ma cua ban ghi moi se duoc tinh tu dong
Me.txtID.Text = Me.Adodc1.Recordset.RecordCount + 1
‘Xoa noi dung cac text box
Me.txtTen.Text = ""
Me.txtNgaySinh.Text = ""
Me.txtLuong.Text = ""
Me.txtTen.SetFocus
End Sub

Private Sub cmdSua_Click()


'dat trang thai cac nut
Me.cmdThem.Enabled = False
Me.cmdSua.Enabled = False
Me.cmdLuu.Enabled = True
Me.cmdHuy.Enabled = True
Me.cmdXoa.Enabled = False
Status = False
Me.txtTen.SetFocus
End Sub

Private Sub cmdHuy_Click()

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 16 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
SetStatus
End Sub

Private Sub cmdLuu_Click()


If Test Then
With Me.Adodc1.Recordset
If Status Then
'neu luu cua them moi
.AddNew
.Fields("ID") = Me.txtID.Text
.Fields("Hoten") = Me.txtTen.Text
.Fields("Ngaysinh") = CDate(Trim(Me.txtNgaySinh.Text))
.Fields("Luong") = Val(Trim(Me.txtLuong.Text))
.Update
Else
' neu luu cua sua
.Fields("Hoten") = Me.txtTen.Text
.Fields("Ngaysinh") = CDate(Trim(Me.txtNgaySinh.Text))
.Fields("Luong") = Val(Trim(Me.txtLuong.Text))
.Update
End If
End With
SetStatus
End If
End Sub

Private Sub cmdXoa_Click()


Dim Result As Byte
Dim Position As Long
Result = MsgBox("Cã thùc sù muèn xo¸ b¶n ghi " &
Me.Adodc1.Recordset.Fields("Hoten") & " kh«ng ? ",
vbYesNo, "Th«ng b¸o")
If Result = vbYes Then
With Me.Adodc1.Recordset
If .EOF And .BOF Then
Else
‘Luu lai vi tri cua ban ghi se xoa
Position = Me.Adodc1.Recordset.AbsolutePosition
‘ Xoa ban ghi
.Delete
.Update
.Requery
'§Èy ID cña c¸c b¶n ghi sau dån lªn
.MoveFirst
Do While .EOF = False
If .Fields("ID") > Position Then
.Fields("ID") = .Fields("ID") - 1
.Update
End If
.MoveNext
Loop
End If

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 17 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
End With
End If
End Sub

Private Sub cmdThoat_Click()


Unload Me
End Sub

NhËn xÐt:
- Ph¬ng ph¸p lËp tr×nh dïng ADODC t¬ng ®èi ®¬n gi¶n vµ ®¸p øng ®îc
c¸c ®ßi hái cña lËp tr×nh cËp nhËt.
- Mét sè h¹n chÕ vÉn cha kh¾c phôc ®îc, ®ã lµ: mäi thao t¸c trªn b¶ng
quan hÖ lu«n phô thuéc vµo ®iÒu khiÓn ADODC. Trong nhiÒu trêng hîp, c¸c
thao t¸c trªn quan hÖ lµ Èn (theo nghÜa lµ kh«ng cho ngêi sö dông biÕt) khi
®ã, viÖc lu«n ph¶i vÏ ADODC trªn form lµ bÊt tiÖn. (VD nh form ®¨ng nhËp).
- NÕu muèn tÝnh tæng l¬ng th× sao? viÖc duyÖt tõ ®Çu tíi cuèi b¶ng
quan hÖ ®Ó tÝnh tæng l¬ng vÉn rÊt cÇn thiÕt.
- §Ó kh¾c phôc trÖt ®Ó nh÷ng nhîc ®iÓm trªn, ta h·y xem xÐt kü thuËt
lËp tr×nh dïng ADODB ë phÇn sau.

III. LËp tr×nh c¬ së d÷ liÖu dïng ADODB


1. C¸c biÕn cÇn thiÕt
§Ó lËp tr×nh ®îc linh ho¹t h¬n, ngêi ta thêng sö dông kü thuËt lËp tr×nh
dïng ADODB. ADODB lµ mét ®èi tîng ActiveX ®îc cung cÊp s½n trong m«i
trêng lËp tr×nh Visual Basic. Muèn sö dông nã, ta chän: Project\ Refrences\
Microsoft ADO library…
Trªn giao diÖn, ta vÉn cã thÓ dïng ADODC vµ DataGrid ®Ó liªn kÕt vµ
hiÓn thÞ d÷ liÖu (nÕu cÇn). Tuy nhiªn, c¸c thao t¸c cËp nhËt nãi riªng vµ c¸c
thao t¸c víi c¬ së d÷ liÖu ta sÏ sö dông c¸c biÕn cña ADODB. C¸c biÕn nµy sÏ
lµm viÖc trùc tiÕp trong c¬ së d÷ liÖu mµ kÕt qu¶ cña nã chØ ®îc hiÓn thÞ
trªn giao diÖn khi ®· hoµn tÊt mét qu¸ tr×nh nµo ®ã.
§Ó thùc hiÖn ®îc nh vËy, ta hay dïng 2 biÕn toµn côc sau:
- BiÕn ®Ó kÕt nèi tíi CSDL: Thêng ®îc ®Æt tªn lµ DB vµ cã kiÓu
ADODB. Connection.
- BiÕn ®Ó më b¶ng d÷ liÖu: Thêng ®îc ®Æt tªn lµ Rs vµ cã kiÓu lµ
ADODB. Recordset.
V× lµ biÕn toµn côc nªn chóng ®îc khai b¸o trong module. Khi ®ã, trong
mét module nµo ®ã cña ch¬ng tr×nh, ta khai b¸o:
Public DB as New ADODB.Connection
Public Rs as New ADODB.Recordset
Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 18 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
Chó ý: nÕu trong Project cha cã module, h·y chän Project\ Add Module
a. Dïng DB ®Ó më c¬ së d÷ liÖu
Ta dïng hai biÕn nµy ®Ó më c¬ së d÷ liÖu vµ b¶ng d÷ liÖu cÇn thao t¸c.
Th«ng thêng ta më c¬ së d÷ liÖu ngay trong sù kiÖn Form_Load cña form ®Çu
tiªn b»ng c¸ch sö dông biÕn DB. BiÕn nµy sÏ kÕt nèi tíi c¬ së d÷ liÖu cÇn lµm
viÖc th«ng qua chuçi kÕt nèi ConnectString:
DB. Open <Connect String>
Chuçi kÕt nèi Connect String ®îc lÊy tõ thuéc tÝnh ConnectString cña
®èi tîng ADODC (®Æt ConnectString cho ADODC vµ sao chÐp chuçi ®ã vµo
®©y). cÇn chó ý tíi kh¶ n¨ng ®Æt ®êng dÉn ®éng trong chuçi kÕt nèi b»ng
c¸ch sö dông biÕn App.Path.
Th«ng thêng, mét ch¬ng tr×nh øng dông c¬ së d÷ liÖu chØ lµm viÖc trªn
mét c¬ së d÷ liÖu duy nhÊt. Khi ®ã, ta cã thÓ ®Æt dßng lÖnh më c¬ së d÷
liÖu nµy t¹i sù kiÖn Form_Load cña form ®Çu tiªn sÏ xuÊt hiÖn khi ch¬ng
tr×nh thùc thi. BiÕn DB sÏ cung cÊp mét kÕt nèi tíi c¬ së d÷ liÖu trong suèt qu¸
tr×nh ch¬ng tr×nh thùc thi mµ kh«ng cÇn më l¹i c¬ së d÷ liÖu mét lÇn n÷a.
b. Dïng Rs ®Ó lµm viÖc víi mét b¶ng hay query bÊt kú.
Sau khi ®· liªn kÕt ®îc tíi c¬ së d÷ liÖu qua biÕn DB, ta sö dông biÕn
Rs ®Ó më b¶ng quan hÖ cÇn thao t¸c. Có ph¸p:
Rs. Open < “Tªn b¶ng/ C©u SQL” > , DB, <Tham sè 1>, <Tham sè 2>
Trong ®ã:
- <“Tªn b¶ng/ C©u SQL”> cã thÓ lµ mét tªn b¶ng quan hÖ mµ ta muèn
thao t¸c hoÆc mét query t¬ng øng víi mét c©u hái SQL.
- DB lµ tªn biÕn kÕt nèi tíi CSDL mµ ta ®· khai b¸o ë trªn.
- C¸c <Tham sè 1>, <Tham sè 2> lµ c¸c tham sè tuú chän. Th«ng thêng
ta chän adOpenKeyset vµ adLockPessimistic
VD: ta cã thÓ më b¶ng Table1 trong c¬ së d÷ liÖu ®ang ®îc kÕt nèi bëi
biÕn DB b»ng c¸ch viÕt
Rs.Open “Select * from Table1”, DB, adOpenKeyset, adLockPessimistic
Khi ®ã, biÕn Rs chøa toµn bé d÷ liÖu cña b¶ng Table1 vµ ta cã thÓ dïng
biÕn nµy ®Ó cËp nhËt hoÆc thùc hiÖn c¸c thao t¸c trªn b¶ng Table1.
2. C¸c thuéc tÝnh, ph¬ng thøc cña biÕn Rs

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 19 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
§Ó sö dông biÕn Rs trong viÖc lËp tr×nh c¸c thao t¸c trªn c¬ së d÷ liÖu,
ta cÇn biÕt c¸c thuéc tÝnh vµ ph¬ng thøc cña ®èi tîng Rs. C¸c thµnh phÇn nµy
®îc liÖt kª trong b¶ng díi ®©y:

Stt Thuéc tÝnh, ph¬ng thøc ý nghÜa


1. RS. RecordCount Tæng sè b¶n ghi cã trong b¶ng mµ Rs ®ang më
2. RS. AbsulatePosition VÞ trÝ cña con trá trong b¶ng mµ Rs ®ang më
B»ng True nÕu Rs ®ang truy cËp tíi b¶n ghi n»m ë cuèi b¶ng
3. RS.EOF
vµ b»ng False nÕu ngîc l¹i
B»ng True nÕu Rs ®ang truy cËp b¶n ghi ®Çu tiªn cña b¶ng.
4. RS. BOF
B»ng False nÕu ngîc l¹i
5. RS. Fields(“<Tªn trêng”) Truy cËp tíi d÷ liÖu cña mét trêng trong b¶ng quan hÖ
6. RS.MoveFirst §a con trá vÒ b¶n ghi ®Çu tiªn trong b¶ng mµ Rs trá tíi
7. RS.MoveLast §a con trá vÒ b¶n ghi cuèi cïng trong b¶ng mµ Rs trá tíi.
8. RS.MoveNext §a con trá vÒ b¶n ghi tiÕp theo trong b¶ng mµ Rs trá tíi.
9. RS.MovePrevious §a con trá vÒ b¶n ghi tríc trong b¶ng mµ Rs trá tíi
10. RS. Move <n> §a con trá vÒ b¶n ghi thø n kÓ tõ vÞ trÝ hiÖn hµnh
11. RS. Add New Thªm mét b¶n ghi míi vµo cuèi b¶ng mµ Rs ®ang më.
12. RS. Update CËp nhËt l¹i b¶ng mµ Rs ®ang më
13. RS. Delete Xo¸ b¶n ghi hiÖn hµnh trong b¶ng mµ Rs ®ang më
14. RS.Close §ãng b¶ng quan hÖ mµ Rs ®ang më

3. C¸c thao t¸c trªn b¶ng quan hÖ


[1]. DuyÖt tõ ®Çu tíi cuèi b¶ng:
Ta sö dông ®o¹n tr×nh mÉu sau:
RS. Open …
If RS.EOF And RS.BOF then ‘Neu bang du lieu rong
Else
RS. MoveFirst
Do While RS.EOF = False
‘ Truy cËp tíi b¶n ghi…
RS. MoveNext
Loop
End if
RS.Close

[2]. Thªm mét b¶n ghi míi


Ta sö dông ®o¹n tr×nh sau:
RS. Open …
RS. Add New
RS. Fields(“Tªn trêng 1”) = <Gi¸ trÞ t¬ng øng>
RS. Fields(“Tªn trêng 2”) = <Gi¸ trÞ t¬ng øng>

RS. Update

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 20 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
RS. Close
‘ NÕu trªn form cã sö dông ADODC vµ DataGrid th× cÇn lµm t¬I l¹i:
RS. Recordset. Requery
RS. Refresh

[3]. Söa b¶n ghi hiÖn hµnh trªn Data Grid


RS. Open “Select * from <Tªn b¶ng> where <§K söa>”, db, 3, 3
RS. Fields(“Tªn trêng 1”) = <Gi¸ trÞ míi t¬ng øng>
RS. Fields(“Tªn trêng 2”) = <Gi¸ trÞ míi t¬ng øng>

RS. Update
RS. Close
‘ NÕu trªn form cã sö dông ADODC vµ DataGrid th× cÇn lµm t¬I l¹i:
RS. Recordset. Requery
RS. Refresh
<§K söa> ë ®©y lµ: M· cña b¶n ghi cÇn söa trïng víi m· cña b¶n ghi hiÖn hµnh trªn
ADODC. VD víi b¶ng d÷ liÖu trªn, ta viÕt:
“Select * from Table1 where ID = ‘ “ & me.ADODC.Recordset. Fields(“ID”) & “ ‘ “
Khi ®ã, ta sÏ select ®îc duy nhÊt 1 b¶n ghi cã m· nh vËy, chÝnh lµ b¶n ghi cÇn söa.
[4]. Xo¸ b¶n ghi hiÖn hµnh trªn Data Grid
Ta dïng ®o¹n tr×nh sau:
RS. Open Select * from <Tªn b¶ng> where <§K xo¸>”, db, 3, 3
RS. Delete
RS.Update
RS.Close
‘ Lµm t¬i trªn form
RS. Recordset. Requery
RS. Refresh
§Ó xo¸ b¶n ghi hiÖn hµnh trªn ADODC th× <§K xo¸ > sÏ lµ: M· cña b¶n ghi cÇn xo¸
trïng víi m· cña b¶n ghi hiÖn hµnh trªn ADODC. VD víi b¶ng d÷ liÖu trªn, ta viÕt:
“Select * from Table1 where ID = ‘ “ & me.ADODC.Recordset. Fields(“ID”) & “ ‘ “
Chó ý: CÇn kiÓm so¸t qu¸ tr×nh xo¸: kh«ng cho xo¸ nÕu nh tÖp kh«ng
cßn b¶n ghi nµo; lu«n hái ngêi dïng tríc khi xo¸.
VD: H·y lËp tr×nh t¹o form cËp nhËt chuÈn theo mÉu ë phÇn trªn, sö
dông kü thuËt ADODB (thao t¸c trªn b¶ng Table1 cña c¬ së d÷ liÖu DB1.mdb ë
trªn)
C¸c chó ý:
[1]. Hµm SetStatus: ®Æt l¹i tr¹ng th¸i cho Form nh khi míi Load lªn. Ta
cÇn gäi hµm nµy khi Form Load, Thªm míi, hoÆc söa…
[2]. Hµm Test: KiÓm tra xem d÷ liÖu nhËp vµo ®· ®óng kiÓu cha. Test
= true nÕu d÷ liÖu nhËp vµo ®· ®óng kiÓu vµ ngîc l¹i.

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 21 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
[3]. C¬ chÕ sinh gi¸ trÞ cña trêng kho¸ (trêng ID) mét c¸ch tù ®éng vµ c¸c
chó ý khi xo¸ b¶n ghi
Tríc khi xem ®o¹n m· díi ®©y, cÇn ®¶m b¶o c¸c biÕn toµn côc DB, Rs
®· ®îc khai b¸o trong mét module nµo ®ã cña ch¬ng tr×nh. Trong vÝ dô nµy,
ta sö dông kü thuËt lËp tr×nh dïng ADODB. Tuy nhiªn, mét sè thao t¸c cã kÕt
hîp c¶ ADODC ®Ó rót ng¾n viÖc viÕt m· ch¬ng tr×nh.
C¸c ®iÒu khiÓn trªn form ®îc thiÕt kÕ vµ ®Æt tªn lÇn lît lµ: txtID,
txtHoten, txtNgaySinh, txtLuong, cmdThem, cmdSua, cmdXoa, cmdLuu,
cmdHuy, DataGrid1, ADODC1…
Sau ®©y lµ mét sè ®o¹n m· chÝnh; (Xem trong b¶n Demo nÕu cÇn.)
Public Sub Setstatus()
Me.cmdThem.Enabled = True
Me.cmdSua.Enabled = True
Me.cmdXoa.Enabled = True
Me.cmdLuu.Enabled = False
Me.cmdHuy.Enabled = False
If Me.ADODC.Recordset. RecordCount > 0 Then
Me.txtHT.Text = Me.Adodc1.Recordset.Fields("Hoten")
Me.txtNS.Text = Me.Adodc1.Recordset.Fields("Ngaysinh")
Me.txtLuong.Text = Me.Adodc1.Recordset.Fields("Luong")
Me.Adodc1.Caption = Me.Adodc1.Recordset.AbsolutePosition
& "/" & Me.Adodc1.Recordset.RecordCount
Me.txtID.Text = Me.Adodc1.Recordset.Fields("ID")
End If
End Sub
Public Function Test() As Boolean
Test = True
If Trim(frmUpdate.txtHT.Text) = "" Then
Test = False
MsgBox "Tªn kh«ng ®îc trèng! h·y xem lai", vbOKOnly + vbExclamation, "Th«ng b¸o"
frmUpdate.txtHT.SetFocus
Else
If IsDate(frmUpdate.txtNS.Text) = False Then
Test = False
MsgBox "KiÓu ngµy sinh kh«ng ®óng. H·y xem l¹i !", vbOKOnly +
vbExclamation, "Th«ng b¸o"
frmUpdate.txtNS.SetFocus
Else
If IsNumeric(frmUpdate.txtLuong) = False Then
Test = False
MsgBox "KiÓu L¬ng kh«ng ®óng. H·y xem l¹i !", vbOKOnly +
vbExclamation, "Th«ng b¸o"
frmUpdate.txtNS.SetFocus
End If

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 22 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
End If
End If
End Function
Private Sub cmdThem_Click()
Me.txtHT.Text = ""
Me.txtNS.Text = ""
Me.txtLuong.Text = ""
Status = True
Me.cmdThem.Enabled = False
Me.cmdSua.Enabled = False
Me.cmdXoa.Enabled = False
Me.cmdLuu.Enabled = True
Me.cmdHuy.Enabled = True
Me.txtID.Text = Me.Adodc1.Recordset.RecordCount + 1
Me.txtHT.SetFocus
End Sub
Private Sub cmdSua_Click()
Status = False
Me.cmdThem.Enabled = False
Me.cmdSua.Enabled = False
Me.cmdXoa.Enabled = False
Me.cmdLuu.Enabled = True
Me.cmdHuy.Enabled = True
Me.txtHT.SetFocus
End Sub
Private Sub cmdXoa_Click()
Dim Result As Byte
Dim Position As Integer
Result = MsgBox("Cã thùc sù muèn xo¸ b¶n ghi " &
Me.Adodc1.Recordset.Fields("Hoten") & " kh«ng?", vbYesNo, "Th«ng b¸o")
If Result = vbYes Then ‘Neu dong y xoa thi:
‘Lay vi tri cua ban ghi can xoa
Position = Me.Adodc1.Recordset.AbsolutePosition
‘Mo Bang quan he nhung chi select ban ghi can xoa
RS.Open "Select * from table1 where ID = ‘” &
me.ADODC1. Recordset. Fields(“ID”) & “’", DB,
adOpenKeyset, adLockPessimistic
If RS.EOF And RS.BOF Then
Else ‘ Neu co ban ghi can xoa thi xoa
RS.Delete
RS.Update
End if
RS.Close
‘Xoa xong roi thi sua lai ID cho cac ban ghi co ID >
ID cuar ban ghi vua xoa
RS.Open "table1", DB, adOpenKeyset,
adLockPessimistic

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 23 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
Do While Not RS.EOF
If RS.AbsolutePosition >= Position Then
RS.Fields("ID") = RS.Fields("ID") - 1
RS.Update
End If
RS.MoveNext
Loop
End If
RS.Close
RS.Open "table1", DB, adOpenKeyset, adLockPessimistic
Me.Adodc1.Recordset.Requery
Me.Adodc1.Refresh
RS.Close
End If
End Sub
Private Sub cmdLuu_Click()
If Test Then
If Status Then
'neu ghi cua them moi
RS.Open "table1", DB, adOpenKeyset, adLockPessimistic
RS.AddNew
RS.Fields("ID") = RS.RecordCount + 1
RS.Fields("Hoten") = Trim(Me.txtHT.Text)
RS.Fields("Ngaysinh") = CDate(Trim(Me.txtNS.Text))
RS.Fields("Luong") = Val(Trim(Me.txtLuong.Text))
RS.Update
RS.Close
‘Lam tuoi lai tren form
RS.Open "table1", DB, adOpenKeyset, adLockPessimistic
Me.Adodc1.Recordset.Requery
Me.Adodc1.Refresh
RS.Close

Else
'neu ghi cua sua, mo quan he- chi chon ban ghi can sua
RS.Open "Select * from table1 where ID = ‘” & Me.ADODC1.
Recordset. Fields(“ID”) & “’”, DB, adOpenKeyset,
adLockPessimistic
RS.Fields("Hoten") = Trim(Me.txtHT.Text)
RS.Fields("Ngaysinh") = CDate(Trim(Me.txtNS.Text))
RS.Fields("Luong") = Val(Trim(Me.txtLuong.Text))
RS.Update
RS.Close
‘ Lam tuoi lai tren form
RS.Open "table1", DB, adOpenKeyset, adLockPessimistic
Me.Adodc1.Recordset.Requery
Me.Adodc1.Refresh

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 24 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
RS.Close
End If
Setstatus
End If
End Sub
Private Sub cmdHuy_Click()
Setstatus
End Sub
Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal
LastCol As Integer)
Setstatus
End Sub

Chó ý: Kü thuËt lËp tr×nh dïng ADODB cã nh÷ng u ®iÓm h¬n so víi kü
thuËt dïng ADODC. Tuy nhiªn, trong mét sè trêng hîp nhÊt ®Þnh, ta vÉn sö
dông kü thuËt ADODC kÕt hîp víi kü thuËt ADODB ®Ó rót ng¾n c¸c ®o¹n m·
ch¬ng tr×nh.
Hai kü thuËt nµy lµ t¬ng ®¬ng nhau vÒ mÆt sö dông. §iÓm kh¸c nhau
lµ ë chç :
- NÕu dïng ADODB th× ta ph¶i dïng biÕn DB ®Ó kÕt nèi tíi c¬ së d÷
liÖu, biÕn Rs ®Ó kÕt nèi tíi b¶ng d÷ liÖu lµm viÖc. KÕt thóc qu¸ tr×nh lµm
viÖc cÇn ph¶i ®ãng c¸c b¶ng d÷ liÖu ®ang lµm viÖc. Cßn nÕu dïng ADODC
th× chØ cÇn kÕt nèi tíi c¬ së d÷ liÖu th«ng qua ADODC.
- NÕu dïng ADODC th× kÕt qu¶ cña viÖc thay ®æi d÷ liÖu sÏ hiÓn thÞ
lËp tøc trªn form, ngîc l¹i, dïng ADODB sÏ can thiÖp trùc tiÕp vµo c¬ së d÷
liÖu nhng kÕt qu¶ kh«ng hiÓn thÞ ngay lËp tøc trªn form (tøc trªn ADODC vµ
DataGrid) mµ ta cÇn ph¶i lµm t¬i l¹i d÷ liÖu.
Ta so s¸nh c¸c thuéc tÝnh vµ ph¬ng thøc cña chóng trong b¶ng sau

Me.ADODC1. Recordset. RecordCount  Rs. RecordCount


Me.ADODC1. Recordset. AbsulatePosition  Rs. AbsulatePosition
Me.ADODC1. Recordset. EOF  Rs. EOF
Me.ADODC1. Recordset. BOF  Rs. BOF
Me.ADODC1. Recordset. Add New  Rs. Add New
Me.ADODC1. Recordset. Move <n>  Rs. Move <n>
Me.ADODC1. Recordset. MoveFirst  Rs. MoveFirst
Me.ADODC1. Recordset. MoveLast  Rs. MoveLast
Me.ADODC1. Recordset. MoveNext  Rs. MoveNext
Me.ADODC1. Recordset. MovePrevious  Rs. MovePrevious
Me.ADODC1. Recordset. Update  Rs. Update

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 25 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
IV. LËp tr×nh t×m kiÕm
1. Bµi to¸n t×m kiÕm
Bµi to¸n t×m kiÕm ®îc h×nh dung nh sau:

B¶ng d÷ liÖu C¸c kü B¶ng kÕt qu¶


thuËt t×m
Tiªu chÝ t×m
kiÕm kiÕm

H×nh 6. Bµi to¸n t×m kiÕm


Khi gi¶i quyÕt bµi to¸n t×m kiÕm, chóng ta cã mét tËp c¸c b¶ng d÷ liÖu
®Çu vµo vµ mét tËp c¸c tiªu chÝ t×m kiÕm hay ®iÒu kiÖn t×m kiÕm. ChØ
c¸c b¶n ghi tho¶ m·n tËp c¸c ®iÒu kiÖn t×m kiÕm nµy míi trë thµnh kÕt qu¶
t×m kiÕm.
Mét form t×m kiÕm thêng cã c¸c ®iÒu khiÓn sau:
- C¸c ®iÒu khiÓn ®Ó ngêi dïng nhËp tiªu chÝ t×m kiÕm vµo bao gåm:
+ ComboBox: ®Ó lùa chän gi¸ trÞ cÇn t×m kiÕm.
+ TextBox: §Ó nhËp gi¸ trÞ cÇn t×m kiÕm.
+ Option: §Ó chän mét trong c¸c tiªu chÝ t×m kiÕm.
+ CheckBox: ®Ó chän nhiÒu tiªu chÝ t×m kiÕm.
- C¸c ®iÒu khiÓn tr×nh bµy kÕt qu¶ t×m kiÕm.
+ Líi Data Grid vµ ADODC hoÆc dïng mét ListView ®Ó tr×nh bµy kÕt
qu¶ t×m kiÕm.
Ta t¹m ph©n lo¹i bµi to¸n t×m kiÕm nh sau:
- T×m kiÕm ®¬n tiªu chÝ: sö dông c¸c ®iÒu khiÓn ®Ó ngêi dïng nhËp
mét gi¸ trÞ t×m kiÕm vµo. ChØ cho phÐp t×m kiÕm theo mét tiªu chÝ ®Þnh
tríc, vÝ dô nh t×m kiÕm theo hä tªn, hoÆc theo ngµy sinh, hoÆc theo l¬ng…
- T×m kiÕm ®a tiªu chÝ: Sö dông nhiÒu ®iÒu khiÓn ®Ó ngêi dïng
nhËp nhiÒu tiªu chÝ t×m kiÕm trong mét lÇn t×m kiÕm. D÷ liÖu t×m ®îc ph¶i
tho¶ m·n ®ång thêi nhiÒu tiªu chÝ, c¸c tiªu chÝ cã thÓ kÕt hîp víi nhau theo
to¸n tö AND hoÆc OR.
- T×m kiÕm ®éng - ®¬n tiªu chÝ: Sö dông c¸c Option ®Ó ngêi dïng cã
thÓ lùa chän mét trong sè rÊt nhiÒu tiªu chÝ cã thÓ. T×m kiÕm theo tiªu chÝ
nµo lµ do ngêi dïng lùa chän.
Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 26 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
- T×m kiÕm ®éng - ®a tiªu chÝ : Sö dông c¸c CheckBox ®Ó ngêi dïng
chän vµ nhËp nhiÒu tiªu chÝ t×m kiÕm mét lóc. Lùa chän t×m kiÕm theo tiªu
chÝ nµo lµ tuú ë ngêi dïng. C¸c tiªu chÝ ®îc lùa chän sÏ kÕt hîp víi nhau theo
to¸n tö AND hoÆc OR.
2. Ph¬ng ph¸p chung ®Ó lËp tr×nh tr×nh kiÕm
Cã nhiÒu ph¬ng ph¸p t×m kiÕm nhng nãi chung, ta hay sö dông ph¬ng
ph¸p sau:
B1: T¹o mét c©u SQL sao cho kÕt qu¶ cña c©u SQL lµ kÕt qu¶ mong
®îi (cÇn t×m kiÕm). C©u SQL ®îc t¹o ra theo nh÷ng tiªu chÝ mµ ngêi dïng ®·
nhËp vµo.
B2: G¸n c©u SQL ®ã cho thuéc tÝnh Me.ADODC1. RecordSource vµ
lµm t¬i l¹i ®Ó kÕt qu¶ hiÖn lªn trªn form.
Nh vËy, vÊn ®Ò cßn l¹i lµ lµm sao ®Ó x©y dùng ®îc c©u hái SQl theo
nh÷ng tiªu chÝ mµ ngêi dïng ®· nhËp vµo.
Th«ng thêng víi mçi form t×m kiÕm ta hay t¹o mét hµm Search() ®Ó
lµm nhiÖm vô t×m kiÕm. Hµm nµy cã hai phÇn (t¬ng øng víi B1 vµ B2) lµ:
PhÇn 1: Ph¸t sinh mét c©u SQL theo c¸c tiªu chÝ ngêi dïng nhËp vµo.
PhÇn 2: G¸n c©u SQL võa ph¸t sinh cho Me.ADODC1. RecordSource vµ
lµm t¬i l¹i.
Hµm nµy ®îc gäi tíi khi form Load vµ mçi khi ngêi dïng nhËp c¸c gi¸ trÞ
t×m kiÕm kh¸c nhau.
3. C¸c vÝ dô t×m kiÕm
Trong c¸c vÝ dô díi ®©y, ta ¸p dông t×m kiÕm trªn c¬ së d÷ liÖu DB1.mdb,
trong ®ã cã mét b¶ng Table1 gåm c¸c trêng ID, Hoten, NgaySinh, Luong nh ®·
giíi thiÖu ë phÇn trªn.

[1]. T×m kiÕm ®¬n tiªu chÝ dïng ComboBox

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 27 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows

H×nh 2: MÉu form t×m kiÕm ®¬n tiªu ch


H×nh 6: MÉu form t×m kiÕm ®¬n tiªu chÝÝ
B1: ThiÕt kÕ form:
- VÏ c¸c ®èi tîng lªn form (chó ý lµ ë ®ay ta dïng ADODC vµ Data Grid.
Do cã Ýt ®èi tîng trªn form nªn ta sö dông c¸c tªn mµ Visual Basic tù ®Æt
cho chóng (Combo1, DataGrid1, ADODC1…)
- §Æt Connect String vµ Record Source cho ADODC1. Chó ý khi ®Æt
Record Source: §Æt commandType lµ adCmdUnknow hoÆc adCmdText
vµ nhËp c©u hái SQL bÊt kú VD: Select * from table1.
- Rµng buéc DataGrid víi ADODC1 b»ng c¸ch ®Æt thuéc tÝnh Data
Source cña DataGrid b»ng ADODC1.
B2: LËp tr×nh:
Public Sub Search()
Dim SQL As String
SQL = "Select * from table1 where Hoten Like '%" &
Trim(Me.Combo1.Text) & "%'"
Me.Adodc1.RecordSource = SQL
Me.Adodc1.Recordset.Requery
Me.Adodc1.Refresh
End Sub

Private Sub Combo1_Click()


Search
End Sub

Private Sub Form_Load()


DB.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &
App.Path & "\db1.mdb;Persist Security Info=False"
‘Mo bang d÷ liÖu va load Ho ten len Combo
Rs.Open "table1", DB, adOpenKeyset, adLockPessimistic

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 28 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
If Rs.EOF And Rs.BOF Then
Else
Rs.MoveFirst
Do While Not Rs.EOF
Me.Combo1.AddItem Rs.Fields("Hoten")
Rs.MoveNext
Loop
End If
Rs.Close
DB.Close
If Me.Combo1.ListCount > 0 Then Me.Combo1.ListIndex = 0
Search
End Sub

[2]. T×m kiÕm ®a tiªu chÝ dïng ComboBox

H×nh 7: T×m kiÕm ®a tiªu chÝ


Public Sub Search()
Dim Sql As String Sql = "Select * from table1 where
Month(Ngaysinh) = " & Val(Me.Combo1.Text) & " AND
Year(Ngaysinh) = " & Val(Me.Combo2.Text)
Me.Adodc1.RecordSource = Sql
Me.Adodc1.Recordset.Requery
Me.Adodc1.Refresh
End Sub
‘=========================
Private Sub Combo1_Click()
Search
End Sub

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 29 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
‘=========================
Private Sub Combo2_Click()
Search
End Sub
‘=========================
Private Sub Form_Load()
Dim i As Integer
For i = 1 To 12 Me.Combo1.AddItem i Next
For i = 1978 To 2010 Me.Combo2.AddItem i Next
Me.Combo1.ListIndex = 0
Me.Combo2.ListIndex = 0
Search
End Sub

[3]. T×m kiÕm ®éng ®¬n tiªu chÝ


C¸c tiªu chÝ ®îc ngêi dïng lùa chän tuú ý b»ng c¸ch chän c¸c Option. Tuy
nhiªn, chØ cã thÓ chän ®îc 1 tiªu chÝ t¹i mçi thêi ®iÓm.

H×nh 8: mÉu form t×m kiÕm ®éng ®¬n tiªu chÝ


C¸c ®èi tîng ®îc ®Æt tªn lÇn lît lµ: optHT, optNS, optL, Combo1,
Combo2, Combo3, Text1, Text2, Text3…
Sau ®©y lµ mÉu code:
Public Sub Search()
Dim SQL As String
SQL = "Select * from table1 where "
If Me.optHT.Value = True Then
If Trim(Me.Combo1.Text) = "Like" Then
SQL = SQL & " Hoten " & Me.Combo1.Text & "'%" & Me.Text1.Text & "%'"

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 30 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
Else
SQL = SQL & " Hoten " & Me.Combo1.Text & "'" & Me.Text1.Text & "'"
End If
End If

If Me.optNS.Value = True Then


SQL = SQL & " NgaySinh " & Me.Combo2.Text & "#" &
Format(CDate(Me.Text2.Text), "mm/dd/yyyy") & "#"
End If

If Me.OptL.Value = True Then


SQL = SQL & " Luong " & Me.Combo3.Text & Val(Me.Text3.Text)
End If
On Error GoTo Er
Me.Adodc1.RecordSource = SQL
Me.Adodc1.Recordset.Requery
Me.Adodc1.Refresh
Exit Sub
Er: ‘ thong bao loi dat o day
End Sub
‘=================================
Private Sub Combo1_Click()
Search
End Sub
‘=================================
Private Sub Combo2_Click()
Search
End Sub
‘=================================
Private Sub Combo3_Click()
Search
End Sub
‘=================================
Private Sub Form_Load()
Me.Combo1.ListIndex = 0
Me.Combo2.ListIndex = 0
Me.Combo3.ListIndex = 0
Search
End Sub
‘=================================
Private Sub optHT_Click()
Search
End Sub
‘================================
Private Sub OptL_Click()
Search
End Sub
‘================================
Private Sub optNS_Click()
Search
End Sub
‘================================

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 31 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
Private Sub Text1_Change()
Search
End Sub
‘================================
Private Sub Text2_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Search
End If
End Sub
‘================================
Private Sub Text3_Change()
Search
End Sub

[4]. T×m kiÕm ®éng ®a tiªu chÝ


- C¸c tiªu chÝ ®îc ngêi dïng chän tuú ý.
- Cã thÓ chän nhiÒu tiªu chÝ mét lóc. Th«ng tin t×m ®îc ph¶i tho¶ m·n
®ång thêi c¸c tiªu chÝ.

H×nh 9: MÉu form t×m kiÕm ®éng ®a tiªu chÝ


§Õn ®©y, ta ®· quen víi ph¬ng ph¸p t¹o form t×m kiÕm. §iÒu quan
träng cßn l¹i lµ t¹o cho ®îc hµm Search() ®Ó ®¸p øng yªu cÇu t×m kiÕm. Ta
h·y xem xÐt hµm Search() cho ph¬ng ph¸p t×m kiÕm ®éng ®a tiªu chÝ nµy.
(C¸c phÇn cßn l¹i, sinh viªn tù hoµn thiÖn)

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 32 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
‘================================

Public Sub Search()


'Xay dung cau SQL
SQL = "SELECT * FROM Table1 "
'Kiem tra xem nguoi dung co chon tieu chi nao khong (cau SQL co where khong)
If Me.chkHT.Value = 1 Or Me.chkNS.Value = 1 Or Me.chkT.Value = 1 Then
SQL = SQL & "WHERE "
End If
'kiem tra xem co tim kiem theo ho ten khong
If Me.chkHT.Value = 1 Then
If Trim(Me.cmbHT.Text) = "Like" Then
SQL = SQL & "Hoten " & Me.cmbHT.Text & " '%" & Trim(Me.txtHT.Text) & "%' "
Else
SQL = SQL & "Hoten " & Me.cmbHT.Text & " '" & Trim(Me.txtHT.Text) & "' "
End If
End If
'Kiem tra xem co tim kiem theo Ho ten ket hop voi Ngay sinh khong
'Neu HT ket hop voi ngay sinh thi....
If Me.chkHT = 1 And Me.chkNS.Value = 1 Then
If Trim(Me.cmbNS.Text) = "Between" Then
SQL = SQL & "AND Ngaysinh " & Me.cmbNS.Text & " #" &
Format(CDate(Trim(Me.txtNS1.Text)), "dd/mm/yyyy") & "# "
SQL = SQL & "AND #" & Format(CDate(Trim(Me.txtNS2.Text)), "dd/mm/yyyy") & "#
"
Else
SQL = SQL & "AND Ngaysinh " & Me.cmbNS.Text & " #" &
Format(CDate(Trim(Me.txtNS1.Text)), "dd/mm/yyyy") & "# "
End If
Else
'neu chi tim theo ngay sinh (HT khong ket hop voi NS thi...
If Me.chkNS.Value = 1 Then
If Trim(Me.cmbNS.Text) = "Between" Then
SQL = SQL & "Ngaysinh " & Me.cmbNS.Text & " #" &
Format(CDate(Trim(Me.txtNS1.Text)), "dd/mm/yyyy") & "# "

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 33 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
SQL = SQL & "AND #" & Format(CDate(Trim(Me.txtNS2.Text)), "dd/mm/yyyy") & "#
"
Else
SQL = SQL & "Ngaysinh " & Me.cmbNS.Text & " #" &
Format(CDate(Trim(Me.txtNS1.Text)), "dd/mm/yyyy") & "# "
End If
End If
End If
'Neu chi tim kiem theo Luong thi... khong them AND
If (Me.chkHT.Value = 0 And Me.chkNS.Value = 0) And Me.chkT.Value = 1 Then
SQL = SQL & "Luong " & Me.cmbT.Text & " " & Trim(Me.txtT1.Text) & " "
If Me.cmbT.Text = "Between" Then
SQL = SQL & " AND " & Trim(Me.txtT2.Text) & " "
End If
Else
'Truong hop Luong ket hop voi HT hoac/va NS thi them AND thoi.
If Me.chkT.Value = 1 Then
SQL = SQL & "AND Luong " & Me.cmbT.Text & " " & Me.txtT1.Text
If Me.cmbT.Text = "Between" Then
SQL = SQL & " AND " & Trim(Me.txtT2.Text) & " "
End If
Else
End If
End If
Me.txtSQL.Text = SQL
On Error GoTo Er
'Bat dau cho ket qua len luoi
Me.Adodc1.RecordSource = SQL
Me.Adodc1.Recordset.Requery
Me.Adodc1.Refresh
Exit Sub
'Thong bao Loi (neu co)
Er: MsgBox "SQL wrong or Find no record in the table ! Please try again !", vbOKOnly +
vbInformation, "Message"

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 34 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
Me.Adodc1.RecordSource = "select * from table1"
Me.Adodc1.Refresh
Me.chkHT.Value = 0
Me.chkNS.Value = 0
Me.chkT.Value = 0
Me.txtNS1.Text = 0
Me.txtNS2.Text = 0
End Sub
‘===============================
V. T¹o b¸o c¸o b»ng VB
1. Ph¬ng ph¸p chung
Nh×n chung, ph¬ng ph¸p t¹o b¸o c¸o còng t¬ng tù nh ph¬ng ph¸p lËp
tr×nh t×m kiÕm. §iÓm kh¸c c¬ b¶n lµ kÕt qu¶ t×m kiÕm ®îc tr×nh bµy trªn
mÉu b¸o c¸o ®Ó cã thÓ xem vµ in ra ®îc, thay v× hiÓn thÞ trªn c¸c líi nh trong
bµi to¸n t×m kiÕm.
Cã rÊt nhiÒu phÇn mÒm hç trî lµm b¸o c¸o, cã thÓ ®iÓm qua:
- T¹o b¸o c¸o b»ng Data Report cña Visual Basic
- T¹o b¸o c¸o b»ng MS. Access, sau ®ã gäi b¸o c¸o tõ form Visual Basic
- T¹o b¸o c¸o b»ng Crystal Report, sau ®ã gäi b¸o c¸o tõ Visual Basic
….
Mét b¸o c¸o ®éng lµ b¸o c¸o ®¶m b¶o c¸c ®iÒu kiÖn sau:
- C¸c tiªu ®Ò b¸o c¸o cã thÓ thay ®æi bëi ngêi dïng t¹i lóc xem – in b¸o
c¸o. Trªn thùc tÕ, mét phÇn mÒm cã thÓ ®îc chuyÓn giao cho nhiÒu kh¸ch
hµng kh¸c nhau, ®Ó thay ®æi phÇn tiªu ®Ò (ch¼ng h¹n Tªn c«ng ty) mµ kh«ng
ph¶i thiÕt kÕ l¹i b¸o c¸o th× tiªu ®Ò b¸o c¸o ph¶i ®éng.
- Néi dung d÷ liÖu trong b¸o c¸o thay ®æi tuú theo c¸c tiªu chÝ mµ ngêi
dïng muèn khi xem – in b¸o c¸o. Nh vËy, tríc khi xem – in b¸o c¸o, ngêi dïng cã
thÓ lùa chän c¸c tiªu chÝ ®Ó in b¸o c¸o. Ch¼ng h¹n chØ in ra th«ng tin cña
nh÷ng nh©n viªn cã L¬ng cao h¬n 500 thay v× in th«ng tin cña tÊt c¶ c¸c nh©n
viªn…
Sau ®©y, ta xem xÐt mét ph¬ng ph¸p t¹o b¸o c¸o trong Visual Basic mµ cã
thÓ ®¸p øng phÇn nµo c¸c yªu cÇu cña b¸o c¸o ®éng. Ph¬ng ph¸p sö dông
DataReport. B¶ng d÷ liÖu ®Ó b¸o c¸o còng lµ b¶ng table1 cña c¬ së d÷ liÖu
DB1.mdb ë trªn.

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 35 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
B1. Chän Project\ Add Data Report ®Ó thªm mét form b¸o c¸o vµo ®Ò
¸n.
B2. ThiÕt kÕ b¸o c¸o (gièng nh trong Access) trong ®ã bao gåm c¸c Tr-
êng d÷ liÖu muèn xuÊt hiÖn trªn b¸o c¸o. Khi ®ã, cÇn chó ý:
o Mçi trêng d÷ liÖu lµ mét TextBox, mçi tiªu ®Ò lµ mét Label
o Cha liªn kÕt b¸o c¸o tíi mét b¶ng cô thÓ nµo.
o Gâ tªn trêng tu¬ng øng vµo « Field Name cho tõng Text Box
B3. Gäi b¸o c¸o: Trªn form, ngêi dïng kÝch chän nót gäi Xem – In b¸o
c¸o, khi ®ã cÇn:
- X©y dùng c©u SQL sao cho kÕt qu¶ cña nã lµ kÕt qu¶ sÏ hiÖn trªn b¸o
c¸o. C©u hái SQL ®îc x©y dùng tõ nh÷ng tiªu chÝ do ngêi dïng nhËp
vµo. (t¬ng tù form t×m kiÕm ®éng).
- Dïng biÕn Rs ®Ó më b¶ng t¬ng øng víi c©u SQL võa t×m ®îc.
- G¸n RS cho thuéc tÝnh Me.DataReport1. DataSource.
- HiÓn thÞ form b¸o c¸o.
2. VÝ dô vÒ b¸o c¸o ®éng

H×nh 10: MÉu form gäi b¸o c¸o ®éng


C¸c bíc thùc hiÖn:
Bíc 1: ThiÕt kÕ mÉu b¸o c¸o nh sau:

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 36 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows

H×nh 11: MÉu b¸o c¸o thiÕt kÕ b»ng DataReport


C¸c thµnh phÇn trong Page Header lµ c¸c tiªu ®Ò (Label)
C¸c thµnh phÇn trong Detail lµ c¸c TextBox, t¬ng øng víi c¸c trêng d÷
liÖu muèn hiÓn thÞ trªn b¸o c¸o. Mçi TextBox ®Òu ®îc ®Æt thuéc tÝnh
FieldName b»ng tªn trêng t¬ng øng trong b¶ng d÷ liÖu Table1.
Khung b¸o c¸o ®îc vÏ bëi c¸c ®èi tîng Line
Bíc 2: t¹o form gäi b¸o c¸o nh trong H×nh 10.
Bíc 3: LËp tr×nh
Tríc tiªn ta t¹o hµm MakeSQL. Hµm nµy tr¶ vÒ c©u SQL sao cho kÕt
qu¶ cña nã lµ nh÷ng d÷ liÖu muèn hiÓn thÞ trªn b¸o c¸o. C©u SQL ®îc ph¸t
sinh t¬ng tù nh trong phÇn lËp tr×nh t×m kiÕm.
Public Function MakeSQL() As String
Dim SQL As String
SQL = "SELECT * FROM Table1 "
If Me.chkHT.Value = 1 Or Me.chkNS.Value = 1 Or
Me.chkT.Value = 1 Then
SQL = SQL & "WHERE "
End If

If Me.chkHT.Value = 1 Then
If Trim(Me.cmbHT.Text) = "Like" Then
SQL = SQL & "Hoten " & Me.cmbHT.Text & " '%" &
Trim(Me.txtHT.Text) & "%' "
Else
SQL = SQL & "Hoten " & Me.cmbHT.Text & " '" &
Trim(Me.txtHT.Text) & "' "
End If

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 37 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
End If
If Me.chkHT = 1 And Me.chkNS.Value = 1 Then
If Trim(Me.cmbNS.Text) = "Between" Then
SQL = SQL & "AND Ngaysinh " & Me.cmbNS.Text & " #" &
Trim(Me.txtNS1.Text) & "# AND #" & Me.txtNS2.Text &
"# "
Else
SQL = SQL & "AND Ngaysinh " & Me.cmbNS.Text & " "
& Trim(Me.txtNS1.Text) & " "
End If
Else
If Me.chkNS.Value = 1 Then
If Trim(Me.cmbNS.Text) = "Between" Then
SQL = SQL & "Ngaysinh " & Me.cmbNS.Text & " #" &
Format(CDate(Trim(Me.txtNS1.Text)), "dd/mm/yyyy")
& "# AND #" & Format(CDate(Trim(Me.txtNS2.Text)),
"dd/mm/yyyy") & "# "
Else
SQL = SQL & "Ngaysinh " & Me.cmbNS.Text & " " &
Trim(Me.txtNS1.Text) & " "
End If
End If
End If

If (Me.chkHT.Value = 0 And Me.chkNS.Value = 0) And


Me.chkT.Value = 1 Then
SQL = SQL & " Luong " & Me.cmbT.Text & " " &
Trim(Me.txtT1.Text) & " "
If Me.cmbT.Text = "Between" Then
SQL = SQL & " AND " & Trim(Me.txtT2.Text) & " "
End If
Else
If Me.chkT.Value = 1 Then
SQL = SQL & " AND Luong " & Me.cmbT.Text & " " &
Me.txtT1.Text
If Me.cmbT.Text = "Between" Then
SQL = SQL & " AND " & Me.txtT2.Text & " "
End If
Else
End If
End If
MakeSQL = SQL
End Function

T¹i nót Xem – in b¸o c¸o, ta lËp tr×nh sö dông biÕn Rs ®Ó më b¶ng d÷
liÖu tõ c©u SQL tr¶ vÒ tõ hµm MakeSQL, sau ®ã g¸n biÕn Rs cho thuéc tÝnh
DataSource cña DataReport. Tuy nhiªn cã thÓ ph¸t sinh lçi do c©u SQL sinh ra
bÞ lçi, tèt nhÊt, h·y chó ý bÉy lçi.
Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 38 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows
Private Sub CmdXemIn_Click()
On Error GoTo Err
If ME.ADODC1.State = 1 Then ME.ADODC1.Close
ME.ADODC1.Open MakeSQL, DB, adOpenKeyset, adLockPessimistic
Set DataReport1.DataSource = RS
DataReport1.Show
Exit Sub
Err: MsgBox "Sai c©u SQL !", vbInformation + vbOKOnly, "Message"
End sub
Mét b¸o c¸o ®éng hoµn chØnh ®îc giíi thiÖu trong kü thuËt t¹o b¸o
c¸o b»ng CrystalReport, cã s½n trong phÇn Help cña b¶n demo kÌm theo.

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 39 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows

Môc lôc
Ch¬ng 7: LËp tr×nh C¬ Së D÷ LiÖu.........................(18T-lt + 18T-th)
I. Tæng quan vÒ lËp tr×nh c¬ së d÷ liÖu.......................................................(2t)
1. Mét sè kh¸i niÖm c¬ b¶n........................................................................
2. T¹o mét c¬ së d÷ liÖu.............................................................................
3. C¸c hµm thêng dïng...............................................................................
II. cËp nhËt d÷ liÖu qua c¸c ®iÒu khiÓn.......................................................(4T)
1. Giíi thiÖu chung.....................................................................................
2. CÆp Data vµ DB Grid...........................................................................
3. CÆp ADODC vµ Data Grid...................................................................
4. CËp nhËt d÷ liÖu qua c¸c ®iÒu khiÓn .................................................
5.LËp tr×nh cËp nhËt dïng ADODC..........................................................
III. LËp tr×nh c¬ së d÷ liÖu dïng ADODB....................................................(6T)
1.C¸c biÕn cÇn thiÕt.................................................................................
2.C¸c thuéc tÝnh, ph¬ng thøc cña biÕn Rs...............................................
3.C¸c thao t¸c trªn b¶ng quan hÖ...............................................................
IV. LËp tr×nh t×m kiÕm.................................................................................(2T)
1. Bµi to¸n t×m kiÕm.................................................................................
2. Ph¬ng ph¸p chung ®Ó lËp tr×nh tr×nh kiÕm........................................
3. C¸c vÝ dô t×m kiÕm..............................................................................
V. T¹o b¸o c¸o b»ng Visual Basic...................................................................(1T)
1. Ph¬ng ph¸p chung................................................................................
2. VÝ dô vÒ b¸o c¸o ®éng......................................................................

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 40 Trêng C§CN Hµ Néi
§Ò c¬ng bµi gi¶ng chi tiÕt M«n LËp tr×nh trªn
Windows

§äc thªm:
ThiÕt lËp m«i trêng cÇn thiÕt ®Ó lµm viÖc
§Ó sö dông c¸c kü thuËt nªu trªn trong ®ît thùc tËp vµ lµm ®å ¸n nµy, Xa h¬n n÷a lµ
trë thµnh mét lËp tr×nh viªn chuyªn nghiÖp. Sinh viªn cÇn c¸c c«ng cô hç trî sau:
[1]. Bé OCX chuyªn dông: cung cÊp c¸c OCX cÇn thiÕt gióp sinh viªn cã c¸c ®iÒu
khiÓn míi cÇn thiÕt trong viÖc lËp tr×nh. Bé nµy bao gåm 7 bé OCX víi kÝch thíc 50 MB
®îc cung cÊp bëi t¸c gi¶.
Bé OCX ®· ®îc Crack víi mçi file crack ®i kÌm. Sinh viªn cÇn t×m hiÓu c¸ch Crack.
Tuy nhiªn cã rÊt nhiÒu OCX kh¸c n÷a, sinh viªn cã thÓ t×m kiÕm trªn m¹ng hoÆc tõ ®ång
nghiÖp.
[2]. PhÇn mÒn Winhelp: gióp sinh viªn t¹o c¸c bé Help cho øng dông. §îc cung cÊp
bëi t¸c gi¶ hoÆc cã thÓ Download trªn m¹ng víi kÝch thíc 2.8MB. Sinh viªn hoµn toµn cã
thÓ kh«ng dïng Winhelp ®Ó viÕt Help mµ cã thÓ dïng c¸c phÇn mÒm kh¸c nh RoboHelp,
HTMLHelp... còng rÊt h÷u dông.
[3]. Bé Seagate Crystal report: Phiªn b¶n 8.0; 8.5; 9.0 hoÆc 9.5 ®îc ghi thµnh 01 ®Üa
CD hiÖn cã b¸n t¹i c¸c ®¹i lý ®Üa phÇn mÒm (cã thÓ mua t¹i sè 2 T¹ Quang Böu Hµ Néi).
Bé nµy còng cã thÓ lÊy tõ t¸c gi¶ víi kÝch thíc 97 MB (7.5).
[4]. Bé t¹o bé cµi SetupFactory: Gióp sinh viªn ®ãng gãi s¶n phÈm ®Ó t¹o ra c¸c bé
cµi rÊt tèt. Bé nµy ®îc cung cÊp tõ t¸c gi¶ víi kÝch thíc 5MB. Sinh viªn cã thÓ DownLoad
trªn m¹ng hoÆc t×m mua t¹i c¸c ®¹i lý ®Üa CD phÇn mÒm. Sinh viªn hoµn toµn cã thÓ dïng
c¸c ch¬ng tr×nh t¹o bé cµi kh¸c nh: InstallShield, bé ®ãng gãi cña VB (nÕu kh«ng dïng c¸c
OCX)
[5]. Bé ¶nh chuyªn dông: §Ó gióp phÇn mÒm chuyªn nghiÖp h¬n, sinh viªn cã thÓ sö
dông bé ¶nh, biÓu tîng chuyªn dông ®Ó ®a vµo phÇn mÒm cña m×nh. Bé ¶nh ®îc cung cÊp
bëi t¸c gi¶ cã kÝch thíc 30MB. Sinh viªn cã thÓ downLoad trªn m¹ng nh÷ng ¶nh kh¸c cung
rÊt ®a d¹ng.
[6]. Bé Help cña MicroSoft: Lµ bé MSDN næi tiÕng trî gióp b»ng tiÕng Anh hÇu
hÕt c¸c kü thuËt lËp tr×nh trªn Windows. Víi dung l¬ng trªn 1 GB, sinh viªn cã thÓ mua trän
bé 3 ®Üa CD t¹i c¸c ®¹i lý CD cã tÝn nhiÖm (cã thÓ mua t¹i 2- T¹ Quang Böu Hµ Néi).
[7]. Ngoµi c¸c phÇn mÒm trî gióp trªn, sinh viªn cã thÓ sö dông c¸c c«ng cô m¹nh h¬n
trî gióp thiÕt kÕ vµ lËp tr×nh nh:
+ Rational Rose (®Ó thiÕt kÕ phÇn mÒm híng ®èi tîng)
+ Visio (®Ó thiÕt kÕ c¸c biÓu ®å - nãi chung lµ tÊt c¶ c«ng viÖc cña thiÕt kÕ phÇn
mÒm - rÊt tèt) ®îc ®ãng gãi trªn 1 ®Üa CD, cã b¸n t¹i c¸c ®¹i lý ®Üa CD phÇn mÒm.
+ SQL Server (®Ó t¹o c¸c database cã thÓ hç trî m«i trêng m¹ng tèt h¬n - thêng ®îc
dïng víi c¸c phÇn mÒm hç trî ®a truy cËp vµ m« h×nh Client/ Server)
VÒ trang chñ

Dµnh cho Sinh viªn hÖ Cao ®¼ng Tr. 41 Trêng C§CN Hµ Néi

You might also like