You are on page 1of 158

Visual Basic

CHNG 1 TNG QUAN V VISUAL BASIC 6.0

Mc tiu: Chng ny gii thiu v mi trng pht trin tch hp (IDE) Microsoft Visual Basic 6.0; cng nh gip sinh vin c ci nhn tng quan v Visual Basic. Hc xong chng ny, sinh vin phi nm bt c cc vn sau: - S dng mi trng pht trin tch hp VB 6.0 pht trin ng dng. - Cch to d n mi (New Project) trong VB 6.0. Kin thc c lin quan: - S dng h iu hnh Windows. Ti liu tham kho: - Visual Basic 6 Certification Exam Guide - Chapter 1, Page 1 - Dan Mezick & Scot Hillier - McGraw-Hill - 1998.

Trang 1

Visual Basic

I. Gii thiu v Visual Basic 6.0


Visual Basic 6.0 (VB6) l mt phin bn ca b cng c lp trnh Visual Basic (VB), cho php ngi dng tip cn nhanh cch thc lp trnh trn mi trng Windows. Nhng ai tng quen thuc vi VB th tm thy VB6 nhng tnh nng tr gip mi v cc cng c lp trnh hiu qu. Ngi dng mi lm quen vi VB cng c th lm ch VB6 mt cch d dng. Vi VB6, chng ta c th : Khai thc th mnh ca cc iu khin m rng. Lm vic vi cc iu khin mi (ngy thng vi iu khin MonthView v DataTimePicker, cc thanh cng c c th di chuyn c CoolBar, s dng ha vi ImageCombo, thanh cun FlatScrollBar,). Lm vic vi cc tnh nng ngn ng mi. Lm vic vi DHTML. Lm vic vi c s d liu. Cc b sung v lp trnh hng i tng.

II. Ci t Visual Basic 6.0


S dng chng trnh Setup, ngi dng c th ci t VB6 ln my tnh ca mnh. Chng trnh Setup ny cn ci t cc tp tin cn thit xem ti liu trn a CD MSDN (Microsoft Developer Network). Nu cn, ngi dng c th ci t ring phn ti liu v v d mu ca Visual Basic ln my tnh. ci t VB6, ngi dng nn kim tra my tnh ca mnh m bo c cu hnh ti thiu. Cc yu cu h thng ti thiu : - Microsoft Windows 95 tr ln hoc l Microsoft Windows NT Workstation 4.0 tr ln. - Tc CPU 66 MHz tr ln. - Mn hnh VGA hoc mn hnh c phn gii cao c h tr bi Microsoft Windows. - 16 MB RAM cho Microsoft Windows 95 hoc 32MB RAM cho Microsoft Windows NT Workstation.

III. Lm quen vi VB6


III.1 Bt u mt d n mi vi VB6
T menu Start chn Programs, Microsoft Visual Basic 6.0. Khi bn s thy mn hnh u tin nh hnh I.1 di y.

Trang 2

Visual Basic

Hnh I.1 Ca s khi kch hot VB6 Chn y, ngi dng c th chn to mi mt d n thc thi c bng cch chn Standard EXE ri nhp Open (Hnh I.2). Tip theo l ca s lm vic chnh ca VB6, gi tt l IDE (Integrated Development Environment) s c gii thiu chi tit trong phn sau.

III.2 Tm hiu cc thnh phn ca IDE


IDE l tn tt ca mi trng pht trin tch hp (Integrated Development Environment), y l ni to ra cc chng trnh Visual Basic. IDE ca Visual Basic l ni tp trung cc menu, thanh cng c v ca s to ra chng trnh. Mi mt thnh phn ca IDE c cc tnh nng nh hng n cc hot ng lp trnh khc nhau.

Trang 3

Visual Basic

Hnh I.3 Ca s IDE ca VB6

Thanh menu cho php bn tc ng cng nh qun l trc tip trn ton b ng dng. Bn cnh thanh cng c cho php truy cp cc chc nng ca thanh menu thng qua cc nt trn thanh cng c. Cc biu mu (Form) - khi xy dng chng trnh chnh ca VB - xut hin trong ca s Form. Hp cng c thm cc iu khin vo cc biu mu ca n. Ca s Project Explorer hin th cc n khc nhau m ngi dng ang lm cng nh cc phn ca n. Ngi dng duyt v ci t cc thuc tnh ca iu khin, biu mu v module trong ca s Properties. Sau cng, ngi dng s xem xt v b tr mt hoc nhiu biu mu trn mn hnh thng qua ca s Form Layout.

III.3 S dng thanh cng c trong IDE ca VB


Thanh cng c l tp hp cc nt bm mang biu tng thng t di thanh menu. Cc nt ny m nhn cc chc nng thng dng ca thanh menu (New, Open, Save ...).

Hnh I.4 Thanh cng c dng standard


Trang 4

Visual Basic

Hnh I.5 Popup menu thm, xa cng c

Hn na, ngi dng c th ko r thanh cng c trn IDE n v tr bt k no thun tin cho vic s dng. Ngi dng c th thm hay xa thanh cng c trn IDE: * Chn Toolbars t menu View hoc n chut phi vo im bt k no trn thanh menu, mt popup menu bt ra. * Chn loi thanh cng c m ta mun thm vo hoc xa i. Nu c nh du check bn tri th loi cng c ang c chn. S dng thanh cng c g ri (debug) Vi thanh cng c g ri, ngi dng c th thc thi, tm ngng hoc dng mt n. Vi thanh cng c Debug, ngi dng c th kim tra chng trnh v gii quyt cc li c th xy ra. Khi g ri chng trnh, ngi dng c th chy tng dng lnh, kim tra gi tr cc bin, dng chng trnh ti mt im no hoc vi mt iu kin no .

Hnh I.6 Thanh cng c g ri

S dng thanh cng c Edit Thanh cng c Edit c dng vit chng trnh trong ca s Code, thanh cng c Edit c y cc tnh nng ca menu Edit. Ngoi ra ngi s dng c th s dng chc nng vit chng trnh t ng nh l Hnh I.7 Thanh cng c Edit Quick Info. Thanh cng c Edit ca VB6 c tnh nng l th l t hon tt cc t kha. Tnh nng ny rt hu dng gip cho ngi dng trnh cc li mc phi do g sai t kha. S dng thanh cng c Form Editor

Hnh I.8 Thanh cng c thit k biu mu


Thanh cng c Form Editor c chc nng ging nh menu Format dng di chuyn v sp xp cc iu khin trn biu mu.

Trang 5

Visual Basic

Trong qu trnh thit k biu mu, i khi chng ta phi s dng thuc tnh ZOrder cho php mt iu khin c th thay th mt iu khin khc hay khng hoc l xut hin bn trn mt iu khin khc hay khng. S dng hp cng c (Toolbox) Hp cng c l ni cha cc iu khin c dng trong qu trnh thit k biu mu. Cc iu khin c chia lm hai loi: iu khin c sn trong VB v cc iu khin c cha trong tp tin vi phn m rng l .OCX. i vi cc iu khin c sn trong VB th ta khng th g b khi hp cng c, trong khi i vi iu khin nm ngoi ta c thm hoc xa b khi hp cng c. Mt iu khin c th c a vo biu mu bng cch chn iu khin v a vo biu mu. Chng ta s tr li phn ny trong chng tip theo khi thit k cc biu mu. Hnh I.9 Hp cng c ca Visual Basic

III.4 Qun l ng dng vi Project Explorer


Project Explorer trong VB6 gip qun l v nh hng nhiu n.VB cho php nhm nhiu n trong cng mt nhm. Ngi dng c th lu tp hp cc n trong VB thnh mt tp tin nhm n vi phn m rng .vbp. Project Explorer c cu trc cy phn cp nh cy th mc trong ca s Explorer ca h iu hnh. Cc n c th c coi l gc ca cy, cc thnh phn ca n nh biu mu, module ... l cc nt ca cy. Khi mun lm vic vi thnh phn no th ta c th nhn p ln thnh phn trn ca s Project Explorer vo ca s vit code cho thnh phn . Hnh I.10 Ca s Project Explorer Khi lm vic vi mt d n ln, chng ta s thy Project Explorer cc k hu ch cho vic t chc v qun l mt d n ln.

III.5 Ca s Properties
Mi mt thnh phn, iu khin iu c nhiu thuc tnh. Mi mt thuc tnh li c mt hoc nhiu gi tr. Ca s Properties cho php ngi dng xem, sa i gi tr cc thuc tnh ca iu khin nhm gip iu khin hot ng theo ng ca ngi s dng.

Trang 6

Visual Basic

III.6 Ca s Form Layout


y chnh l ca s trnh by biu mu cho php nh v tr ca mt hoc nhiu biu mu trn mn hnh khi chng trnh ng dng c thi hnh. Ta nh v mot bieu mau tren man hnh bang cach dung chuot di chuyen bieu mau trong ca so Form Layout. S dng ca s Form Layout khng n gin nh cc ca s khc v n khng c kch hot sn, ngi dng cn phi chy ng dng sau mi c th b tr c cc biu mu thng qua Form Layout. Nu ta khng nh v cc biu mu th v tr ca biu mu trn mn hnh lc thit k cng l v tr khi ng ca biu mu khi thc thi.

Hnh I.12 Ca s Form III.7 Bin dch n thnh tp tin thc thi L Sau khi n hon thnh, ngi dng c th bin dch thnh tp tin thc thi t
c. Cch tin hnh nh sau: - Trc tin ta cn ch cho VB6 bit phn chng trnh no s c thc thi trc bng cch chn Project Properties t menu Project. Chn tab General, ch phn Startup Object, y l ni quy nh im khi u ca chng trnh sau khi bin dch kt thc. - T menu File, chn Make ... EXE... Mt hp thoi xut hin cho php bn nhp vo tn ca tp tin thc thi. Bn ch cn g tn tp tin, VB s t ng thm phn m rng .EXE. - Nhn vo nt Options m hp thoi Project Properties v in tn ca ng dng vo Title, ta c th ghi ch thng tin cho tng phin bn trong phn Version Information. Ta c th chn Auto Increment VB t ng tng s Revision mi ln ta to li tp tin EXE cho d n. - Cui cng, nhn OK tr v hp thoi Make Project.

Trang 7

Visual Basic

CHNG 2 BIU MU V MT S IU KHIN THNG DNG


Mc tiu: Chng ny gii thiu v mt s iu khin c bn to nn giao din cho cc ng dng cng nh mt s khi nim trong lp trnh vi VB; nhng yu cu ti thiu cn c trong vic lp trnh s kin vi VB. Hc xong chng ny, sinh vin phi nm bt c cc vn sau: - Khi nim v iu khin, thuc tnh, phng thc, s kin. - Quy tc t tn danh biu trong VB. - S dng biu mu trong thit k giao din. - S dng iu khin nhp liu, nt nhn, nhn, khung. Kin thc c lin quan: - Cch thc s dng mi trng pht trin VB. Ti liu tham kho:
- Microsoft Visual Basic 6.0 v Lp trnh C s d liu - Chng 2, trang 26; Chng 3, trang 29 - Nguyn Th Ngc Mai (ch bin), Nh xut bn Gio dc - 2000.

Trang 8

Visual Basic

I. Cc khi nim
iu khin: Cc thnh phn c sn ngi lp trnh to giao din tng tc vi ngi dng. Mi iu khin thc cht l mt i tng, do vy n s c mt s im c trng cho i tng, chng hn nh cc thuc tnh, cc phng thc & cc s kin. Thuc tnh: Cc c trng ca mt iu khin to nn dng v ca iu khin . Phng thc: Cc iu khin c th thc thi mt s tc v no , cc tc v ny c nh ngha sn bn trong cc phng thc (cn gi l chng trnh con: hm & th tc), ngi lp trnh c th gi thc thi cc phng thc ny nu cn. S kin: l hnh ng ca ngi dng tc ng ln ng dng ang thc thi. Th d: - Nhn phm bt k trn bn phm. - Nhp chut. Cc thnh phn giao din c kh nng p ng li s kin. Chng hn khi chng ta nhp chut vo button, lc button nhn bit c s kin ny; hay nh textbox nhn bit c s kin bn phm tc ng ln n. Mt ng dng trn Windows thng c thc hin nh vo vic p ng li cc s kin ca ngi dng. Lp trnh s kin: Cc thnh phn giao din c kh nng nhn bit c cc s kin t pha ngi dng. Tuy nhin kh nng p ng li cc s kin c thc hin bi ngi lp trnh. Khi mt thnh phn giao din c s dng, ngi lp trnh phi xc nh chnh xc hnh ng ca thnh phn giao din p ng li mt s kin c th. Lc ngi lp trnh phi vit on m lnh m on m lnh ny s c thc thi khi s kin xy ra. Chng hn, trong ng dng Paint ca Windows; khi ngi s dng nhp chut vo nt v hnh elip sau dng chut v n trn ca s v, mt hnh elip c v ra. Trong lp trnh s kin, mt ng dng c xy dng l mt chui cc p ng li s kin. Tt c cc hnh ng ca ng dng l p ng li cc s kin. Do vy ngi lp trnh cn phi xc nh cc hnh ng cn thit ca ng dng; phn loi chng; sau vit cc on m lnh tng ng. Th d v p ng li s kin: M lnh
- M lnh cho s kin Click ca Ghi a. --------------------------------------------------------------------------------------------------- M lnh cho s kin Click ca In giy ---------------------------------------------------------------------------------------------------

Hnh II.1: Th d v p ng s kin Trang 9

Visual Basic

- Khi ngi dng khng tc ng vo ng dng, ng dng khng lm g c. - Khi ngi dng nhp d liu vo cc nhp H v tn, a ch; s kin bn phm xy ra trn cc nhp. Tuy nhin, ng dng vn khng lm g c v khng c on m lnh no p ng cc s kin ny. - Khi ngi dng nhp nt chn Ghi a, ng dng tm kim trong m lnh ca mnh thy c on m lnh p ng li s kin ny; lc on m lnh c thc thi. - Tng t nh vy i vi nt chn In giy. Cch xc lp cc thuc tnh & cc phng thc trong chng trnh <Thuc tnh Name ca iu khin>.<Tn thuc tnh> <Thuc tnh Name ca iu khin>.<Tn phng thc>[(<Cc tham s>)] Tn iu khin (thuc tnh Name) y l thuc tnh xc nh tn ca iu khin trong ng dng. Tn ny c t theo quy tc: o Tn c th di t 1 - 40 k t. o Tn phi bt u vi k t ch, c th ch hoa hay thng. o Sau k t u tin, tn c th cha k t, s hay du gch di. V d: Num, StudentCode, Class12A2 l nhng tn hp l. 345, 7yu l nhg tn khng hp l.

II. Biu mu (Form)


II.1. Khi nim:
Chng trnh ng dng giao tip vi ngi dng thng qua cc biu mu (hay cn gi l ca s, xut pht t ch Form hay Windows); cc iu khin (Control) c t ln bn trn gip cho biu mu thc hin c cng vic . Biu mu l cc ca s c lp trnh nhm hin th d liu v nhn thng tin t pha ngi dng.

II.2. Thuc tnh


o Name: thuc tnh ny nh l mt nh danh nhm xc nh tn ca biu mu l g? Ta s s dng thuc tnh ny truy xut n cc thuc tnh khc cng vi phng thc c th thao tc c trn biu mu. o Caption: chui hin th trn thanh tiu ca biu mu.

o Icon: hnh icon c dng trong thanh tiu ca biu mu, nht l khi biu mu thu nh li.

o WindowState: xc nh biu mu s c kch thc bnh thng (Normal=0), hay Minimized (=1), Maximized =(2).

Trang 10

Visual Basic

nm trn n tha k. Tc l khi ta t mt iu khin ln biu mu, thuc tnh Font ca iu khin y s t ng tr nn ging y ca biu mu.

o Font: xc lp Font cho biu mu. Thuc tnh ny s c cc iu khin

o BorderStyle: xc nh dng ca biu mu.


II.3. Phng thc
o Move: di chuyn biu mu n ta X,Y: Move X, Y.

II.4. S kin
to ra th hin u tin ca biu mu. Ta dng s kin Form_Initialize thc hin nhng g cn phi lm chung cho tt c cc th hin ca biu mu ny. Nu ta ch dng mt th hin duy nht ca mt biu mu trong chng trnh th Form_Load coi nh tng ng vi Form_Initialize.

o Form_Initialize: S kin ny xy ra trc nht v ch mt ln thi khi ta

o Form_Load: S kin ny xy ra mi ln ta gi th hin mt biu mu.

Ta dng s kin Form_Load khi to cc bin, iu khin cho cc th hin ca biu mu ny. kin Activate pht sinh. Ta thng dng s kin ny cp nht li gi tr cc iu khin trn biu mu. Form_QueryUnload: Khi ngi s dng chng trnh nhp chut vo nt X pha trn bn phi ng biu mu th mt s kin QueryUnload c sinh ra. on chng trnh con di y m t th tc x l s kin QueryUnload.
Private Sub Form_QueryUnload(Cancel As Integer, _ UnloadMode As Integer) End Sub

o Form_Activate: Mi ln mt biu mu c kch hot (active) th mt s

S kin ny cho ta kh nng hy b hnh ng ng biu mu bng cch t li Cancel l 1.

Form_Resize: S kin ny xy ra mi khi biu mu thay i kch thc.

III. Nhn (Label)


III.1. Khi nim:
Nhn l iu khin dng ha cho php ngi s dng hin th chui k t trn biu mu nhng h khng th thay i chui k t mt cch trc tip. Biu tng (shortcut) trn hp cng c:

III.2. Thuc tnh:


o Name: y l mt tn xc nh mt nh danh, ngi lp trnh c th thay i tn ny theo cch ca mnh tin s dng.

Trang 11

Visual Basic

o Caption: Thuc tnh quy nh chui k t hin th khi ta to mt iu khin nhn. Khi ta to mi mt iu khin th thuc tnh Caption c gi tr mc nhin l Label. V d: Ta mun to mt nhn l Cho mng bn n vi Visual Basic, ta thay i gi tr ca thuc tnh Caption thnh Cho mng bn n vi Visual Basic. Ta c th thay i gi tr ca thuc tnh Caption ti thi im ng dng ang chy nh vo on m lnh n gin nh sau: L1.Caption = " i gi tr Caption" vi L1 l tn ca iu khin nhn m ta mun i. o Font, Fore Color: Quy nh kiu ch, kch thc, mu hin th. o BackStyle, BackColor: BackStyle quy nh l nhn trong sut hay khng. BackColor quy nh mu nn ca nhn trong trng hp khng trong sut.

III.3. Phng thc:


o Move: di chuyn nhn n ta X,Y: Move X, Y.

III.4. S kin:
o Change: Xy ra mi khi nhn thay i gi tr. o Click: Mi khi nhn c chut nhp ln, s kin ny xy ra. o DblClick: Xy ra khi ngi s dng nhp p chut ln iu khin nhn.

IV. Khung (Frame)


IV.1. Khi nim:
Khung l mt iu khin dng trong vic b tr giao din ca biu mu mt cch trong sng v r nt. Thng thng cc iu khin cng phc v cho mt cng vic no s c t trong mt khung nhm lm ni bt vai tr ca chng. Biu tng (shortcut) trn hp cng c: Khi chng ta to mi mt khung cha cc iu khin khc, ta c hai cch thc hin: - To khung cha trc, sau a cc iu khin vo trong khung cha. y l cch n gin nht. - To khung cha sau khi to mi cc iu khin, khi khung cha s che mt cc iu khin, v vy ta cn phi a khung cha ra sau cc iu khin bng cch nhp chut phi v chn Send to Back. Nhng i vi cch ny, cc iu khin khc khng nm trn khung cha. Do vy ta c th gii quyt bng cch ct (Cut) cc iu khin ny i, sau dn (Paste) vo trong khung cha.

Trang 12

Visual Basic

Hnh II.2 V d v khung cha (Frame)

IV.2. Thuc tnh:


Khung cng c cc thuc tnh thng dng nh ca iu khin nhn chng hn nh: Name, Caption,...

IV.3. Phng thc:


o Move: di chuyn khung n ta X,Y: Move X, Y.

IV.4. S kin:
o Click, DblClick: xy ra khi khung nhn c mt thao tc nhp (nhp p) chut.

V. Nt lnh (Command Button)


V.1. Khi nim:
Nt lnh l mt iu khin dng bt u, ngt hoc kt thc mt qu trnh. Khi nt lnh c chn th n trng nh c nhn xung, do nt lnh cn c gi l nt nhn (Push Button). Ngi s dng lun c th chn mt nt lnh no bng cch nhn chut trn nt lnh . Biu tng (shortcut) trn hp cng c:

V.2. Thuc tnh:


o Name: s dng nh mt nh danh nhm xc nh tn ca nt lnh. o Caption: Dng hin th mt chui no trn nt lnh. o Default: Nu gi tr ca thuc tnh ny l True th ta c th chn nt lnh bng cch nhn phm Enter. o Cancel: Nu gi tr ca thuc tnh ny l True th ta c th chn nt lnh no bng cch nhn phm ESC. o Enabled: Trong mt biu mu, c th c nhiu nt lnh thc hin nhiu cng vic khc nhau v ti mt thi im no ta ch c php thc hin mt s cng vic. Nu gi tr thuc tnh Enabled l False th nt lnh khng c tc dng. Gi tr mc nh ca thuc tnh ny l True. Ta c th thay i gi tr ca thuc tnh ti thi im chy ng dng. Trang 13

Visual Basic

o ToolTipText: cho php hin th mt on vn bn ch thch cng dng ca nt lnh khi ngi s dng dng chut r trn nt nhn. o Font, Fore Color: Quy nh kiu ch, kch thc, mu hin th.

V.3. Phng thc


o Move: di chuyn nt lnh n ta X,Y: Move X, Y.

V.4. Phng thc


o Click: y l s kin thng xy ra vi nt lnh. Mi khi mt nt lnh c chn, s kin ny c kch hot. Do , ngi s dng s vit m cc lnh p ng li s kin ny. V d: To mt biu mu c mt nhp liu vi nhn l h tn v mt nt lnh cho php a ra cu cho ngi dng .
Private Sub Command1_Click() MsgBox "Chao mung ban " & Text1.Text & _ " lam quen voi Visual Basic" End Sub

Click here Hnh II.3 S dng nt lnh

VI. nhp liu (TextBox)


VI.1. Khi nim:
nhp liu l mt iu khin cho php nhn thng tin do ngi dng nhp vo. i vi nhp liu ta cng c th dng hin th thng tin, thng tin ny c a vo ti thi im thit k hay thm ch thi im thc thi ng dng. Cn thao tc nhn thng tin do ngi dng nhp vo d nhin l c thc hin ti thi im chy ng dng. Biu tng (shortcut) trn hp cng c

VI.2. Thuc tnh:


o Name: y l tn ca nhp liu, c s dng nh mt nh danh. o MaxLength: Thuc tnh quy nh s k t ti a c th nhp vo nhp liu. Nu s k t nhp vo vt qu s k t ti a th ch c ng s k t ti a c ghi nhn vo trong thuc tnh Text. Trang 14

Visual Basic

o Text: Dng nhp vo thng tin cn hin th trong Textbox ti thi im thit k hoc nhn gi tr do ngi dng nhp vo ti thi im chy ng dng. V d:
MsgBox Text1.Text

on m ny vit trong s kin Click ca nt lnh OK. Cho php hp thng bo hin th ni dung do ngi dng nhp vo nhp liu.

Hnh II.3 V d v iu khin nhp liu

o Locked: Thuc tnh cho php ngi dng thay i ni dung ca nhp liu c hay khng? Thuc tnh ny c th nhn 2 gi tr True hoc False. Nu False th ngi dng c th thay i ni dung ca nhp liu & mc nh th thuc tnh ny c gi tr l False. o PasswordChar: Thuc tnh ny quy nh cch hin th thng tin do ngi dng nhp vo. Chng hn, nu ta nhp vo gi tr thuc tnh ny l * th cc k t nhp vo iu hin th bi du * . Thuc tnh ny thng c dng trong trng hp thng tin nhp vo cn c che giu (V d mt khu ng nhp mt chng trnh ng dng no m trong cc ngi dng khc nhau th c cc quyn khc nhau). o Multiline: Thuc tnh quy nh nhp liu c c hin th thng tin di dng nhiu hng hay khng, nu l TRUE th nhp liu cho php nhiu hng. o Font, Fore Color: Quy nh kiu ch, kch thc, mu hin th. o SelLength:Cho php tr v hoc t trc s lng k t c chn trong nhp liu. o SelStart: Tr v hoc xc nh im bt u ca chui c chn. y l v tr bt u chn mt chui mi trong trng hp khng c nh du chn chui. o SelText: Tr v hoc xc nh chui k t c nh du chn, chi tr v s l rng nu nh khng nh du chn chui no. Ba thuc tnh SelLength, SelStart, SelText ch c tc dng ti thi im chy ng dng.

VI.3. Phng thc


o Move: Di chuyn nhp liu n ta X, Y: Move X, Y.

Trang 15

Visual Basic

o SetFocus: Phng thc ny nhm mc ch thit lp cho iu khin nhp liu nhn c Focus, ngha l n sn sng c tng tc bi ngi s dng.

VI.4. S kin:
o KeyPress: xy ra khi ngi s dng chng trnh nhn mt phm. i vi iu khin TextBox, ta thng dng n lc (filter out) cc phm khng chp nhn. S kin KeyPress cho ta mt m Ascii, mt s c gi tr t 0 n 255, ca phm va nhn. Trong v d di y, TextBox Text1 s ch nhn bit cc phm l s (0 - 9), khng nhn bit cc phm khc:
Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii < 48 Or KeyAscii > 57 Then M Ascii ca 0 l 48, ca 9 l 57 KeyAscii = 0 End If End Sub

o KeyDown, KeyUp: mi s kin KeyPress li cho ta mt cp s kin KeyDown/KeyUp. S kin KeyDown/KeyUp c 2 tham s l KeyCode v Shift. S kin ny cho php ta nhn bit c cc phm c bit trn bn phm. Trong v d di y, ta hin th tn cc phm chc nng m ngi s dng chng trnh nhn vo:
Private Sub Text3_KeyDown(KeyCode As Integer, Shift As Integer) If (KeyCode >= 112) And (KeyCode <= 123) Then MsgBox "Ban vua nhan phim chuc nang: F" & _ Trim(Str(KeyCode - 111)) End If End Sub

CHNG 3: LP TRNH CU TRC TRONG VISUAL BASIC


Mc tiu: Chng ny gii thiu v cc cu trc lp trnh trong VB; y l cc cu trc ct li xy dng nn mt chng trnh VB. Hc xong chng ny, sinh vin phi nm bt c cc vn sau: - S dng mi trng lp trnh VB vit m lnh. - Cc kiu d liu trong VB. - Cch khai bo hng, bin trong VB. - Biu thc trong VB. - Cc cu lnh n cng nh cc cu lnh c cu trc. - Chng trnh con trong VB. - By li trong VB. Kin thc c lin quan: - Cch s dng mi trng pht trin ca VB. Trang 16

Visual Basic

Ti liu tham kho:


- Microsoft Visual Basic 6.0 v Lp trnh C s d liu - Chng 4, trang 49 - Nguyn Th Ngc Mai (ch bin), Nh xut bn Gio dc - 2000.

Trang 17

Visual Basic

I. Mi trng lp trnh
I.1. Son tho chng trnh:
Trong Visual Basic IDE, ca s m lnh (Code) cho php son tho chng trnh. Ca s ny c mt s chc nng ni bt: o nh du (Bookmarks): Chc nng ny cho php nh du cc dng lnh ca chng trnh trong ca s m lnh d dng xem li v sau ny. bt tt kh nng ny, chn Bookmarks t menu Edit, hoc chn t thanh cng c Edit. o Cc phm tt trong ca s m lnh: Chc nang Xem ca s Code Xem ca s Object Browser Tm kim Thay th Tm tip Tm ngc Chuyn n th tc k tip Chuyn n th tc trc Xem nh ngha Cun xung mt mn hnh Cun ln mt mn hnh Nhy v v tr trc Tr v u ca m-un n cui m-un Phm tat F7 F2 CTRL+F CTRL+H SHIFT+F4 SHIFT+F3 CTRL+DOWN ARROW CTRL+UP ARROW SHIFT+F2 CTRL+PAGE DOWN CTRL+PAGE UP CTRL+SHIFT+F2 CTRL+HOME CTRL+END

I.2. Cc chc nng t ng:


o T ng kim tra c php (Auto Syntax Check) Nu chc nng ny khng c bt th khi ta vit mt dng m c cha li, VB ch hin th dng chng trnh sai vi mu nhng khng km theo ch thch g v tt nhin ta c th vit tip cc dng lnh khc. Cn khi chc nng ny c bt, VB s cho ta bit mt s thng tin v li v hin th con tr ngay dng chng trnh li ch ta sa. o Yu cu khai bo bin (Require Variable Declaration) VB s thng bo li khi mt bin c dng m khng khai bo v s ch ra v tr ca bin .

Trang 18

Visual Basic

Hnh III.1: Ca s Options o Gi nh m lnh (Code): Kh nng Auto List Members: T ng hin th danh sch cc thuc tnh v phng thc ca 1 iu khin hay mt i tng khi ta g vo tn ca chng. Chn thuc tnh hay phng thc cn thao tc v nhn phm Tab hoc Space a n vo chng trnh.

Hnh III.2 Ca s Code vi kh nng gi nh Code

II. Kiu d liu


II.1. Khi nim
Kiu d liu l mt tp hp cc gi tr m mt bin ca kiu c th nhn v mt tp hp cc php ton c th p dng trn cc gi tr . Trang 19

Visual Basic

II.2. Cc kiu d liu c s trong Visual Basic

Kiu d liu Boolean Byte Integer Long Single Double

M t Gm 2 gi tr: TRUE & FALSE. Cc gi tr s nguyn t 0 255 Cc gi tr s nguyn t -32768 32767 Cc gi tr s nguyn t -2147483648 2147483647. Kiu d liu ny thng c gi l s nguyn di. Cc gi tr s thc t -3.402823E+38 3.402823E+38. Kiu d liu ny cn c gi l chnh xc n. Cc gi tr s thc t -1.79769313486232E+308 1.79769313486232E+308. Kiu d liu ny c gi l chnh xc kp. D liu tin t cha cc gi tr s t -922.337.203.685.477,5808 922.337.203.685.477,5807. Chui d liu t 0 n 65.500 k t hay k s, thm ch l cc gi tr c bit nh ^%@. Gi tr kiu chui c t gia 2 du ngoc kp (). D liu kiu ngy thng, gi tr c t gia cp du ##. Vic nh dng hin th ty thuc vo vic thit lp trong Control Panel. Cha mi gi tr ca cc kiu d liu khc, k c mng.

Currency String

Date

Variant

III. Hng s
III.1. Khi nim
Hng s (Constant) l gi tr d liu khng thay i.

III.2. Khai bo hng


[Public|Private] Const <tn hng> [As <kiu d liu>] = <biu thc> Trong , tn hng c t ging theo quy tc t tn ca iu khin. V d: Const g = 9.8 Const Num As Integer = 4*5 Ta c th dng ca s Object Browser xem danh sch cc hng c sn ca VB v VBA (Visual Basic for Application). Trng hp trng tn hng trong nhng th vin khc nhau, ta c th ch r tham chiu hng. Trang 20

Visual Basic

[<Libname>.][<tn m-un>.] <tn hng>

III) Bin
III.1. Khi nim
Bin (Variable) l vng lu tr c t tn cha d liu tm thi trong qu trnh tnh ton, so snh v cc cng vic khc. Bin c 2 c im: o Mi bin c mt tn. o Mi bin c th cha duy nht mt loi d liu.

III.2. Khai bo
[Public|Private|Static|Dim] <tn bin> [ As <kiu d liu> ] Trong , tn bin: l mt tn c t ging quy tc t tn iu khin. Nu cn khai bo nhiu bin trn mt dng th mi khai bo cch nhau du phy (,). Nu khai bo bin khng xc nh kiu d liu th bin c kiu Variant. Khai bo ngm: y l hnh thc khng cn phi khai bo mt bin trc khi s dng. Cch dng ny c v thun tin nhng s gy mt s sai st, chng hn khi ta nh nhm tn bin, VB s hiu l mt bin mi dn n kt qu chng trnh sai m rt kh pht hin. V d: Dim Num As Long, a As Single Dim Age As Integer Khai bo tng minh: trnh rc ri nh nu trn, ta nn quy nh rng VB s bo li khi gp bin cha c khai bo bng dng lnh: Option Explicit trong phn Declaration (khai bo) ca m-un. Option Explicit ch c tc dng trn tng m-un do ta phi t dng lnh ny trong tng m-un ca biu mu, m-un lp hay m-un chun.

IV. Biu thc


IV.1. Khi nim
Ton t hay php ton (Operator): l t hay k hiu nhm thc hin php tnh v x l d liu. Ton hng: l gi tr d liu (bin, hng). Biu thc: l tp hp cc ton hng v cc ton t kt hp li vi nhau theo quy tc nht nh tnh ton ra mt gi tr no .

IV.2. Cc loi php ton


a. Cc php ton s hc: Thao tc trn cc gi tr c kiu d liu s.

Trang 21

Visual Basic

Php ngha Kiu ca i s Kiu ca kt qu ton Php ly s i Kiu s (Integer, Single) Nh kiu i s + Php cng hai s Kiu s (Integer, Single) Nh kiu i s Php tr hai s Kiu s (Integer, Single) Nh kiu i s * Php nhn hai s Kiu s (Integer, Single) Nh kiu i s / Php chia hai s Kiu s (Integer, Single) Single hay Double \ Php chia ly phn nguyn Integer, Long Integer, Long Mod Php chia ly phn d Integer, Long Integer, Long ^ Tnh ly tha Kiu s (Integer, Single) Nh kiu i s b. Cc php ton quan h y l cc php ton m gi tr tr v ca chng l mt gi tr kiu Boolean (TRUE hay FALSE). Php ton ngha So snh bng nhau = <> So snh khc nhau > So snh ln hn < So snh nh hn >= So snh ln hn hoc bng <= So snh nh hn hoc bng c. Cc php ton Logic: l cc php ton tc ng trn kiu Boolean v cho kt qu l kiu Boolean. Cc php ton ny bao gm AND (v), OR (hoc), NOT (ph nh). Sau y l bng gi tr ca cc php ton: X Y X AND Y X OR Y NOT X TRUE TRUE TRUE TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE FALSE TRUE TRUE FALSE FALSE FALSE FALSE TRUE

V. Cu lnh
Mt cu lnh (statement) xc nh mt cng vic m chng trnh phi thc hin x l d liu c m t v khai bo. Cc cu lnh c ngn cch vi nhau bi k t xung dng. K t xung dng bo hiu kt thc mt cu lnh.

V.1. Lnh gn
C php: <Tn bin> = <Biu thc> V d: Gi s ta c khai bo sau:
Dim TodayTemp As Single, MinAge As Integer Dim Sales As Single, NewSales As Single, FullName As String

Cc lnh sau gn gi tr cho cc bin trn: Trang 22

Visual Basic
TodayTemp = 30.5 MinAge = 18 Sales = 200000 NewSales = Sales * 1.2

Gi s ngi dng cn nhp h v tn vo nhp liu TextBox c thuc tnh Name l txtName, cu lnh di y s lu gi tr ca nhp liu vo trong bin FullName:
FullName = txtName.Text

Lu : Kiu d liu ca biu thc (v phi ca lnh gn) phi ph hp vi bin ta cn gn tr.

V.2. Lnh r nhnh If


o Mt dng lnh: If <iu kin> Then <dng lnh> o Nhiu dng lnh: If <iu kin> Then Cc dng lnh End If Lu c php:
K

Sai

ng
Cc dng lnh

Trong , <iu kin>: biu thc m kt qu tr v kiu Boolean. ngha cu lnh: Cc dng lnh hay dng lnh s c thi hnh nu nh iu kin l ng. Cn nu nh iu kin l sai th cu lnh tip theo sau cu trc If ... Then c thi hnh. o Dng y : If ... Then ... Else If <iu kin 1> Then [Khi lnh 1] ElseIf <iu kin 2> Then [Khi lnh 2]... [Else [Khi lnh n]] End If

Trang 23

Visual Basic

VB s kim tra cc iu kin, nu iu kin no ng th khi lnh tng ng s c thi hnh. Ngc li nu khng c iu kin no ng th khi lnh sau t kha Else s c thi hnh. V d:
If (TheColorYouLike = vbRed) Then MsgBox "You are a lucky person" ElseIf (TheColorYouLike = vbGreen) Then MsgBox "You are a hopeful person" ElseIf (TheColorYouLike = vbBlue) Then MsgBox "You are a brave person" ElseIf (TheColorYouLike = vbMagenta) Then MsgBox "You are a sad person" Else MsgBox "You are an average person" End If

V.3. Lnh la chn Select Case


Trong trng hp c qu nhiu cc iu kin cn phi kim tra, nu ta dng cu trc r nhnh IfThen th on lnh khng c trong sng, kh kim tra, sa i khi c sai st. Ngc li vi cu trc SelectCase, biu thc iu kin s c tnh ton mt ln vo u cu trc, sau VB s so snh kt qu vi tng trng hp (Case). Nu bng n thi hnh khi lnh trong trng hp (Case) . Select Case <biu thc kim tra> Case <Danh sch kt qu biu thc 1> [Khi lnh 1] Case <Danh sch kt qu biu thc 2> [Khi lnh 2] . . . [Case Else [Khi lnh n]] End Select Mi danh sch kt qu biu thc s cha mt hoc nhiu gi tr. Trong trng hp c nhiu gi tr th mi gi tr cch nhau bi du phy (,). Nu c nhiu Case cng tha iu kin th khi lnh ca Case u tin s c thc hin. V d ca lnh r nhnh IfThen trn c th vit nh sau:
Select Case TheColorYouLike Case vbRed MsgBox "You are a lucky person" Case vbGreen MsgBox "You are a hopeful person" Case vbBlue MsgBox "You are a brave person" Case vbMagenta MsgBox "You are a sad person" Case Else

Trang 24

Visual Basic
MsgBox "You are an average person" End Select

Ton t Is & To Ton t Is: c dng so snh <Biu thc kim tra> vi mt biu thc no . Ton t To: Dng xc lp min gi tr ca <Biu thc kim tra>. V d:
Select Case Tuoi Case Is <18 MsgBox Vi thanh nien Case 18 To 30 MsgBox Ban da truong thanh, lo lap than di Case 31 To 60 MsgBox Ban dang o lua tuoi trung nien Case Else MsgBox Ban da lon tuoi, nghi huu duoc roi day! End Select

Lu : Trong v d trn khng th vit Case Tuoi < 18.

V.4. Cu trc lp
Cc cu trc lp cho php thi hnh mt khi lnh no nhiu ln. a. Lp khng bit trc s ln lp Do ... Loop: y l cu trc lp khng xc nh trc s ln lp, trong , s ln lp s c quyt nh bi mt biu thc iu kin. Biu thc iu kin phi c kt qu l True hoc False. Cu trc ny c 4 kiu: Kiu 1: Do While <iu kin> <khi lnh> kin Loop ng Sai Khi lnh Khi lnh s c thi hnh n khi no iu kin khng cn ng na. Do biu thc iu kin c kim tra trc khi thi hnh khi lnh, do c th khi lnh s khng c thc hin mt ln no c. Kiu 2: Do <khi lnh> Loop While <iu kin>

Trang 25

Visual Basic

Khi lnh s c thc hin, sau biu thc iu kin c kim tra, nu iu kin cn ng th, khi lnh s c thc hin tip tc. Do biu thc iu kin c kim tra sau, do khi lnh s c thc hin t nht mt ln. Kiu 3: Do Until <iu kin> <khi lnh> Loop Cng tng t nh cu trc Do While ... Loop nhng khc bit ch l khi lnh s c thi hnh khi iu kin cn sai. Kiu 4: Do <khi lnh> Loop Until <iu kin> Khi lnh c thi hnh trong khi iu kin cn sai v c t nht l mt ln lp. V d: on lnh di y cho php kim tra mt s nguyn N c phi l s nguyn t hay khng?
Dim i As Integer i = 2 Do While (i <= Sqr(N)) i = i + 1 Loop If (i > Sqr(N)) And (N MsgBox Str(N) & Else MsgBox Str(N) & End If And (N Mod i = 0) <> 1) Then la so nguyen to khong la so nguyen to

Trong , hm Sqr: hm tnh cn bc hai ca mt s b. Lp bit trc s ln lp For ... Next y l cu trc bit trc s ln lp, ta dng bin m tng dn hoc gim dn xc nh s ln lp. For <bin m> = <im u> To <im cui> [Step <bc nhy>] [khi lnh] Next Bin m, im u, im cui, bc nhy l nhng gi tr s (Integer, Single,). Bc nhy c th l m hoc dng. Nu bc nhy l s m th im u phi ln hn im cui, nu khng khi lnh s khng c thi hnh. Khi Step khng c ch ra, VB s dng bc nhy mc nh l mt. V d: on lnh sau y s hin th cc kiu ch hin c ca my bn.
Private Sub Dim i Form_Click( ) As Integer

Trang 26

Visual Basic For Next Sub i = 0 To Screen.FontCount MsgBox Screen.Fonts(I)

End

V d: Tnh N! o Bc 1: Thit k chng trnh c giao din:

TextBox: Name:txtNum

Label: Name: lblKQ

o Bc 2: S kin Command1_Click c x l:
Private Sub Command1_Click() Dim i As Integer, n As Integer, Kq As Long n = Val(txtNum.Text) Kq = 1 For i = 1 To n Kq = Kq * i Next lblKQ.Caption = Str(Kq) End Sub

o Lu d n v chy chng trnh ta c kt qu nh hnh di:

For Each ... Next Tng t vng lp For ... Next, nhng n lp khi lnh theo s phn t ca mt tp cc i tng hay mt mng thay v theo s ln lp xc nh. Vng lp ny tin li khi ta khng bit chnh xc bao nhiu phn t trong tp hp. For Each <phn t> In <nhm> <khi lnh> Next <phn t> Lu : - Phn t trong tp hp ch c th l bin Variant, bin Object, hoc mt i tng trong Object Browser. - Phn t trong mng ch c th l bin Variant. Trang 27

Visual Basic

- Khng dng For Each ... Next vi mng cha kiu t nh ngha v Variant khng cha kiu t nh ngha.

VI. Chng trnh con


VI.1. Khi nim
Trong nhng chng trnh ln, c th c nhng on chng trnh vit lp i lp li nhiu ln, trnh rm r v mt thi gian khi vit chng trnh ngi ta thng phn chia chng trnh thnh nhiu module, mi module gii quyt mt cng vic no . Cc module nh vy gi l cc chng trnh con. Mt tin li khc ca vic s dng chng trnh con l ta c th d dng kim tra xc nh tnh ng n ca n trc khi rp ni vo chng trnh chnh v do vic xc nh sai st tin hnh hiu nh trong chng trnh chnh s thun li hn. Trong Visual Basic, chng trnh con c hai dng l hm (Function) v th tc (Sub). Hm khc th tc ch hm tr v cho lnh gi mt gi tr thng qua tn ca n cn th tc th khng. Do vy ta ch dng hm khi v ch khi tho mn ng thi cc yu cu sau y: o Ta mun nhn li mt kt qu (ch mt m thi) khi gi chng trnh con. o Ta cn dng tn chng trnh con (c cha kt qu) vit trong cc biu thc. Nu khng tha mn hai iu kin y th dng th tc.

VI.2. Th tc
a. Khi nim: Th tc l mt chng trnh con thc hin mt hay mt s tc v no . Th tc c th c hay khng c tham s. b. Khai bo th tc [Private | Public] [Static] Sub <tn th tc> [(<tham s>[As <Kiu tham s>])] <Cc dng lnh> hay <Cc khai bo> End Sub Trong : - <Tn th tc>: y l mt tn c t ging quy tc tn bin, hng, - <tham s>[: <Kiu tham s>]: c th c hay khng? Nu c nhiu tham s th mi tham s phn cch nhau du phy. Nu khng xc nh kiu tham s th tham s c kiu Variant. gi th tc thc thi, ta c 2 cch: o <Tn th tc> [<Cc tham s thc t>] o Call <Tn th tc> ([<Cc tham s thc t>])

Trang 28

Visual Basic

V d: Thit k chng trnh kim tra xem s nguyn N c phi l s nguyn t hay khng? o Bc 1: Thit k chng trnh c giao din

TextBox: Name:txtNum

o Bc 2: Vit th tc KtraNgTo trong phn m lnh ca Form


Sub KTraNgTo(N As Integer) Dim i As Integer i = 2 Do While (i <= Sqr(N)) And (N Mod i <> 0) i = i + 1 Loop If (i > Sqr(N)) And (N <> 1) Then MsgBox Str(N) & " la so nguyen to" Else MsgBox Str(N) & " khong la so nguyen to" End If End Sub

o Bc 3: X l s kin Command1_Click; trong th tc x l s kin ny ta c gi th tc KtraNgTo nh sau:


Private Sub Command1_Click() KTraNgTo Val(txtNum.Text) Call KtraNgTo(Val(txtNum.Text)) End Sub

o Bc 4: Lu d n v chy chng trnh. Ta c kt qu sau:

Trong v d trn thay v gi th tc bng li gi:


KTraNgTo Val(txtNum.Text)

Ta c th s dng cch khc:


Call KtraNgTo(Val(txtNum.Text))

Trang 29

Visual Basic

VI.3. Hm
a. Khi nim Hm (Function) l mt chng trnh con c nhim v tnh ton v cho ta mt kt qu. Kt qu ny c tr v trong tn hm cho li gi n. b. Khai bo hm [Private | Public | Static] Function <Tn hm> [(<tham s>[As <Kiu tham s>])] _ [As <KIU D LIU>] <Cc dng lnh> hay <Cc khai bo> End Function Trong : - <Tn hm>: y l mt tn c t ging quy tc tn bin, hng, - <tham s>[: <Kiu tham s>]: c th c hay khng? Nu c nhiu tham s th mi tham s phn cch nhau du phy. Nu khng xc nh kiu tham s th tham s c kiu Variant. - <KIU D LIU>: Kt qu tr v ca hm, trong trng hp khng khai bo As <kiu d liu>, mc nh, VB hiu kiu tr v kiu Variant. Khi gi hm thc thi ta nhn c mt kt qu. Cn ch khi gi hm thc thi ta nhn c mt kt qu c kiu chnh l kiu tr v ca hm (hay l kiu Variant nu ta khng ch r kiu tr v trong nh ngha hm). Do li gi hm phi l thnh phn ca mt biu thc. C php gi hm thc thi: <Tn hm>[(tham s)]. V d: Tnh N! o Bc 1: Thit k chng trnh c giao din: TextBox: Name:txtNum

Label: Name: lblKQ

o Bc 2: Thm mt hm vo ca s m lnh ca Form Function Giaithua(N As Integer) As Long Dim i As Integer, Kq As Long Kq = 1 For i = 1 To n Kq = Kq * i Next Giaithua = Kq End Function Private Sub Command1_Click()

Trang 30

Visual Basic Dim n As Integer n = Val(txtNum.Text) lblKQ.Caption = Str(Giaithua(n)) End Sub

Lu d n v chy chng trnh ta c kt qu nh hnh di:

Lu : Do khi gi hm ta nhn c mt kt qu nn bn trong phn nh ngha hm, trc khi kt thc ta phi gn kt qu tr v ca hm thng qua tn hm (trong v d trn l dng lnh Giaithua = Kq)

VII. Truy xut d liu trong Visual Basic


VII.1. Cc khi nim
o Module: - Mt ng dng n gin c th ch c mt biu mu, lc tt c m lnh ca ng dng c t trong ca s m lnh ca biu mu (gi l Form Module). Khi ng dng c pht trin ln ln, chng ta c th c thm mt s biu mu na v lc ny kh nng lp i lp li nhiu ln ca mt on m lnh trong nhiu biu mu khc nhau l rt ln. - trnh vic lp i lp li trn, ta to ra mt Module ring r cha cc chng trnh con c dng chung. Visual Basic cho php 3 loi Module: Module biu mu (Form module): i km vi mi mt biu mu l mt module ca biu mu cha m lnh ca biu mu ny. Vi mi iu khin trn biu mu, module biu mu cha cc chng trnh con v chng sn sng c thc thi p ng li cc s kin m ngi s dng ng dng tc ng trn iu khin. Module biu mu c lu trong my tnh di dng cc tp tin c ui l *.frm. Module chun (Standard module): M lnh khng thuc v bt c mt biu mu hay mt iu khin no s c t trong mt module c bit gi l module chun (c lu vi ui *.bas). Cc chng trnh con c lp i lp li p ng cc s kin khc nhau ca cc iu khin khc nhau thng c t trong module chun. Module lp (Class module): c s dng to cc iu khin c gi thc thi trong mt ng dng c th. Mt module chun ch cha m lnh nhng module lp cha c m lnh v d liu, chng c th c coi l cc iu khin do ngi lp trnh to ra (c lu vi ui *.cls). Trang 31

Visual Basic

o Phm vi (scope): xc nh s lng chng trnh c th truy xut mt bin. Mt bin s thuc mt trong 3 loi phm vi: Phm vi bin cc b. Phm vi bin module. Phm vi bin ton cc.

VII.2. Bin ton cc o Khi nim: Bin ton cc l bin c phm vi hot ng trong ton b ng dng. o Khai bo:
Global <Tn bin> [As <Kiu d liu>]

VII.3. Bin cc b
chng c nh ngha. o Khai bo: Dim <Tn bin> [As <Kiu d liu>] o Lu : Bin cc b c nh ngha bng t kha Dim s kt thc ngay khi vic thi hnh th tc kt thc.

o Khi nim: Bin cc b l bin ch c hiu lc trong nhng chng trnh m

VII.4. Bin Module


o Khi nim: Bin Module l bin c nh ngha trong phn khai bo (General|Declaration) ca Module v mc nhin phm vi hot ng ca n l ton b Module y. o Khai bo: - Bin Module c khai bo bng t kha Dim hay Private & t trong phn khai bo ca Module. V d:
Private Num As Integer

- Tuy nhin, cc bin Module ny c th c s dng bi cc chng trnh con trong cc Module khc. Mun th chng phi c khai bo l Public trong phn Khai bo (General|Declaration) ca Module. V d:
Public Num As Integer

Lu : Khng th khai bo bin vi t kha l Public trong chng trnh con.

VII.5. Truyn tham s cho chng trnh con


o Khi nim Mt chng trnh con i lc cn thm mt vi thng tin v trng thi ca on m lnh m n nh ngha thc thi. Nhng thng tin ny l cc bin c truyn vo khi gi chng trnh con, cc bin ny gi l tham s ca chng trnh con. Trang 32

Visual Basic

C hai cch truyn tham s cho chng trnh con: Truyn bng gi tr & truyn bng a ch. o Truyn tham s bng gi tr Vi cch truyn tham s theo cch ny, mi khi mt tham s c truyn vo, mt bn sao ca bin c to ra. Nu chng trnh con c thay i gi tr, nhng thay i ny ch tc ng ln bn sao ca bin. Trong VB, t kha ByVal c dng xc nh tham s c truyn bng gi tr. V d:
Sub Twice (ByVal Num As Integer) Num = Num * 2 Print Num End Sub Private Sub Form_Click() Dim A As Integer A = 4 Print A Twice A Print A End Sub

Kt qu thc hin ca on chng trnh trn: 4 8 4 o Truyn tham s bng a ch Truyn tham s theo a ch cho php chng trnh con truy cp vo gi tr gc ca bin trong b nh. V th, gi tr ca bin c th s b thay i bi on m lnh trong chng trnh con. Mc nhin, trong VB6 cc tham s c truyn theo a ch; tuy nhin ta c th ch nh mt cch tng minh nh vo t kha ByRef. V d:
Sub Twice (Num As Integer) Num = Num * 2 Print Num End Sub Private Sub Form_Click() Dim A As Integer A = 4 Print A Twice A Print A End Sub

Kt qu thc hin ca on chng trnh trn: 4 8 Trang 33

Visual Basic

VIII. By li trong Visual Basic


Cc thao tc by cc li thc thi ca chng trnh l cn thit i vi cc ngn ng lp trnh. Ngi lp trnh kh kim sot ht cc tnh hung c th gy ra li. Chng hn ngi ta kh c th kim tra cht ch vic ngi dng ang chp d liu t a mm (hay CD) khi chng khng c trong a. Nu c cc thao tc by li y th tin cho ngi lp trnh rt nhiu. Visual Basic cng cung cp cho ta mt s cu trc by cc li ang thc thi. C php: Dng 1: On Error GoTo <Tn nhn> <Cc cu lnh c th gy ra li> <Tn nhn>: <Cc cu lnh x l li> ngha: - <Tn nhn>: l mt tn c t theo quy tc ca mt danh biu. - Nu mt lnh trong <Cc cu lnh c th gy ra li> th khi chng trnh thc thi n cu lnh , chng trnh s t ng nhy n on chng trnh nh ngha bn di <Tn nhn> thc thi. Dng 2: On Error Resume Next <Cc cu lnh c th gy ra li> ngha: - Nu mt lnh trong <Cc cu lnh c th gy ra li> th khi chng trnh thc thi n cu lnh , chng trnh s t ng b qua cu lnh b li v thc thi cu lnh k tip.

Trang 34

Visual Basic

CHNG 4

CC KIU D LIU C CU TRC

Mc tiu: Chng ny gii thiu v cc cu trc d liu trong VB. Vic nm bt c cc vn ny gip cho vic t chc d liu khi vit chng trnh VB c hp l hn. Hc xong chng ny, sinh vin phi nm bt c cc vn sau: - S dng kiu d liu chui. - S dng kiu ngy thng. - Kiu ng (Variant) - Kiu mng Kin thc c lin quan: - Cc cu trc lp trnh trong VB. Ti liu tham kho: http://www.vovisoft.com/VisualBasic/VB6Chapter5.htm http://www.vovisoft.com/VisualBasic/VB6Chapter6.htm

Trang 35

Visual Basic

I. Kiu chui k t (String)


I.1. Khai bo
C hai c t chui k t theo c php nh sau: - String * <Chiu di> Ch ra mt chui k t c di c nh l bao nhiu k t. Trong trng hp gi tr thc ca chui c di ngn hn di khai bo th di ca chui th mt s khong trng c thm vo cho di thc. Trong trng hp gi tr thc ca chui c di ln hn di khai bo th s ct bt cc k t d tha bn phi. Mt chui khng c k t no ( di bng 0) gi l chui rng. - String: Khi khng ch ra chiu di ti a ca chui th mc nhin chui c chiu di ti a l 65.500 k t. V d: Dim Name As String * 30, Class As String * 10 Dim A As String

I.2. Cc hm x l chui
o Ghp chui: cho php ghp 2 hay nhiu chui li vi nhau nh php ton &. V d:
Dim FirstWord As String, SecondWord As String Dim Greeting As String FirstWord = "Hello" SecondWord = "World" Greeting = FirstWord & SecondWord ' Greeting by gi l "HelloWorld"

o Len: tr v chiu di mt chui c ch nh. V d:


Greeting = "Hi John!" Dim iLen As Integer iLen = Len(Greeting) ' iLen by gi bng 8

o Left: Trch chui con t phn u chui gc Left (String, [length]). o Right: Trch chui con t phn ui chui gc Right (String, [length]) o Mid: Trch chui con t gia chui gc
Mid(String, Start As Long, [length])

V d 1:
Dim Today As String, StrDay As String, StrMonth As String Dim StrYear As String, StrMonthYear As String Today = "24/05/2001" ' Ly ra 2 k t t bn tri ca chui Today StrDay = Left(Today,2) ' StrDay by gi bng "24" ' Ly ra 4 k t t bn phi ca String Today StrYear = Right(Today,4) ' StrYear by gi bng "2001" ' Ly ra 2 characters bt u t k t th t ca chui Today, k t u tin t bn tri l th nht StrMonth = Mid(Today,4,2) ' StrMonth by gi bng "05"

Trang 36

Visual Basic
' Ly ra phn cn li bt u t k t 4 ca chui Today StrMonthYear = Mid(Today,4) ' StrMonthYear bng 05/2001"

V d 2:
Today = "24/05/2001" ' Thay th character th 3 ca Today bng Mid(Today,3,1) = "-" ' Thay th 2 k t bt u t k t 4 ca Mid(Today,4,2) = "10" ' Thay th character th 6 ca Today bng Mid(Today,6,1) = "-" ' Today by gi bng "-" Today bng "10" "-" "24-10-2001"

o InStr: Tm chui con trong chui gc. Nu hm InStr tr v 0, ngha l khng tm thy. C php: InStr([start,] string1, string2 [, compare]) Trong : - Start: Xc nh v tr trong chui bt u vic tm kim. Nu gi tr l Null th s bt u t u chui. Nu nh tham s Compare c c t th bt buc phi khai bo tham s Start. - String1: Biu thc chui so snh. - String2: Chui cn tm. - Compare: Xc nh kiu so snh chui. Gi tr: vbTextCompare, vbBinaryCompare. V d 1:
Dim myString As String, Position As Integer myString = "The *rain in Spain mainly..." Position = Instr(myString,"*") ' Position s l 5

Nu trong myString khng c du "*" th Position s bng 0 V d 2:


Dim KeyValuePair As String, Key As String Dim Value As String KeyValuePair = "BeatlesSong=Yesterday" Pos = Instr(KeyValuePair, "=") Key = Left(KeyValuePair, Pos-1) Value = Mid(KeyValuePair, Pos+1)

o Replace: tm v thay th chui. C php:


Replace(Expression, find, replace[, start[, count[, compare]]])

Trong : - Expression: Biu thc chui cha chui cn thay th. - find:Chui cn tm. - replace: Chui thay th chui tm c. - start: Tng t nh hm InStr. - count: Xc nh s ln thay th. Mc nh l 1. - compare: Tng t nh hm InStr. o LTrim (RTrim): ct tt c cc khong trng bn tri (bn phi ca chui) LTrim(string) C php:
RTrim(string)

Trang 37

Visual Basic

o UCase: i chui sang chui gm cc k t l ch hoa. C php: UCase(string) o Asc: cho m Ascii ca mt k t. o Chr: tr v k t ng vi m Ascii c ch nh.
Dim ASCIINumberA As Integer, CharB As String * 1 Dim StrFive As String * 1 ASCIINumberA = Asc("A") ' ASCIINumberA by gi bng 65 CharB = Chr(66) StrFive = Chr(Asc("0") + 5) ' ta c digit "5"

o InstrRev: tng t nh InStr nhng vic tm kim c tin hnh t phi sang. o Val: Hm i chui sang s. o Str: Hm i s sang chui.

II. Kiu ngy thng (Date)


- L kiu m cc bin ca n cha gi tr ngy thng. - cho VB bit d liu l kiu Date ta cn t gia hai du # (hoc cp ). V d:
Dim D As Date D = #01/02/98# Hay 01/02/98

Hnh IV 1 Hp thoi xc lp
- Hm Now: tr v ngy gi hin ti. V d: Dng hm Now & Format:

Nu hiu theo kiu ngi M, y l ngy 2 thng ging nm 1998, cn nu theo kiu Anh th y l ngy 1 thng hai nm 1998. Tuy nhin, nh dng ngy thng hin th ph thuc vo quy nh ca Windows. - Hp thoi hnh IV.1 hin th khi ta chn Regional Setting trong ca s Control Panel ca Windows, n cho php quy nh kiu ngy thng ty thuc cch m ngi dng quy nh. VB x l ngy thng theo kiu M, nhng nu my hin th theo kiu Anh th n vn hin th theo kiu Anh.

MsgBox "NOW IS " & Format (Now, "ddd dd-mmm-yyyy hh:nn:ss") ' s hin th

NOW IS Tue 05-Oct-2004 16:15:53

Trang 38

Visual Basic

III. Cc loi s
o chuyn i mt chui ra s ta c cc hm Val, CInt, CSng. Ngc li chuyn i t s sang chui ta dng CStr, Str. V d:
Dollars = "500" ExchangeRatePerDollar = "7000" tempValue= Val(Dollars) * Val(ExchangeRatePerDollar) VNDong = CStr(tempValue) MsgBox "Amount in VN Dong is " & VNDong

V d:
Dollars = "500.0" ExchangeRatePerDollar = "7000.0" 'Dng hm CSng i chui ra Single tempValue = CSng(Dollars) * CSng(ExchangeRatePerDollar) 'Dng hm Format c cc du phy ngn v triu v phi c 2 ch s sau du chm thp phn. VNDong = Format (tempValue, "#,###,###.00") MsgBox "Amount in VN Dong is " & VNDong

o Round: b bt mt s ch s sau du chm thp phn V d: Round ( 12.3456789, 4 ) ch gi li 4 con s sau du chm thp phn v cho ta 12.3457

IV.Kiu Object
Bin kiu Object cha mt a ch 4 Byte tr n i tng trong ng dng hin hnh hoc cc ng dng khc. Dng lnh Set ch ra i tng c th.
Dim Set ObjDb ObjDb As Object = OpenDatabase("d:\tqdinh\thu.mdb")

Khi khai bo bin i tng, ta nn ch ra tn lp tng minh, chng hn nh TextBox thay v Control, ng dng ca ta s chy nhanh hn. Ta c th xem danh sch cc lp c sn trong ca s Object Browser.

V. Kiu Variant
Bin kiu Variant c th cha mi kiu d liu k c kiu mng, kiu do ngi dng nh ngha nhng ngoi tr kiu chui c di c nh . Bin kiu Variant c th nhn cc gi tr c bit nh Empty, Nothing, Error, Null. Ta c th xc nh kiu d liu ca bin Variant bng cc s dng hm VarType hoc hm TypeName. Hm VarType dng kim tra kiu d liu

Hng vbEmpty vbNull vbInteger

Gi tr Din gii Khng cha g c 0 1 D liu khng hp l 2 D liu kiu Integer chun Trang 39

Visual Basic

vbLong vbSingle vbDouble vbCurrency vbDate vbString vbObject vbError vbBoolean vbVariant vbDataObject vbDecimal vbByte vbUserDefinedType vbArray

3 4 5 6 7 8 9 10 11 12 13 14 17 36 8192

D liu kiu Long Integer D liu kiu du chm ng Single D liu kiu du chm ng Double Kiu Currency Kiu Date Kiu String Kiu Object C mt i tng li Kiu gi tr Boolean chun Kiu Variant Kiu DAO chun (data access object) Gi tr thuc h thp phn Kiu Byte Kiu do ngi dng nh ngha Kiu mng

Mt s ch khi dng bin kiu Variant: - Nu mun thi hnh cc hm ton hc, Variant phi cha gi tr kiu s. - Nu mun ni chui, dng ton t & thay v ton t +. Gi tr Empty: - y l gi tr c bit xut hin khi mt bin cha c gn tr. Ta dng hm IsEmpty kim tra gi tr Empty. - Gi tr Empty bin mt khi c mt gi tr bt k c gn cho bin Variant, tr v gi tr Empty, ta gn t kho Empty cho bin Variant. Gi tr Null: Bin Variant cha gi tr Null trong trng hp nhng ng dng c s d liu th hin khng c d liu hoc d liu khng xc nh. Gi tr Error: Trong mt bin kiu Variant, Error l mt gi tr c bit cho bit c mt li xy ra bn trong th tc. V d:
Private Sub cmdShowDataTypes_Click() Dim sMess As String Dim vVariant As Variant vVariant = "Xin chao" 'String sMess = VarType(vVariant) & vbCrLf ' xung dng & v u dng vVariant = 25 ' Integer sMess = sMess & VarType(vVariant) & vbCrLf vVariant = True ' Boolean sMess = sMess & VarType(vVariant) & vbCrLf 'Date vVariant = #1/1/2001# 'trong cp du # sMess = sMess & VarType(vVariant) MsgBox sMess End Sub

Khi chy chng trnh kt qu l:

Trang 40

Visual Basic

VI. Kiu Mng


VI.1. Khi nim
- Mng l tp hp cc phn t c cng mt kiu. - Dng mng s lm cho chng trnh n gin v gn hn v ta c th s dng vng lp. Mng s c bin trn v bin di, trong cc thnh phn ca mng l lin tip trong khong gia hai bin ny. - C hai loi bin mng: mng c chiu di c nh v mng c chiu di thay i lc thi hnh.

VI.2. Khai bo
o Mng c chiu di c nh: Dim <Tn bin mng>(<Kch thc>) [As <Kiu>] Lc ny phn t u tin c ch s l 0 & phn t cui cng c ch s l <Kch thc>. Dim <Tn bin mng>(<Ch s u> To <Ch s cui>) [As <Kiu>] V d: ' Khai bo mt bin mng 15 phn t kiu Integer
Dim Counters(14)As Integer

' Khai bo mt bin mng 21 phn t kiu Double


Public Sums(20)As Double

' Khai bo mt bin mng 10 phn t kiu chui k t


Dim List (1 To 10) As String * 12

- Hm UBound tr v bin trn ca mt mng. Trang 41

Visual Basic

- Hm LBound tr v bin di ca mt mng. V d: UBound(List) s tr v gi tr l 10. LBound(List) s tr v gi tr l 1. Lu : ta c th khai bo mt mng nhiu chiu nh sau
Dim Multi3D (3, 1 To 10, 9) As Double

Khai bo ny to ra mt mng 3 chiu vi kch thc 4 x 10 x 10.

o Mng ng: - y l mng c kch thc thay i, l mt trong nhng u im ca mng ng v n gip ta tit kim ti nguyn h thng. Ta c th s dng mt mng c kch thc ln trong mt thi gian no ri xo b tr li vng nh cho h thng. - Khai bo mt mng ng bng cch cho n mt danh sch khng theo chiu no c. C php: Dim <Tn mng> () [As <Kiu>] V d:
Dim DynArray() As Integer

Sau ta c th cp pht s phn t tht s bng lnh ReDim. ReDim <Tn mng>(N) ' Trong N l mt biu thc kiu Integer. ReDim dng xc nh hay thay i kch thc ca mt mng ng. Ta c th dng ReDim thay i s phn t, s chiu ca mt mng nhiu ln nhng khng th thay i kiu d liu ca mng ngoi tr kiu mng l kiu Variant. Mi ln gi ReDim tt c cc gi tr cha trong mng s b mt. VB khi to li gi tr cho chng (Empty i vi mng Variant, 0 cho mng kiu s, chui rng cho mng chui hoc Nothing cho mng cc i tng). Nhng i khi ta mun tng kch c ca mng nhng khng mun lm mt d liu, ta dng ReDim i km vi t kho Preserve. Ta xem v d di y:
ReDim Preserve DynArray (UBound(DynArray) +10)

Tuy nhin ch c bin trn ca chiu cui cng trong mng c thay i khi ta dng Preserve. Nu ta c tnh thay i chiu khc hoc bin di th VB s bo li.

VI.3. Mt s thao tc trn mng


o Truy xut tng phn t trong mng: <Tn mng>(<V tr>) o Sao chp mng: i vi VB6, ta c th gn mt mng cho mt mng khc, hoc kt qu tr v ca mt hm c th l mt mng. V d:
ByteCopy (old () As New = old End Sub Sub Byte, New () As Byte)

Tuy nhin, cch ny cng ch p dng c cho mng khai bo ng m thi. Khi gn bin, c mt s quy lut m ta cn lu : l quy lut v kiu d liu v quy lut v kch thc v s chiu ca mng. Trang 42

Visual Basic

Li khi gn mng c th xy ra lc bin dch hoc khi thi hnh. Ta c th thm by li m bo rng hai mng l tng thch trc khi gn. o Mng l kt qu tr v ca hm. Chng hn nh:
Public Function ArrayFunction (b As Byte) As Byte() Dim x(2) As Byte x(0) = b x(1) = b + 2 x(2) = b + b ArrayFunction = x End Function

Khi gi hm tr v mng, bin gi gi tr tr v phi l mt mng v c kiu nh kiu ca hm, nu khng n s bo li "khng tng thch kiu".

VII. Kiu do ngi dng nh ngha - Kiu mu tin


C php: Type <tn kiu> <Tn trng 1> : <Kiu trng 1> <Tn trng 2> : <Kiu trng 2> : <Tn trng n> : <Kiu trng n> End Type V d:
Type TEmployee Fullname As String Salary As Single Age As Integer Type

End

Chng ta va nh ngha mt kiu d liu mi c tn l TEmployee. Kiu ny c nt tng t nh mt lp. V mt chc nng, c hai l nh nhau, nhng mt lp c th cha trong DLL v sn sng cho vic dng chung vi cc ng dng khc, trong khi kiu d liu do ngi dng nh ngha phi c khai bo li trong tng d n. Do vy, kiu lp c nhiu mt tin li hn. Cch truy xut tng trng ca kiu mu tin: <Tn bin mu tin>.<Tn trng> V d: Gi s ta c khai bo bin sau:
Dim e As TEmployee

Ta c th gn:
e.Fullname = Nguyen Van An e.Salary = 300000.00 e.Age = 26

Cu lnh With: - c s dng vit gn hn khi thao tc vi d liu kiu mu tin. - C php: With <Tn bin mu tin> Trang 43

Visual Basic

[ Truy xut n tng trng ca mu tin theo dng: .<Tn trng> ] End With V d: Dim e As TEmployee Ta c th gn:
With e .Fullname = Nguyen Van An .Salary = 300000.00 .Age = 26 End With

Trang 44

Visual Basic

CHNG 5

THIT K BIU MU DNG CC IU KHIN

Mc tiu: Chng ny gii thiu v cc iu khin dng trong vic to giao din cho cc ng dng chy trn Windows. Vic nm bt c cc vn ny lm cho cng vic to giao din cho ng dng c nhanh chng. Hc xong chng ny, sinh vin phi nm bt c cc vn sau:
- S dng cc iu khin hp danh sch, hp la chn lu cc danh sch. - S dng cc iu khin hp nh du, nt la chn nhn/hin th d liu dng Yes/No. - S dng cc iu khin hp hnh nh, iu khin nh hin th nh. - S dng iu khin thanh cun nhn/hin th d liu s. - S dng iu khin thi gian p ng s tri i ca thi gian.

- Mt s iu khin khc. Kin thc c lin quan: - Cc cu trc lp trnh trong VB. - Cch thc x l s kin. Ti liu tham kho:
- Microsoft Visual Basic 6.0 v Lp trnh C s d liu - Chong 3, trang 29 - Nguyn Th Ngc Mai (ch bin), Nh xut bn Gio dc - 2000.

Trang 45

Visual Basic

I. Phn loi iu khin


C 3 nhm iu khin trong Visual Basic: Cc iu khin ni ti (Intrinsic control). Cc iu khin ni ti lun cha sn trong hp cng c (nhn, khung, nt lnh, khung nh...). Ta khng th g b cc iu khin ni ti ra khi hp cng c. Cc iu khin ActiveX tn ti trong cc tp tin c lp c phn m rng .OCX: l cc iu khin c th c trong mi phin bn ca VB hoc l cc iu khin ch hin din trong n bn Professional v Enterprise. Mt khc cn c rt nhiu iu khin ActiveX do nh cung cp th ba cung cp. Cc i tng chn c (Insertable Object): Cc i tng ny c th l Microsoft Equation 3.0 hoc bng tnh (Worksheet) ca Microsoft Excel... Mt vi i tng kiu ny cho php ta lp trnh vi cc i tng sinh ra t cc ng dng khc ngay trong ng dng VB.

II. S dng cc iu khin


II.1 iu khin danh sch cc la chn (List Box)
II.1.1. Khi nim: iu khin ny hin th mt danh sch cc mc m ngi dng c th chn la mt hoc nhiu mc Biu tng (Shortcut) trn hp cng c iu khin ny hin th mt danh sch cc mc m ngi dng c th chn la mt hoc nhiu mc Trang 46

Visual Basic

List Box gii thiu vi ngi dng mt danh sch cc la chn. Mt cch mc nh, cc la chn hin th theo chiu dc trn mt ct v bn c th thit lp l hin th theo nhiu ct. Nu s lng cc la chn nhiu v khng th hin th ht trong danh sch th mt thanh trt s t ng xut hin trn iu khin. Di y l mt v d v danh sch cc la chn n ct.

Hnh V.1: V d v List Box

II.1.2. Thuc tnh: o Name: y l tn ca danh sch la chn, c s dng nh mt nh danh. o MultiSelect: Thuc tnh ny cho php List Box c c php c nhiu la chn khi thc thi hay khng? o Sort: List Box c sp xp hay khng? o Ngoi ra cn c mt s thuc tnh thng dng khc nh: Font, Width, Height o ListIndex: V tr ca phn t c la chn trong List Box. o Select(<Index>): cho bit phn t th <Index> trong List Box c c chn hay khng? II.1.3. Phng thc: o AddItem: Thm mt phn t vo List Box. C php: <Name>.AddIem(Item As String, [Index]) Tham s Name Item Index Din gii Tn ca List Box. Biu thc chui ( mc) cn thm vo. Xc nh v tr mc mi c chn vo, gi tr 0 xc nh cho v tr u tin. Khi khng ch nh r Index th phn t thm vo l mc cui cng trong List Box mi.

Sau y l on m v d to mt List Box c tn List1 vi cc mc "Germany," "India," "France," v "USA" vo lc biu mu c np (Load).

Private Sub Form_Load ()

Trang 47

Visual Basic List1.AddItem List1.AddItem List1.AddItem List1.AddItem End Sub "Germany" "India" "France" "USA"

Ngi dng cng c th thm vo mt mc mi mt cch t ng vo bt k thi im no nhm p li tc ng t pha ngi s dng ng dng. Di y l hnh nh minh ha cho List Box tng ng vi on m trn.

Hnh V.2 List box hin th cc quc gia

Thm mt mc mi ti v tr xc nh: thc hin cng vic ny ta ch cn ch ra v tr cn xen mc mi vo. V d: List1.AddItem "Japan", 0 Thm mi mc ti thi im thit k: S dng thuc tnh List ca iu khin List Box, ta c th thm mi cc mc v dng t hp phm CTRL+ENTER bt u thm vo mc mi trn dng khc. Khi thm xong danh sch cc mc, ta c th sp xp li cc mc bng cch s dng thuc tnh Sorted v t gi tr ca thuc tnh ny l TRUE. o RemoveItem: Xa mt phn t ra khi List Box. C php: <Name>.RemoveItem Index Tham s Name v Index ging nh trng hp thm vo mt mc. o Clear: Xa tt c cc mc trong List Box. C php <Name>.Clear o Text: Nhn gi tr t List Box khi mt mc c chn. Chng hn on m sau y s cho bit dn s ca Canada khi ngi dng chn Canada t List Box.
Private Sub List1_Click () If List1.Text = "Canada" Then Text1.Text = "Canada has 24 million people." End If End Sub

Trang 48

Visual Basic

Chon

Hnh V.3 V d v List Box

o List: truy xut ni dung phn t bt k trong List Box. Thuc tnh ny cho php truy xut tt c cc mc ca iu khin List Box. Thuc tnh ny cha mt mng v mi mc l mt phn t ca mng. Mi mc c hin th di dng chui, tham chiu n mt mc trong danh sch, s dng c php sau: <Name>.List(Index) V d: Text1.Text = List1.List(2) II.1.4. S kin: o Click & Double Click: Xy ra khi ngi s dng nhp chut (hay nhp p) vo List Box. Thng thng ngi s dng s thit k mt nt lnh i km nhn v gi tr do ngi dng chn. Khi cng vic thc hin sau khi nt lnh c chn s ph thuc vo gi tr ngi dng chn t List Box. Double Click ln mt mc trong danh sch cng c kt qu tng t nh vic chn mt mc trong danh sch ri n ln nt lnh. thc hin cng vic nh trn trong s kin Double Click ca List Box ta s gi n s kin Click ca nt lnh.
Private Sub List1_DblClick () Command1_Click End Sub

Hoc ta c th thit t gi tr True cho thuc tnh Value ca nt lnh.


Private Sub List1_DblClick () Command1.Value = True End Sub

Trang 49

Visual Basic

II.2 iu khin hp la chn (Combo Box)


iu khin Combo Box c th c xem l tch hp gia hai iu khin Text Box v List Box. Ngi dng c th chn mt mc bng cch nh chui vn bn vo Combo Box hoc chn mt mc trong danh sch. im khc nhau c bn gia Combo Box v List Box l iu khin Combo ch gi (hay ngh) cc la chn trong khi iu khin List th gii hn cc mc nhp vo tc l ngi dng ch c th chn nhng mc c trong danh sch. iu khin Combo cha c nhp liu nn ngi dng c th a vo mt mc khng c sn trong danh sch. Biu tng short cut trn hp cng c: Cc dng ca iu khin Combo Box: C tt c 3 dng ca iu khin Combo Box. Ta c th chn dng ca Combo ti thi im thit k bng cch dng gi tr hoc hng chui ca VB. Kiu Drop-down Combo Box Simple Combo Box Drop-down List Box Gi tr 0 1 2 Hng VbComboDropDown VbComboSimple vbComboDropDownList

Drop-down combo box

Simple combo box

Drop-down list box

Hnh V.4: Cc dng combo box

- Drop-down Combo Box: y l dng mc nhin ca Combo. Ngi dng c th nhp vo trc tip hoc chn t danh sch cc mc. - Simple Combo Box: Ta c th hin th nhiu mc cng mt lc. hin th tt c cc mc, bn cn thit k Combo ln. Mt thanh trt s xut hin khi cn mc cha c hin th ht. dng ny, ngi dng vn c th nhp mt chui vo trc tip hoc chn t danh sch cc mc. - Drop down List Box: Dng ny rt ging nh mt List box. Mt im khc bit l cc mc s khng hin th n khi no ngi dng Click ln mi tn pha phi ca iu khin. im khc bit vi dng th 2 l ngi dng khng th nhp vo trc tip mt chui khng c trong danh sch. Cc thuc tnh cng nh cc phng thc p dng trn Combo Box ging nh trn List Box. Trang 50

Visual Basic

II.3 iu khin hp nh du (Check Box)


II.3.1. Khi nim: y l iu khin hin th du nu nh c chn v du b xo nu nh khng chn. Dng iu khin Check Box nhn thng tin t ngi dng theo dng Yes/No hoc True/False. Ta cng c th dng nhiu iu khin trong mt nhm hin th nhiu kh nng la chn trong khi ch c mt c chn. Khi Check Box c chn, n c gi tr 1 v ngc li c gi tr 0. Biu tng shortcut trn hp cng c II.3.2. Thuc tnh: o Name: thuc tnh tn. o Value: Gi tr hin thi trn Check Box. C th nhn cc gi tr: vbChecked, vbUnchecked, vbGrayed. II.3.3. S kin: o Click: Xy ra khi ngi s dng nhp chut trn Check Box. II.3.4. V d: Thit k chng trnh c giao din:

Hnh V.5 V d v Check Box

Hnh V.5 l hnh minh ha cch dng Check Box hin th chui di dng t m v nghing. Private Sub chkBold_Click () If ChkBold.Value = vbChecked Then ' If checked. txtDisplay.Font.Bold = True Else ' If not checked. txtDisplay.Font.Bold = False End If End Sub Private Sub chkItalic_Click () If ChkItalic.Value = vbChecked Then txtDisplay.Font.Italic = True Else If not checked. Trang 51 ' If checked.

Visual Basic

txtDisplay.Font.Italic = False End If End Sub

II.4 iu khin nt la chn (Option Button)


II.4.1. Khi nim: Cng dng ca iu khin Option button cng tng t nh iu khin Check Box. im khc nhau ch yu gia hai loi iu khin ny l: Cc Option Button ca cng mt nhm ti mi thi im ch c mt iu khin nht nh c chn. Biu tng Shortcut trn hp cng cu Cch s dng Option button cng tng t nh ca Check Box. To nhm Option Button Tt c cc Option button t trc tip trn biu mu (c ngha l khng thuc vo Frame hoc Picture Box) s c xem nh l mt nhm. Nu ngi dng mun to mt nhm cc Option button khc th bt buc phi t chng bn trong phm vi ca mt Frame hoc Picture box.

Hnh V.6 Nhm cc option button

II.4.2. Thuc tnh: o Name: thuc tnh tn ca iu khin Option Button. o Value: Gi tr hin thi trn Option Button. C th nhn cc gi tr: True &

False.

II.4.3. S kin: Click: Xy ra khi ngi s dng nhp chut trn Option Button.

II.5 iu khin thanh cun ngang (HScrollBar)


II.5.1. Khi nim: L iu khin c thanh trt cho php cun ngang v ngi dng c th s dng HScrollBar nh mt thit b nhp hoc mt thit b ch nh cho s lng hoc vn tc. V d ta thit k volume cho mt tr chi trn my tnh hoc din t c bao nhiu thi gian tri qua trong mt khong nh thi nht nh. Trang 52

Visual Basic

Biu tng Shortcut trn hp cng cu Khi ngi dng s dng Scroll Bar nh mt thit b ch nh s lng th ngi dng cn xc nh gi tr cho hai thuc tnh Max v Min a ra khong thay i thch hp. II.5.2. Thuc tnh: o Name: Tn ca thanh cun. o Min: L gi tr nh nht trn thanh cun. o Max:: Gi tr ln nht ca thanh cun. o Large change: Thuc tnh ny dng xc nh khong thay i khi ngi dng n chut ln Hscrollbar. o Small change: Thuc tnh ny dng xc nh khong thay i khi ngi dng n ln mi tn pha cui thanh cun. o Value: Thuc tnh ny tr v gi tr ti mt thi im ca thanh cun nm trong khong gi tr [Min, Max] m ngi dng xc nh. II.5.3. S kin: o Change: Xy ra mi khi HScrollBar thay i gi tr. o Scroll: Xy ra mi khi ta di chuyn con tr thanh cun. II.5.4. V d:

Hnh V.7 V d v Hscrollbar

Hnh V.7 minh ha vic s dng thanh cun thay i kch c ca Text h tn vi on m n gin nh sau:

Private Sub HScroll1_Change() Text1.FontSize = HScroll1.Value End Sub

Trang 53

Visual Basic

II.6 iu khin thanh cun ng (VScrollBar)


Biu tng shortcut trn hp cng cu Cc thuc tnh v cng dng ca VScrollBar cng tng t nh HScrollBar.

II.7 iu khin hp hnh nh (Picture Box)


II.7.1. Khi nim: iu khin Picture Box cho php ngi dng hin th hnh nh ln mt biu mu. Biu tng Shortcut trn hp cng c II.7.2. Thuc tnh: o Name: tn ca iu khin Picture Box. o Picture: y l thuc tnh cho php xc nh hnh nh no s c hin th bn trong Picture box. Bao gm tn tp tin hnh nh v c ng dn nu c. hin th hoc thay th mt hnh nh ti thi im chy chng trnh th ngi dng c th dng phng thc LoadPicture t li gi tr ca thuc tnh Picture vi c php nh trong v d di y:
picMain.Picture = LoadPicture("NEW.JPG")

o Autosize: Khi gi tr ca thuc tnh ny l TRUE th iu khin Picture box s t ng thay i kch thc cho ph hp vi hnh nh c hin th. Ta nn cn thn khi s dng thuc tnh ny v khi iu khin Picture Box thay i kch thc, n khng quan tm n v tr ca cc iu khin khc. II.7.3. S kin: chut. o Mouse Down: Xy ra khi ngi s dng chng trnh nhn gi phm o Mouse Move: Xy ra khi ngi s dng chng trnh di chuyn chut. o Mouse Up: Xy ra khi ngi s dng chng trnh th phm chut. II.7.4. V d:

Trang 54

Visual Basic

Private Sub Picture1_MouseMove(Button As Integer, Shift As _ Integer, X As Single, Y As Single) Picture1.Picture = LoadPicture("d:\quocdinh\new.jpg") End Sub

II.7.5. Lu : o iu khin Picture Box c th c dng nh mt vt cha cc iu khin khc (tng t nh mt Frame). o Ngoi ra ngi dng cng c th s dng Picture Box nh mt khung v hoc nh mt khung son tho v c th in c ni dung trn .

II.8 iu khin hnh nh (Image)


II.8.1. Khi nim: iu khin Image dng hin th mt hnh nh. Cc dng c th l Bitmap, Icon, Metafile, Jpeg, Gif. Tuy nhin khc vi iu khin Picture Box iu khin Image s dng ti nguyn h thng t v cng np nh nhanh hn; hn na s lng thuc tnh v phng thc p dng t hn iu khin Picture box. Biu tng Shortcut trn hp cng c II.8.2. Thuc tnh: o Name: tn ca iu khin Image. o Picture: y l thuc tnh cho php xc nh hnh nh no s c hin th bn trong iu khin Image. Bao gm tn tp tin hnh nh v c ng dn nu c. hin th hoc thay th mt hnh nh ti thi im chy chng trnh th ngi dng c th dng phng thc LoadPicture t li gi tr ca thuc tnh Picture vi c php nh trong v d di y: imgMain.Picture = LoadPicture("NEW.JPG") o Stretch: Khi gi tr ca thuc tnh ny l TRUE th iu khin Image s t ng thay i kch thc cho ph hp vi hnh nh c hin th. II.8.3. S kin: chut. o Mouse Down: Xy ra khi ngi s dng chng trnh nhn gi phm o Mouse Move: Xy ra khi ngi s dng chng trnh di chuyn chut. o Mouse Up: Xy ra khi ngi s dng chng trnh th phm chut. Trang 55

Visual Basic

II.9 iu khin hnh dng (Shape)


Biu tng Shortcut trn hp cng cu iu khin Shape dng v cc hnh dng nh: hnh ch nht, hnh vung, oval, hnh trn, hnh ch nht gc trn hoc hnh vung gc trn. Thuc tnh Shape cho php ngi dng chn 1 trong 6 dng nh nu trn. Sau y l bng gi tr ca thuc tnh ny Hnh dng Rectangle Square Oval Circle Rounded Rectangle Rounded Square 0 1 2 3 4 5 Gi tr Hng vbShapeRectangle vbShapeSquare vbShapeOval vbShapeCircle vbShapeRoundedRectangle vbShapeRoundedSquare

Hnh V.9 di y minh ha cho cc dng ca iu khin Shape

Hnh V.9: 6 dng ca iu khin Shape

Ngi dng c th s dng cc thuc tnh nh BorderColor, BorderStyle, BorderWidth xc nh mu, dng cng nh dy ca ng bin. Tng t vi cc thuc tnh FillColor, FillStyle xc nh mu v kiu t nn.

II.10 iu khin thi gian (Timer)


II.10.1. Khi nim: iu khin Timer p ng li s tri i ca thi gian. N c lp vi ngi s dng v ta c th lp trnh thc hin mt cng vic no c sau mt khong thi gian u nhau. Biu tng Shortcut trn hp cng cu Vic a mt iu khin Timer v trong mt biu mu cng tng t nh nhng iu khin khc. y, ta ch c th quan st c v tr ca iu khin Timer Trang 56

Visual Basic

ti giai on thit k, khi chy ng dng iu khin Timer coi nh khng c th hin trn biu mu. II.10.2. Thuc tnh: o Name: tn ca iu khin Timer. o Interval: y l thuc tnh ch r s ms gia hai s kin k tip nhau. Tr khi n b v hiu ha, mi iu khin Timer s lun nhn c mt s kin sau mt khong thi gian u nhau. Thuc tnh Interval nhn gi tr trong khong 0...64.767 ms c ngha l khong thi gian di nht gia hai s kin ch c th l khong mt pht (64.8 giy). o Enabled: nu gi tr l True ngha l iu khin Timer c kch hot v ngc li. II.10.3. S kin: o Timer: xy ra mi khi n thi gian mt s kin c thc hin (xc nh trong thuc tnh Interval). II.10.4. S dng iu khin Timer: o Khi to mt iu khin Timer: Nu lp trnh vin mun iu khin Timer hot ng ngay ti thi im biu mu cha n c np th t thuc tnh Enable l TRUE hoc c th dng mt s kin no t bn ngoi kch hot iu khin Timer. o Lp trnh p ng s kin tr v t iu khin Timer: Ta s a m lnh ca cng vic cn thc hin vo trong s kin Timer ca iu khin Timer. Sau y l v d khi to mt ng h s nh vo iu khin Timer.
Private Sub Timer1_Timer() If Label1.Caption <> CStr(Time) Then Label1.Caption = Time End If End Sub

Thuc tnh Interval c thit lp l 500 (tc 0.5 giy). iu khin Timer cn hu ch trong vic tnh ton thi gian cho mt cng vic no , n mt thi im no th ta s khi to mt cng vic mi hoc ngng mt cng vic khng cn cn na.

II.11 iu khin danh sch a (DriveListbox), danh sch th mc (DirListbox), danh sch tp tin (FileListbox)
II.11.1. Khi nim: o iu khin DriveListbox trnh by nhng a ca h thng v cho php ngi dng chn mt trong nhng a . Biu tng shortcut (DriveListbox) trn hp cng c o iu khin DirListbox cho php trnh by nhng th mc v ng dn ti thi im chy ng dng. S dng iu khin ny trnh by mt danh sch c th bc ca cc th mc, c ngha l ngi dng c th m mt ti liu t danh sch cc ti liu c sn. Trang 57

Visual Basic

Biu tng shortcut (DirListbox) trn hp cng c o iu khin FileListbox cho php trnh by nhng ti liu c sn trong th mc hin hnh. Bn c th dng thuc tnh Partten xc nh kiu tp tin no c hin th trong danh sch. Biu tng shortcut (FileListbox) trn hp cng cu Thng thng cc ng dng s s dng kt hp c ba loi iu khin trn l DriveListbox, DirListbox v FileListbox. II.11.2. V d: Cc thuc tnh c thit lp ti thi im thit k FileListbox: Partten = "*.doc" DriveListbox, DirListbox FileListbox: FontName = "Vncourier New". Tc l iu khin FileListbox ch hin th cc tp tin ca Microsoft Word. on m di y c vit trong s kin Load ca biu mu
Private Sub Form_Load() Dir1.Path = "c:\" File1.Path = "c:\" End Sub

Hnh V.10 : V d v cc iu khin a, th mc v tp tin

Trang 58

Visual Basic

on m trn cho php xc nh ng dn hin hnh ca iu khin DirListbox, FileListbox ti thi im np ng dng l "C:\". Khi chy ng dng ta c nh hnh V.10. Khi ta thay i a th cc th mc s thay i theo l nhng th mc a hin hnh, s thay i cng din ra tng t i vi danh sch cc tp tin. Cn ch rng i vi a mm v CD th cn thit phi c a mm hoc CD ti thi im chn a nu khng s xy ra li ti thi im chy ng dng.
Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub

Bn trn l nhng on m p ng li vic ngi dng chn vic thay i a v th mc. Trong danh sch cc tp tin ta ch hin th nhng file *.doc.

Trang 59

Visual Basic

CHNG 6: LP TRNH X L GIAO DIN & HA


Mc tiu: Chng ny gii thiu v cch to menu cng nh mt s hm x l ha, nhng thnh phn quan trng trong cc ng dng chy trn Windows. Hc xong chng ny, sinh vin phi nm bt c cc vn sau: - S dng menu trong thit k giao din. - S dng cc hp thoi trong thit k ng dng. - S dng cc phng thc ha cng vi cch x l mt s s kin to cc ng dng ha. Kin thc c lin quan: - Cc cu trc lp trnh trong VB. - Cch thc x l s kin. Ti liu tham kho: - Microsoft Visual Basic 6.0 v Lp trnh C s d liu - Chng 7, trang 99 - Nguyn Th Ngc Mai (ch bin), Nh xut bn Gio dc - 2000.

Trang 60

Visual Basic

I. Menu
I.1. Khi nim
Menu l mt loi iu khin trong ngi s dng c th la chn cc mc t mt danh sch cho trc. C 2 loi menu: - Menu th xung (Drop-Down Menu): l dng menu thng dng nht. - Menu bt ra (Pop-Up Menu): thng hin th khi ta n nt phi chut.

I.2. Cc thuc tnh ca Menu


Cc thuc tnh ca Menu khng cha trong ca s Properties m cha trong Menu Editor. - Caption: L chui hin th trn menu. - Name: Phi duy nht v d nh. y l tn nhn bit thnh phn no ca Menu c chn. - Shortcut: dng thit lp cc phm tt (Shortcut key). - WindowList: Dng trong cc ng dng MDI (Multipe Document Interface). y l ng dng c mt biu mu chnh v nhiu biu mu con. Thuc tnh ny ra lnh cho VB hin th tiu ca cc biu mu con trn menu. - Checked: Nu chn thuc tnh ny th s c mt du hin th bn cnh tri, nhng thuc tnh ny khng c p dng cho nhng mc menu c cha menu con. - Enabled: Nu thuc tnh ny khng c chn th mc ny s b xm i v ngi dng khng th chn. - Visible: Nu thuc tnh ny khng c chn th mc ny s khng c hin th. - NegotiatePosition: qun l v tr gn menu trong trng hp s dng cc i tng ActiveX.

I.3. Cc s kin
- Click: Xy ra khi ngi s dng chng trnh nhp chut vo mt mc no ca Menu.

I.4. Cch to Menu


Menu cng l mt loi iu khin, nhng Windows s kim sot vic v menu. Lp trnh vin ch qun l vic iu hnh cc s kin m thi.

Trang 61

Visual Basic

Hnh VI.1 Trnh son tho Menu


Menu khng cha trong hp cng c m c thit k t trnh son tho menu. Trong Visual Basic 6.0 IDE, chn Tools, ri Menu Editor m chng trnh ny. V d: To mt Drop-Down Menu. - To mt n mi. - n Ctrl-E m Menu Editor - Ta s to mt Menu File vi Menu con l Open v Save As. - Trc tin ta nhp vo &File trong Caption v nhp mt tn bt k vo Name (chng hn l mfile). K t & trc ch F cho bit ch F s l phm tt (n CtrlF) coi nh chn menu File. - Tip theo ta nhp &Open v &Save As. Open v Save As l Sub menu ca File, ta chn Open ri n mi tn sang tri. Tng t i vi Save As.

Hnh VI.2 V d to Popup Menu

Trang 62

Visual Basic

Tch nhm menu: Trong trng hp Menu c nhiu mc, ta s tch nhm Menu tin theo di. Chng hn ta thm vo Menu File mc Exit v tch ring ra vi Open v Save As. Ta s xen vo gia hai mc Save As v Exit mt mc mi c Caption l -. Ta c th theo di qua hnh VI.3.

Hnh VI.3 V d tch nhm cc


V d: To Pop-up menu - S dng li menu dng v d trc, nhng ta s tt thuc tnh Visible ca menu File. - Sau , m ca s Code ca ng dng, dng s kin MousUp, nhp vo on lnh sau:
Private Sub Form_MouseUp (Button As Integer, Shift As _ Integer, X As Single, Y As Single) If Button = vbRightButton Then PopupMenu mfile, vbPopupMenuLeftAlign End If End Sub

- Chy th ng dng, khi ta n chut phi, mt menu s bt ra. - Lnh PopupMenu cho bit tn menu cn bt ra, l tn m ta t trong trnh son tho MenuEditor, y l mfile. - K n, l tham s xc nh cch hin th menu: vbPopupMenuLeftAlign, vbPopupMenuRightAlign, vbPopupMenuCenterAlign. Sau khi thit k xong menu, ta s vit cc on m VB s thi hnh mt cng vic no tng ng vi mc c chn. Cng vic thi hnh s c vit bn trong s kin Click ca mc .

Trang 63

Visual Basic

II. Hp thoi
II.1. Khi nim
Hp thoi (Dialog Box) l mt trong nhng cch VB dng giao tip vi ngi dng. C 4 loi hp thoi:

- Hp thng ip (Message Box). - Hp nhp (Input Box). - Cc hp thoi thng dng (Common Dialog) - Hp thoi hiu chnh (Custom Dialog).

II.2. Hp thng ip
Hp thng ip cng c 2 loi: Loi ch xut thng bo, loi c tng tc vi ngi dng. II.2.1 Loi ch xut thng bo - Lc ny ta dng MsgBox nh l mt th tc. - C php: MsgBox Prompt, Button, Title. Trong : Prompt: Chui thng bo s hin th. Button: Cc nt nhn s c hin th trn hp thng bo. Title: Chui hin th trn thanh tiu ca hp thng bo. - V d:

Hnh VI 4 Hp thng ip
Chng hn ta xy dng mt biu mu dng hin th tn v im trung bnh cui nm ca mt hc sinh khi lp 12. Do gi tr im trung bnh cng nh h tn hc sinh l khng th thay i. Do khi ngi dng Click vo mt Text no , ta s xut thng bo rng gi tr ny khng th thay i. Trang 64

Visual Basic
Private Sub Text2_Click() MsgBox "Vous ne pouvez pas changer la value de ce champ!" End Sub

Sau khi xut thng bo, VB s i ta n vo nt OK hoc Enter. Sau VB s thi hnh dng lnh ngay sau dng lnh MsgBox. i khi dng thng bo qu di, VB s t ng ct a xung dng khc, tuy nhin c khi s khng nh mong mun ca lp trnh vin. Ta c th thc hin cng vic ny nh sau:
MsgBox This is a multi-line & chr$(10) & message

Ty theo thng s truyn vo MsgBox m c nhiu loi hp thoi thng ip khc nhau. Hng s vbOKOnly vbOKCancel vbAbortRetryIgnore vbYesNoCancel vbYesNo vbRetryCancel Gi tr 0 1 2 3 4 5 Din gii Ch hin th nt OK . Hin th 2 nt OK v Cancel. Hin th cc nt Abort, Retry, v Ignore. Hin th cc nt Yes, No, v Cancel. Hin th 2 nt Yes v No. Hin th 2 nt Retry v Cancel.

Cc loi biu tng trn hp cng c Hng s vbCritical vbQuestion vbExclamation vbInformation Din gii Dng cho nhng thng bo li tht bi khi thi hnh cng vic no . Dng cho nhng cu hi yu cu ngi dng chn la. Dng cho cc thng bo ca chng trnh. Dng cho cc thng bo cung cp thm thng tin.

II.2.2 Loi tng tc vi ngi dng Lc ny MsgBox c dng nh mt hm, khi mt nt no trn hp thng bo c n, VB s tr v gi tr ca nt n . C php:
MsgBox (Prompt, Button, Title) As Integer Hng s Gi tr Nt

vbOK vbCancel vbAbort vbRetry vbIgnore vbYes

1 2 3 4 5 6 Trang 65

OK Cancel Abort Retry Ignore Yes

Visual Basic

vbNo

No

Vi nhng thng ip quan trng, ta mong mun ngi dng phi chn la mt trong cc xut m ta a ra trc khi chuyn qua ng dng khc, ta s dng thng s vbSystemModal.

Trang 66

Visual Basic

II.3. Hp nhp
y l loi hp thng ip cho php nhn thng tin t pha ngi s dng. Tuy nhin trong cc ng dng, hp nhp rt t khi c dng do: - Ta khng c cch no kim tra thng tin do ngi dng nhp vo khi m Enter cha c n. - Thng tin c nhp l rt t. Sau y l mt v d v hp nhp:
Public Sub Main () Dim ReturnString As String ReturnString = InputBox(Nhap vao ten cua ban) End Sub

Gi tr tr v ca hp nhp lVI 5 chui.nhp tn Hnh mt Hp

II.4. Cc hp thoi thng dng


C 6 loi hp thoi thng dng: - M tp tin - Lu tp tin - Chn mu - Chn Font - In n - Tr gip Tuy c 6 loi, nhng khi thit k biu mu, ta ch thy mt cng c duy nht l CommonDialog. Mun a Common Dialog vo d n, ta chn: Project/Components/Controls/Microsoft Common Dialog Control 6.0. Sau , Common Dialog s xut hin trong hp cng c ToolBox. II.4.1 Hp thoi m v lu tp tin Hai hp thoi ny c chc nng v th hin nh nhau. C hai hp thoi u hin th danh sch cc tp tin, ngi dng c th duyt qua cc a tm cc tp tin. Chng ch khc nhau phn tiu v nt nhn. Cc thuc tnh quan trng: o Name: tn ca Common Dialog. o Filter: y l mt chui xc nh phn m rng ca tn cc tp tin m hp thoi c th m hay lu. Trang 67

Visual Basic

o FilterIndex: nu c nhiu phn m rng ca tn tp tin c m t trong thuc tnh Filter th thuc tnh ny xc nh mc nh loi tp tin no c chn (l mt s nguyn). o FileName: tr v tn tp tin sau khi ngi s dng hp thoi chn mt tp tin no . o CancelError: nu TRUE th tr v gi tr li khi ngi dng chn nt Cancel, mc nhin gi tr ny l False. Phng thc: o ShowOpen: m ra hp thoi m tp tin. o ShowSave: m ra hp thoi lu tp tin. V d:
Private Sub Form_Load() On Error GoTo ErrHandler dlgFile.Filter = "All Files (*.*)|*.*|Text Files & _ (*.txt)|*.txt|Batch Files (*.bat)|*.bat" dlgFile.FilterIndex = 2 dlgFile.ShowOpen Exit Sub ErrHandler: MsgBox Err.Description End Sub

v d trn, ta thit k mt hp thoi m tp tin, trong cc tp tin c hin th theo 3 nhm tp tin l: - All Files: (*.*) - Text Files: (*.txt) - Batch Files: (*.bat) Cc nhm tp tin c th hin trong thuc tnh Filter. Mi nhm tp tin cch nhau bi du phn cch |. Thuc tnh FilterIndex = 2 tc l khi hp thoi Open c m ln, th loi tp tin hin th mc nh l Text Files. Sau khi chn mt tp tin v nhn nt Open, ta s dng thuc tnh FileName nhn v tn tp tin chn. Khi ta chn thuc tnh CancelError l TRUE, th khi ngi dng n nt Cancel trn hp thoi, ta s nhn c mt li v s c cch x l li ny. Ta chn phng thc ShowOpen hin th hp thoi m tp tin.

Trang 68

Visual Basic

Hnh VI.6 Hp thoi m tp tin


Cc thuc tnh cng tng t i vi hp thoi lu tp tin, ta ch cn thay i tiu ca Dialog v dng phng thc ShowSave. Di y l minh ha cho hp thoi lu tp tin.

Hnh VI.7 Hp thoi lu tp tin

Trang 69

Visual Basic

II.4.2 Hp thoi chn mu y l hp thoi cho php ngi dng chn v hin th cc mu c sn trong bng mu ca Windows cng nh thit lp thm nhiu mu mi. Mt thuc tnh quan trng i vi hp thoi chn mu l thuc tnh Color, thuc tnh ny tr v gi tr ca mu c chn. Ta s dng phng thc ShowColor hin th hp thoi chn mu.

Hnh VI.8 Hp thoi chn mu


Trong mt s ng dng, ta s dng hp thoi chn mu thay i gi tr mu ca cc iu khin trong mt s trng hp no . V d thay i mu nn ca iu khin TextBox trong v d di y:

Trang 70

Visual Basic

Hnh VI.9 V d s dng hp thoi chn mu


Ta s thit k mt nt nhn nh bn cnh iu khin TextBox, nt nhn ny cho php ngi s dng chn mu nn ca TextBox. Ta c on m lnh sau:
Private Sub Command2_Click() On Error GoTo ErrHandler CommonDialog1.ShowColor Text1.BackColor = CommonDialog1.Color ErrHandler: CommonDialog1.ShowColor End Sub

Trc khi chy chng trnh cn xc nh thuc tnh CancelError = TRUE. II.4.3 Hp thoi chn Font ch Cho php ngi dng chn Font mn hnh, my in hay c hai. Khi dng hp thoi chn Font ta phi dng thuc tnh Flags quy nh loi Font no s c hin th.

Hnh VI.10 Hp thoi Font


Thuc tnh Color FontBold Gii thch Lu gi gi tr ca mu c chn TRUE nu ngi dng chn ch m (Bold) v FALSE nu Trang 71

Visual Basic

FontItalic FontStrikeThru FontUnderLine FontName Max Min FontSize

ngc li. TRUE nu ngi dng chn ch nghing (Italic) v FALSE nu ngc li. TRUE nu chn ch gch ngang cc k t. TRUE nu chn ch gch di Ty Kch c ln nht ca Font c hin th Kch c nh nht ca font c hin th Kch c ca Font c chn

Cc gi tr ca thuc tnh Flags: Hng cdlCFPrinterFonts cdlCFScreenFonts cdlCFBoth cdlCFScalableOnly Gi tr &H2 &H1 &H3 &H20000 Hiu qu Ch hin th font my in Ch hin th font mn hnh Ch hin th font mn hnh v font my in Hin th font t l nh l fonts TrueType

Nu mun chn mu cho Font, ta thm 256 vo gi tr ca thuc tnh Flags. Nu khng c iu ny, ta ch thy tn Font, kiu Font v kch c Font m thi. m hp thoi chn Font, ta s dng phng thc ShowFont. II.4.4 Hp thoi in n y l hp thoi cho php xc lp cc thng tin v my in chng hn nh bao nhiu d liu c in, my in s hot ng nh th no Hp thoi in n, n tr v 3 thuc tnh thng dng: Copies, FromPage v ToPage.

Hnh VI.11 Hp thoi in n

Thuc tnh Copies FromPage Max

Gii thch S bn in S th t ca trang bt u S bn in ti a cho php Trang 72

Visual Basic

Min PrinterDefault

ToPage

S bn in ti thiu cho php Nu gn thnh TRUE, mi thay i m ngi dng thc hin s c ghi li thnh cc thay i trn h thng v c nh hng n cc ng dng khc nu c s dng my in. S th t ca trang in cui cng

m hp thoi in n, ta s dng phng thc ShowPrinter.

III. X l cc s kin chut v bn phm


III.1 S kin chut
Biu mu hoc iu khin c th nhn bit s kin chut khi c con tr chut i ngang qua. C 3 s kin chut ch yu, l S kin MouseDown MouseUp MouseMove Gii thch Xy ra khi ngi s dng n chut (chut tri hoc phi) Xy ra khi ngi s dng th mt nt chut bt k Xy ra khi con tr chut di chuyn n mt im mi trn mn hnh.

Cc tham s Tham s Button Shift X, Y Gii thch Cho bit phm chut no c n Cho bit SHIFT hay CTRL hay ALT c n Xc nh v tr ca con tr chut i vi h ta ca iu khin

V d 1: S dng s kin MouseDown v cc on thng ni tip nhau mi khi ta dng chut chm mt im trn biu mu. Ta c th thc hin iu vi on m lnh x l s kin Form_MouseDown nh sau:
Private Sub Form_MouseDown(Button As Integer, & _ Shift As Integer, X As Single, Y As Single) Line -(X, Y) End Sub

Trang 73

Visual Basic

V d 2: S dng s kin MouseUp hin th mt thng ip cho bit nt chut no va c th. S kin Form_MouseUp c x l:
Private Sub Form_MouseUp (Button As Shift As Integer, X As Single, If Button = 1 Then Print Ban vua tha End If If Button = 2 Then Print Ban vua tha End If If Button = 4 Then Print Ban vua tha End If End Sub Integer, & _ Y As Single) phim chuot trai phim chuot phai phim chuot giua

V d 3: S dng s kin MouseMove v cc ng trn lin tc trn biu mu. S kin Form_MouseMove c x l:
Private Sub Form_MouseMove(Button As Integer, & _ Shift As Integer, X As Single, Y As Single) Circle (X, Y), 50 End Sub

Trang 74

Visual Basic

Hnh VI.13 V d v MouseMove


Vi v d 3 ta nhn thy rng: s kin MouseMove khng nht thit phi xy ra ng vi mi Pixel khi con tr chut i qua. Thc ra mi n v thi gian no , h iu hnh pht ra mt s thng ip. y, ta v ng trn ng vi s kin MouseMove, nu ngi dng di chuyn chut chm, th cc ng trn s c v st nhau v ngc li nu chut c di chuyn nhanh. Hiu chnh con tr chut Ta c th dng thuc tnh MousePointer hin th mt biu tng, con tr mn hnh hay con tr chut c hiu chnh. Di y l cc gi tr ca thuc tnh MousePointer:

Hng ccDefault ccArrow ccCross ccIbeam ccIcon ccSize ccSizeNESW ccSizeNS ccSizeNWSE ccSizeEW ccUpArrow ccHourglass ccNoDrop ccArrowHourglass ccArrowQuestion ccSizeAll

Gi tr 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Din gii (Default) Shape determined by the object. Arrow. Cross (cross-hair pointer). I Beam. Icon (small square within a square). Size (four-pointed arrow pointing north, south, east, and west). Size NE SW (double arrow pointing northeast and southwest). Size N S (double arrow pointing north and south). Size NW, SE. Size E W (double arrow pointing east and west). Up Arrow. Hourglass (wait). No Drop. Arrow and hourglass. Arrow and question mark. Size all. Trang 75

Visual Basic

ccCustom

99

Custom icon specified by the MouseIcon property.

III.2 S kin bn phm


Bn phm cng c 3 s kin, l s kin KeyPress (khi mt phm c m ASCII bt k c n), KeyDown (khi mt phm bt k c n), KeyUp (khi mt phm bt k c th) Ch c iu khin ang c Focus mi bt s kin bn phm. Cn i vi biu mu, n ch bt c s kin bn phm mi khi n c kch hot v khng c bt k iu khin no trn n c Focus. Tuy nhin ta c kh khc phc iu ny nu nh gn gi tr thuc tnh KeyPreview ca biu mu l True, biu mu s nhn mi s kin bn phm ca mi iu khin t trn n, iu ny hu ch khi ta mun thc hin cng mt cng vic no cho mt phm c n m khng quan tm rng Focus ang thuc iu khin no. Cc s kin KeyDown, KeyUp c th pht hin mt s tnh hung m s kin KeyPress khng pht hin: - Khi ngi dng bm mt t hp phm SHIFT, CTRL v ALT. - Phm nh hng. - PAGEUP v PAGEDOWN. - Phn bit c phm s bn phi bn phm v phm s bn tri bn phm. - p ng khi th phm. - Phm chc nng khng trng vi menu. Cc s kin bn phm l khng loi tr nhau. Tc l mt phm c n th c th l c hai s kin KeyPress v KeyDown cng c pht ra. Nhng nu l mt phm m KeyPress khng pht hin c th ch c KeyDown v KeyUp xy ra. Thuc tnh KeyPreview i khi ta mun tt c cc iu khin trn Form nhn c s kin KeyPress ch khng phi ch c iu khin ang nhn con tr (Focus), ta s phi s dng thuc tnh KeyPreview. Khi chng ta thit k mt Form, gi tr mc nh ca thuc tnh ny s l False, khi bt k mt s kin bn phm no cng u c gi n iu khin ang gi quyn iu khin. Tuy nhin nu gi tr ca thuc tnh l True th Form s l ni nhn mi s kin bn phm. Sau y l v d v iu ny:
Private Sub Form_KeyPress (KeyAscii As Integer) ' Gi iu khin n textbox u tin txtForward.SetFocus txtBackward.Text = Chr(KeyAscii) & txtBackward.Text txtAscii.Text = txtAscii.Text & CStr(KeyAscii) & ", End Sub

Trang 76

Visual Basic

Hnh VI.15 Cc s kin bn phm


Trong v d trn, nu nh gi tr ca thuc tnh KeyPreview l False th cc TextBox Backward v Ascii khng th nhn c gi tr.

IV. X l ha v giao din


IV.1 Hin th hnh nh
Bi v h iu hnh Windows l h iu hnh s dng giao din ha, do mt phn quan trng trong ng dng ca ta l cch thc hin th hnh nh trong ng dng ca mnh. VB cung cp cho chng ta 4 loi iu khin hin th v qun l hnh nh: Picture Box, Image, Shape v Line. IV.1.1 S dng Picture Box Cch dng chnh ca iu khin Picture Box l hin th hnh nh. Hnh nh mc nh m Picture Box hin th c tn c xc nh bi thuc tnh Picture (c th bao gm c ng dn). Ta cng cn ch mt iu l i tng Form cng c th hin th mt hnh nh xem nh l nh nn thng qua thuc tnh Picture. Thuc tnh AutoSize ca iu khin Picture Box quy nh kch thc ca iu khin c th thay i mt cch t ng hay khng? Nu gi tr ca thuc tnh ny l True, th kch thc ca iu khin s thay i theo kch thc ca hnh nh m n cha. Tuy nhin s thay i ny c th lm ng dng ca chng ta tr nn xu i do s thay i kch thc ca iu khin Picture Box s khng quan tm n cc v tr ca cc iu khin khc cng c trn biu mu. Tt hn ht l chng ta nn th qua tt c cc hnh nh c th hin th ti thi im thit k quy nh kch thc ca iu khin cho hp l. Trang 77

Visual Basic

Hn th na, c th thay i hnh nh hin th bn trong Picture Box bng cch s dng phng thc LoadPicture thay i gi tr ca thuc tnh Picture. Ngoi ra ta c th dng Picture Box nh mt vt cha cc iu khin khc. Cng nh iu khin Frame, ta c th t cc iu khin khc bn trong Picture Box. Ta thng s dng Picture box cha cc iu khin Label hin th cc thng tin v trng thi ca ng dng. Mt cch dng khc ca Picture box l xem nh mt khung v trng v ta dng cc phng thc Circle, Line, PSet hay Point v ln trn iu khin ny. IV.1.2 S dng Image Control Image control cng nh iu khin Picture Box nhng ch dng hin th hnh nh. N khng th dng lm vt cha v cng khng c mt s thuc tnh nh iu khin Picture Box. Cc phng thc dng hin th, thay i hnh nh cng nh iu khin Picture Box, tuy nhin thuc tnh quy nh vic kch thc thay i mt cch t ng l thuc tnh Stretch. Mt trong nhng ng dng ch yu ca iu khin Image Control l s dng nh mt nt lnh, y l mt cch thc tin li thit k nt lnh cha hnh nh thay v l cc cu vn bn. Khi s dng Image Control nh mt nt lnh, ta nn nh rng iu khin ny s khng th c trng thi n xung khi c Click, v th ta nn thay i hnh nh hin th bi Image Control cho bit rng nt lnh c n.

IV.2 X l ha
IV.2.1 Ta mn hnh Gc tri trn ca mn hnh c ta l (0,0) c ngha l X = 0 v Y = 0. Nh vy tc l khi di chuyn sang phi mn hnh th X tng ln cng nh di chuyn xung di th Y tng ln. Tuy nhin VB ch cho php ta v trn biu mu hay hp hnh (picture box). Khi h ta s c gn vi tng iu khin. Ta thng s dng 2 h ta ch yu sau: Twips v Pixel. Twips: y l h ta mc nh dng cho biu mu. Mi im s bng 1/567 cm. y l h ta khng b nh hng bi thit b, kt qu v s nh nhau trn mn hnh VGA chun, trn my in hay trn mn hnh c phn gii cao khc. Pixel: y l h ta ph bin nht, mi mt im trn mn hnh s bng chnh xc vi mt Pixel, nh vy khi s dng h ta ny s gip cho cc ng dng ha thc hin c nhanh hn v khng phi thng qua qu trnh i h ta . IV.2.2 Cc phng thc ha Cc iu khin c v ln biu mu lc thit k nhng cc phng thc ha cho php v trc tip khi ng dng thi hnh. Phng thc PaintPicture Phng thc PaintPicture cho php sao chp nhanh cc hnh nh t biu mu, hp hnh v my in. C php: Trang 78

Visual Basic

object.PaintPicture picture, x1, y1, width1, height1, x2, y2, width2, height2, opcode Object Picture x1, y1 Width1 Height1 x2, y2 Width2 Height2 Opcode Object l i tng m phng thc s lm vic, n c th l biu mu, hp hnh hay i tng my in. Hnh nh ngun s c v ln i tng phi c ch r bi thuc tnh Picture ca biu mu hoc hp hnh. Gi tr ch nh v tr ca hnh nh trn i tng. Thuc tnh ScaleMode xc nh h ta no c s dng. Gi tr xc nh rng ca hnh nh, nu b qua th mc nh l rng ca nh ngun. Gi tr xc nh cao ca hnh nh, nu b qua th mc nh l cao ca nh ngun. Cc gi tr xc nh hnh nh s c v li t v tr no. Nu b qua th gi tr mc nh l 0, tc ton b hnh nh c v li. Tng t nh Width1, nhng y l tc ng n nh ngun. Tng t nh Height1, nhng y l tc ng n nh ngun. y l ty chn v ch c tc dng vi nh Bitmap.

V d: Thit k chng trnh sao cho khi ngi s dng va di chuyn va nm gi phm chut th mt hnh nh s c v li ta mi.
Dim re Private Sub Form_Load() re = False End Sub Private Sub Form_MouseDown(Button As Integer, & _ Shift As Integer, X As Single, Y As Single) re = True End Sub Private Sub Form_MouseMove(Button As Integer, & _ Shift As Integer, X As Single, Y As Single) If re Then Form1.PaintPicture Image1.Picture, X, Y, & _ Image1.Width, Image1.Height End If End Sub Private Sub Form_MouseUp(Button As Integer, & _ Shift As Integer, X As Single, Y As Single) re = False End Sub

Trang 79

Visual Basic

Qua v d trn ta thy phng thc PaintPicture cho php sao chp nhanh mt nh ngun trn cc i tng khc .

Hnh VI.16 Phng thc PaintPicture

Phng thc PSet Phng thc ny thao tc trn tng im v c cng dng gn mt mu no cho mt im trn i tng. C php : Object.PSet [Step] (x, y), [color] Object Step (x, y) Color i tng m phng thc lm vic. Ty chn. Xc nh mi quan h vi ta X v Y hin ti. Ta ca im. Mu ca im .

iu khin hnh dng y l iu khin cho php v cc hnh n gin ln mt biu mu trong khi thit k. y l mt iu khin rt n gin, ta ch quan tm n cc thuc tnh sau: - Shape: Quy nh hnh v l hnh oval, ch nht - BorderStyle: Quy nh kiu ng v. - BackStyle: Cho bit dng t mu c hay khng. - BorderWidth: y l rng ca ng v. V ng trn, cung trn v Ellipse VB cung cp phng thc Circle cho php ta v ng trn, ng cong, cung trn, ellipse v mt ng trn ta dng phng thc Circle do VB cung cp. C php: Object.Circle (X, Y), Radius, [color] Trang 80

Visual Basic

Object (x, y) Radius Color

i tng m phng thc lm vic. Ta tm ng trn. Bn knh ca ng trn Mu t cho ng trn. .

v mt cung trn, ta cng s dng phng thc Circle, tuy nhin ta cn cung cp thm 2 thng s l im bt u v im kt thc ca cung trn. Thng thng chng ta quen s dng n v o gc l , tuy nhin i vi VB ta cn phi a vo n v l Radians. V d v mt cung trn tm (1000, 1500), bn knh 500 bt u t gc o 60 n gc 90o ta dng on lnh nh sau:
Const pi = 3.1415 Circle (1000, 15000), 500, , pi/3, pi/2

v mt Ellipse, ta cung cp thm thng s cui cng (thng s Aspect) l s co gin ca ng trn theo chiu ngang. C php tng qut ca phng thc Circle: object.Circle [Step] (x, y), radius, [color, start, end, aspect]

Chng 7 : TP TIN
Mc tiu: Chng ny gii thiu v cch thc truy cp h thng tp tin ca Windows trong VB, thao tc thng gp trong cc ng dng chy trn Windows. Hc xong chng ny, sinh vin phi nm bt c cc vn sau: - S dng m hnh i tng h thng tp tin thao tc vi a, th mc, tp tin trong Windows. - S dng cc hm xut/nhp tp tin truy xut tp tin vn bn, tp tin nh phn, tp tin truy xut ngu nhin. Kin thc c lin quan: - Cc cu trc lp trnh trong VB. - Cch thc t chc h thng tp tin ca h iu hnh Windows (9X, 2000, XP) Ti liu tham kho: - Microsoft Visual Basic 6.0 v Lp trnh C s d liu - Chng 6, trang 88 - Nguyn Th Ngc Mai (ch bin), Nh xut bn Gio dc - 2000. Trang 81

Visual Basic

I. M hnh File System Object (FSO)


Cung cp cho ng dng ca ta cc kh nng nh to mi, thay i, xa, di chuyn cc th mc, hoc kim tra xem mt th mc no c tn ti hay khng Ngoi ra chng ta cng c th ly c cc thng tin lin quan n th mc nh tn, ngy to, ngy sa i gn nht M hnh FSO ch h tr truy xut trc tip tp tin dng vn bn thng qua i tng TextStream, n cha h tr cho tp tin nh phn, do vi tp tin nh phn ta phi dng lnh Open vi c Binary. i tng Drive Folder File FileSystemObject TextStream Gii thch Cho php thu thp thng tin v a, bao gm c cc a chia s qua mng LAN, CD-ROM Cho php to, xa, di chuyn v thu nhn cc thng tin h thng trn th mc. i tng cho php thao tc trn tp tin. Cc thuc tnh v phng thc cho php thao tc trn tp tin, th mc v a. Cho php c v ghi tp tin dng vn bn (dng Text).

Nu cha c tham chiu n i tng FSO, ta cn chn "Microsoft Scripting Runtime" t menu Project/References... Cc phng thc ca FSO ta c th xem trong ca s Object Browser.

I.1 To i tng FileSystemObject


C hai cch, khai bo mt bin kiu FileSystemObject hoc dng phng thc CreateObject ca lp trnh hng i tng. Cch 1:
Dim fso As New FileSystemObject

Cch 2:
Set fso = CreateObject("Scripting. FileSystemObject")

Trong Scripting l tn th vin v FileSystemObject l tn i tng.

I.2 Truy cp a, th mc, tp tin


Dng cc phng thc GetDrive, GetFolder, GetFile. V d to mt handle tr n tp tin "d:\tqdinh\text.txt" ta dng cc dng lnh sau:
Dim Set fso f As = New FileSystemObject, f As File fso.GetFile("d:\tqdinh\text.txt")

Hoc ta c th to mi th mc, tp tin thng qua cc phng thc CreateFolder, CreateTextFile. Ngoi ra ta c th xa mt th mc hoc mt tp tin thng qua DeleteFolder, DeleteFile. i tng FileSystemObject cn c rt nhiu phng thc, ta c th xem qua ca s ObjectBrowser. Trang 82

Visual Basic

Hnh VII.1 Ca s ObjectBrowser vi i tng FileSystemObject

I.3 Thng tin v a


Cc thng tin ny c truy xut thng qua cc thuc tnh ca i tng File. - TotalSize: tng dung lng ca a tnh bng Byte. - AvailableSpace, FreeSpace: dung lng cn trng ca a. - DriveLetter: k t a. - DriveType: loi a ( tho lp hay c nh, mng, CD-ROM, RAM). - FileSystem: a c qun l bi bn FAT no: FAT16, FAT32, NTFS...

I.4 Lm vic vi th mc
y l cc phng thc c cch s dng rt n gin, v th ta ch xt qua phng thc no ng vi tc v g (cng vic g) ch khng i su phn tch tng phng thc. Phng thc FileSystemObject.CreateFolder To th mc FileSystemObject.DeleteFolder Xa th mc Folder.Delete FileSystemObject.MoveFolder Di chuyn th mc Folder.Move FileSystemObject.CopyFolder Sao chp th mc Folder.Copy Folder.Name Ly tn th mc Kim tra th mc c tn ti trn FileSystemObject.FolderExists Trang 83 Tc v

hay hay hay

Visual Basic

a hay khng Tr v i tng Folder Ly tn ca th mc cha Ly tn ca th mc h thng

FileSystemObject.GetFolder FileSystemObject.GetParentFolderName FileSystemObject.GetSpecialFolder

I.5 Lm vic vi tp tin


M tp tin ghi d liu o To tp tin mi: s dng phng thc CreateTextFile.
Dim fso As New FileSystemObject fso.CreateTextFile("d:\home\lhbao\test.txt")

o M tp tin ghi vi c ForWriting, lc ny ta s dng phng thc OpenAsTextStream ca i tng File cng vi i tng TextStream thao tc. V d:
Dim fso As New FileSystemObject, f As File Dim ts As TextStream fso.CreateTextfile("d:\home\lhbao\test.txt") Set f = fso.GetFile("d:\home\lhbao\test.txt") Set ts = f.OpenAsTextStream(ForWriting)

o Ghi d liu ln tp tin: ta c th ghi d liu vo tp tin ang m bng phng thc Write hay WriteLine ca i tng TextStream. S khc bit gia hai phng thc ny l s c thm k t xung dng nu nh s dng WriteLine. Nu mun ghi mt dng trng vo tp tin ang m, ta s dng phng thc WriteBlankLines. C php: ts l i tng TextStream ts.Write(s) Ghi chui s ln tp tin ts.WriteLine(s) Ghi chui s ln tp tin ts.WriteBlankLines(N) Ghi N dng trng ln tp tin M tp tin c d liu o M tp tin c vi c ForReading, lc ny ta s dng phng thc OpenAsTextStream ca i tng File cng vi i tng TextStream thao tc. V d:
Dim Dim Set Set fso As New FileSystemObject, f As File ts As TextStream f = fso.GetFile(D:\Home\lhbao\Test.txt) ts = f.OpenAsTextStream(ForReading)

o c d liu t tp tin: Ta c ba phng thc c d liu t mt tp tin vn bn, l Read, ReadLine v ReadAll. Ba phng thc ny cho php c mt s k t, mt dng ca vn bn v ton b vn bn. Trong khi c ni dung ca tp tin, ta c th s dng phng thc Skip, SkipLine nhy n phn t d liu mi. C php: ts l i tng TextStream ts.Read(N) As String: c N k t t tp tin
ts.ReadLine As String ts.ReadAll As String

Trang 84

Visual Basic

ng tp tin: S dng phng thc Close ca i tng TextStream. Di chuyn, sao chp v xa tp tin S khc bit gia di chuyn v sao chp mt tp tin l tp tin ngun c cn tn ti th mc ngun hay khng. ng vi mt thao tc, ta cng c hai phng thc thc hin, l cc phng thc thuc i tng FileSystemObject v i tng File. Tc v Di chuyn mt tp tin Sao chp mt tp tin Xa mt tp tin Phng thc FileSystemObject.MoveFile File.Move FileSystemObject.CopyFile File.Copy FileSystemObject.DeleteFile File.Delete hoc hoc hoc

Cc phng thc ng vi thao tc di chuyn v sao chp tp tin cn c i s l ng dn n ni cha tp tin ch.

I.6 V d
Thit k mt ng dng nh Notepad ca Windows, s dng FSO truy xut tp tin.

Trang 85

Visual Basic

TextBox: txtNoidung

o Thm vo iu khin CommonDialog vo ng dng vi Name: dlgFile. o S kin mnuNew_Click c x l:


Private Sub mnuNew_Click() txtNoiDung.Text = "" End Sub

o on m cho th tc x l s kin mnuOpen_Click:


Private Sub mnuOpen_Click() On Error GoTo Xuly dlgFile.Filter = "All Files (*.*)|*.*| & _ Text Files (*.txt)|*.txt" dlgFile.FilterIndex = 2 dlgFile.ShowOpen Dim fso As New FileSystemObject, f As File Dim ts As TextStream Set f = fso.GetFile(dlgFile.FileName) Set ts = f.OpenAsTextStream(ForReading) txtNoiDung.Text = ts.ReadAll() ts.Close Xuly: End Sub

o i vi mnuSave_Click:
Private Sub mnuSave_Click() On Error GoTo Xuly dlgFile.Filter = "All Files (*.*)|*.*| & _ Text Files (*.txt)|*.txt" dlgFile.FilterIndex = 2 dlgFile.ShowSave Dim fso As New FileSystemObject, f As File Dim ts As TextStream fso.CreateTextFile (dlgFile.FileName)

Trang 86

Visual Basic
Set f = fso.GetFile(dlgFile.FileName) Set ts = f.OpenAsTextStream(ForWriting) ts.Write (txtNoiDung.Text) ts.Close Xuly: End Sub

o S kin mnuSaveAs_Click cng c x l tng t. o S kin mnuFont:


Private Sub mnuFont_Click() On Error GoTo Xuly With dlgFile .Flags = cdlCFBoth + 256 .ShowFont txtNoiDung.Font.Bold = .FontBold txtNoiDung.Font.Italic = .FontItalic txtNoiDung.Font.Name = .FontName txtNoiDung.Font.Size = .FontSize End With Xuly: End Sub

o S kin mnuExit_Click:
Private Sub mnuExit_Click() End End Sub

o Lu d n v chy chng trnh.

II. Hm I/O v lnh x l tp tin


C ba kiu tp tin: Tun t, ngu nhin v nh phn - Tun t (Sequential): y l cch thc truy cp n tp tin cho kiu c v ghi thnh theo cc khi lin tc nhau. - Ngu nhin (Random): c v ghi cc tp tin vn bn hoc nh phn c cu trc theo cc mu tin c di c nh. - Nh phn (Binary): c v ghi cc tp tin c cu trc thay i. Cc hm v dng lnh thao tc trn cc kiu truy cp tp tin, cng dng ca tng hm s c xt n trong phn sau: Statements & Functions Close Get Input( ) Input # Line Input # X X X Trang 87 Sequential X Random X X Binary X X X

Visual Basic

Open Print # Put Write #

X X

X X

II.1. Tp tin tun t


II.1.1 M tp tin C php:
Open pathname For [Input|Output|Append] _ As filenumber [Len = buffersize]

Nu ta dng tham s Input th tp tin (c ng dn l pathname) phi tn ti ri, nu khng s gy ra li v tham s ny c dng trong trng hp m tp tin c. Cn cc tham s Output hoc Append s to mi tp tin v sau m n. Tham s Len s ch ra s k t trong vng m khi sao chp d liu gia tp tin v chng trnh x l. Filenumber l s hiu ca tp tin c m, n mang gi tr kiu nguyn v nm trong khong t 1 n 511. ly s hiu tp tin mi hp l, ta s dng hm FreeFile. II.1.2 c ni dung tp tin o Hm Input C php: Input (number, filenumber) As String: hm ny tr v number k t ca tp tin c s hiu c ch nh bi filenumber. o Lnh Input # C php: Input # filenumber, varlist: lnh ny s c ni dung ca tp tin vo cc bin c ch bi varlist. Lu rng lnh ny ch s dng vi cc tp tin c ghi bi lnh Write #. o Lnh Line Input # C php: Line Input # filenumber, varname: lnh ny s c ni dung ca mt dng trong tp tin tun t vo bin chui. II.1.3 Ghi d liu ln tp tin Ta c 2 cu lnh ghi d liu ln tp tin l Write # v Print #. o Cu lnh Write #: C php: Write # filenumber, [outputlist]: lnh ny ghi d liu vo tp tin tun t, ni dung ghi mi cha trong danh sch bin outputlist, cc phn t ca danh sch cch nhau bi du phy. Nu ta khng c t outputlist th mt dng trng s c ghi vo tp tin. o Cu lnh Print#: C php: Print # filenumber, [outputlist]: tng t nh Write# nhng d liu c th nh dng khi ghi ln tp tin. Trang 88

Visual Basic

i s outputlist c th l:
[{Spc(n) | Tab[(n)]}] [expression] [charpos]

Trong : - Spc(n): dng xen khong trng vo tp tin vi n l s khong trng. - Tab(n): dng xc nh ct bt u ghi d liu trong vng ghi vi n l s th t ct. Dng Tab khng i s ch v tr bt u ca vng ghi tip theo. - Expression: biu thc chui hoc biu thc s. - Charpos: ch nh v tr ca k t k tip. Trong : du ; xc nh d liu mi s ghi k tip k t cui cng trc . Tab(n) xc nh chnh xc ct ghi d liu hay Tab ch ra v tr ca d liu cn ghi vo l vng ghi k tip. Nu tham s ny b b qua, d liu s c ghi bt u t dng k tip. II.1.4 ng tp tin C php: Close filenumberlist: ng li cc tp tin c m vi cc s hiu c m t trong filenumberlist, filenumberlist c dng sau:
[[#]filenumber] [, [#]filenumber] . . .

II.1.5 V d
Open "TESTFILE" For Output As #1 ' M tp tin ghi. Print #1, "This is a test" ' Ghi chui vo tp tin. Print #1, ' Ghi mt dng trng vo tp tin. Print #1, "Zone 1"; Tab ; "Zone 2" ' To hai vng ghi. ' Phn cch hai chui bi khong trng. Print #1, "Hello" ; " " ; "World" Print #1, Spc(5) ; "5 leading spaces " ' To 5 khong trng Print #1, Tab(10) ; "Hello" ' ghi chui ti ct th 10. ' Gn gi tr thuc kiu Boolean, Date, Null v Error. Dim MyBool, MyDate, MyNull, MyError MyBool = False : MyDate = #February 12, 1969# : MyNull = Null MyError = CVErr(32767) Print #1, MyBool ; " is a Boolean value" Print #1, MyDate ; " is a date" Print #1, MyNull ; " is a null value" Print #1, MyError ; " is an error value" Close #1 ' ng tp tin

V sau y l ni dung ca tp tin TESTFILE sau khi thc thi chng trnh:

Trang 89

Visual Basic

This is a test Zone 1 Zone 2 Hello World 5 leading spaces Hello False is a Boolean value 2/12/1969 is a date Null is a null value Error 32767 is an error value

ng dng sau y cho php c ni dung 1 tp tin c la chn. o Thit k chng trnh c giao din:

y ta c s dng iu khin danh sch a, th mc, tp tin la chn tp tin cng vi 1 TextBox hin th ni dung. o Cc s kin c x l nh sau:
Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub Command1_Click() Dim fname As String, str As String fname = Dir1.Path + "\" + File1.filename Open fname For Input As #1 Do While Not EOF(1) Line Input #1, str Text1.Text = Text1.Text + str + vbCrLf Loop Close #1 End Sub

o Lu d n v chy chng trnh, ta c kt qu: Trang 90

Visual Basic

II.2. Tp tin truy xut ngu nhin


II.2.1 M tp tin C php
Open pathname [For Random] As filenumber _ [Len = RecLength]

Bi v tham s Random l mc nh, do t kha For Random l khng cn thit. Tham s Len cn mt kch thc ng ca mu tin, nu nh hn th s gy ra li, ln hn s gy lng ph khng gian a. Filenumber: s hiu tp tin khi m (c ng dn l pathname) II.2.2 c ni dung tp tin o Cu lnh Get: C php: Get [#] filenumber, [recnumber], varname: lnh ny s c ni dung ca mu tin th recnumber trong tp tin vo bin mu tin varname, trong mu tin u tin c s th t l 1. II.2.3 Ghi d liu ln tp tin o Cu lnh Put: C php: Put [#] filenumber, [recnumber], varname: Lnh ny s thay th hoc thm mi mu tin vo tp tin. Nu nh s th t mu tin (recnumber) ch n mu tin tn ti, th ni dung ca mu tin c thay th. thm mi mu tin, s th t mu tin cn c gi tr l s mu tin hin c ca tp tin cng thm 1. II.2.4 ng tp tin C php: Close filenumberlist: ng li cc tp tin c m vi cc s hiu c m t trong filenumberlist, filenumberlist c dng sau:
[[#]filenumber] [, [#]filenumber]...

II.2.5 V d Gi s ta c khai bo 1 mu tin nh sau:


Type Hanghoa

Trang 91

Visual Basic
MaHang As String * 10 TenHang As String * 40 DVTinh As String * 15 Gia As Double End Type

o Ghi d liu ln tp tin c cu trc l cc mu tin nh trn


Dim h As Hanghoa h.MaHang = "AM01" h.TenHang = "Dau goi Clear" h.DVTinh = "Chai" h.Gia = 14000#

Open "E:\Test.dat" For Random As #1 Len = LenB(h) Put #1, 1, h Close #1

o c d liu t tp tin c cu trc nh trn:


Dim h As Hanghoa Open "E:\Test.dat" For Get #1, 1, h Close #1 MsgBox h.MaHang & ": " h.DVTinh & ": " Thong tin Hang Random As #1 Len = LenB(h) & h.TenHang & ": " & _ & Str(h.Gia), , _ Hoa

Kt qu khi c d liu nh sau:

Trang 92

Visual Basic

Chng 8: CC KHI NIM C BN V C S


D LIU
Mc tiu: Chng ny gii thiu v mt s khi nim trong lp trnh c s d liu vi VB, nhng vn cn thit khi thit k cc ng dng truy cp c s d liu. Hc xong chng ny, sinh vin phi nm bt c cc vn sau: - Mt s khi nim khi lp trnh c s d liu trong VB. - Phn bit DAO, RDO, ADO. - S dng mi trng pht trin VB tng tc vi c s d liu. Kin thc c lin quan: - Cu lnh SQL truy vn d liu. Ti liu tham kho: - Microsoft Visual Basic 6.0 v Lp trnh C s d liu - Chng 18, trang 447 - Nguyn Th Ngc Mai (ch bin), Nh xut bn Gio dc 2000.

Trang 93

Visual Basic

I. C s d liu
I.1. Khi nim
C s d liu l mt kho cha thng tin. C nhiu loi c s d liu, nhng trong khun kh bi ging ny ta ch quan tm n cc ng dng lp trnh lin quan n c s d liu quan h. Mt c s d liu quan h: o Cha d liu trong cc bng, c cu to bi cc dng cn gi l cc mu tin, v ct cn gi l cc trng. o Cho php ly v (hay truy vn) cc tp hp d liu con t cc bng. o Cho php ni cc bng vi nhau cho mc ch truy cp cc mu tin lin quan vi nhau cha trong cc bng khc nhau.

I.2. B my (Engine) c s d liu


Chc nng c bn ca mt c s d liu c cung cp bi mt b my c s d liu, l h thng chng trnh qun l cch thc cha v tr v d liu. Chng hn Microsoft Jet l b my c s d liu c s dng khi truy cp d liu Access.

I.3. Bng (Table) v trng (Field)


Cc c s d liu c cu thnh t cc bng dng th hin cc phn nhm d liu. Chng hn, nu ta to mt c s d liu qun l cc ti khon trong cng vic kinh doanh, ta phi to mt bng cho Khch hng, mt bng cho Ha n v mt bng cho Nhn vin. Bng c cu trc nh ngha sn v cha d liu ph hp vi cu trc ny. o Bng: cha cc mu tin l cc mu d liu ring r bn trong phn nhm d liu. o Mu tin: cha cc trng. Mi trng th hin mt b phn d liu trong mt mu tin. V d nh mi mu tin th hin mt mc trong danh b a ch cha cc trng tn v h, a ch, thnh ph, s in thoi Ta c th dng chng trnh Visual Basic tham chiu v thao tc vi c s d liu, bng, mu tin v cc trng.

I.4. Tp mu tin (Recordset)


Recordset l mt cu trc d liu th hin mt tp hp con cc mu tin ly v t c s d liu. V khi nim, n tng t nh mt bng nhng c thm mt vi thuc tnh ring bit quan trng. Cc Recordset c th hin nh cc i tng. Cng nh cc i tng khc trong Visual Basic, cc i tng recordset c cc thuc tnh v phng thc ring.

II. Truy xut c s d liu trong Visual Basic 6.0


Visual Basic cung cp km theo n mt b my c s d liu c th hiu c d liu ca Microsoft Access gi l Joint Engine Technology (JET). JET l mt b Trang 94

Visual Basic

my truy cp c s d liu hng i tng v n l mt phn khng th thiu c ca Visual Basic. Phin bn ca JET i km vi VB 6.0 l min ph ngha l VB c th truy xut trc tip c s d liu ca Microsoft Access. Giao din VB truy xut JET c tn l Data Access Objects (DAO). JET l mt b my c s d liu tuyt vi cho cc ng dng vn phng chy trn my n, nhng hiu sut ca n gim ng k khi s lng ngi dng tng ln v c s d liu c m rng. V iu ny JET khng phi l mt gii php ti u cho cc ng dng c s d liu nhiu ngi dng. Cho n nay ngi ta cha c mt thng k chnh xc c kch thc d liu ti a hay s lng ngi dng ti a ca JET nhng nhn chung JET b gii hn nhiu hn so vi cc gii php khc trong mi trng a ngi dng. Tuy vy, JET l im khi u tt nht cho ngi lp trnh VB bi v s n gin ca n. Khi kch thc d liu tng ln, ngi lp trnh bao gi cng mun xy dng mt ng dng Khch/Ch (Client/Server) c kh nng bo mt cao v linh hot. V l , Microsoft h tr trong VB truy cp cc c s d liu quan h c thng dch bi chun Open Database Connectivity (ODBC). ODBC l mt k thut cho php truy cp cc c s d liu quan h cao cp nh SQL SERVER hay ORACLE. Tuy nhin, ODBC cng c th c s dng truy cp cc c s d liu nh t chc bng Microsoft Access hay Foxpro, thm ch cc c s d liu my ch nh IBM DB2. Visual Basic s dng giao din i tng Remote Data Objects (RDO) truy cp ODBC. DAO v RDO l nhng k thut h tr vic truy xut n cc c s d liu quan h. Tuy nhin, Microsoft li cung cp mt cng c hu ch hn truy cp d liu goi l OLEDB. OLEDB l k thut cho php d liu c truy xut t c 2 ngun c s d liu: quan h v khng quan h. iu c ngha l gm cc c s d liu ca Microsoft Access, Oracle, SQL SERVER v c cc ngun d liu khng quan h nh Excel, Microsoft Index Server, Microsoft Exchange, Active Directory Visual Basic s dng giao din i tng ActiveX Data Objects (ADO) truy cp OLEDB. Visual Basic cung cp cho ta nhiu cng c truy cp d liu nh DAO, RDO, ADO. Cu hi thng t ra l: K thut no c s dng lc no u? Nhiu ngi cho rng DAO & RDO li thi v ngi ta him s dng chng. Tht ra DAO & RDO l cc in hnh cho mt vi kh nng tiu biu ca ADO. Hin nay, vn cn kh nhiu ng dng s dng DAO & RDO v tht s chng b gii hn trong chng mc no . OLEDB thc s cung cp mt kh nng rng ln truy cp cc c s d liu t nhiu ngun khc nhau. Tuy vy, trong mt s trng hp mt gii php dng RDO li hu dng hn ADO.

III. Dng Visual Basic to mt c s d liu


Thng thng chng ta s s dng cc h qun tr c s d liu to nn mt c s d liu, nhng trong phn ny ta s xt qua tnh nng to c s d liu bng Visual Basic 6.0. Ta c th p dng phng php ny cho nhng c s d liu nh v tng thch vi Microsoft Access.

Trang 95

Visual Basic

III.1 S dng ca s c s d liu


o T Menu ca VB6, chn mc Add-Ins, Visual Data Manager. Ca s Visual Data Manager s xut hin. o Chn mc File -> New -> MicroSoft Access -> Version 7.0 MDB. o Chn th mc ta mun lu c s d liu v tn ca c s d liu.

Hnh VIII.1 Ca s Visual Data Manager


To bng to mi mt bng, ta chn Properties trong ca s Databases, nhp chut phi, chn New Table, t tn cho Table ti Table Name, n Add Field to mi cc trng cho bng.

Hnh VIII.2 Ca s to Table


Trang 96

Visual Basic

Ta s nhp tn trng ti Name, chn kiu ca trng ti Combo Type, ty chn FixedField v VariableField xc nh di ca trng l c nh hay thay i. Sau khi xc nh y cc thuc tnh ca trng, n OK v tip tc thm vo cc trng khc cho bng. Nu thm mi y cc trng ca bng, n Close quay v ca s Table Structure. Sau khi quay v ca s Table Structure, ta s xc lp cc ch mc cng nh kha chnh ca bng.

Hnh VIII.3 Ca s to kha chnh v ch mc

Ti Name, ta s nhp vo tn ca ch mc, ri chn cc trng tham gia vo ch mc . Nu ta chn Primary th chnh l cc trng cu thnh kha chnh ca bng. Chn Unique tc l gi tr ca ch mc s khng c s trng lp. n Close xc nhn rng ta xy dng xong tp cc ch mc ca bng. Sau khi hon thnh tt c cc thao tc trn, to bng ta n Build the Table. Tuy rng y l mt tnh nng mi ca VB6, tuy nhin chng ta cng s gp phi rt nhiu bt tin khi phi thit k mt c s d liu hon chnh cng nh trong qu trnh bo tr v s dng (kh khn trong vic thay i cc thuc tnh xc lp, khng to lin kt gia cc bng c ). Mt phng cch tt nht l nn dng cc h qun tr c s d liu chuyn dng thc hin cng vic nu trn.

Trang 97

Visual Basic

Hnh VIII.4 To bng cho c s d liu

III.2 Dng Visual Data Manager to giao din


Ta c th thit k mt Form nhp liu n gin cho mt Table t Visual Data Manager. Cc bc tin hnh nh sau: T Visual Data Manager chn C s d liu cn thao tc. Chn Data Form Design t mc Utility. Chn Table cn cho vic to Form v cc trng hin th trn Form (thng thng chng ta s cho hin th tt c cc trng). Chn Build the Form, biu mu mi c to trong n ca chng ta.

Hnh VIII.5 Thit lp cc thuc tnh cho Form


Kt qu sau khi chng ta xy dng Form bng Visual Data Manager:

Trang 98

Visual Basic

IV. S dng ca s xem d liu (Data View)


VB6 cn h tr cho ngi lp trnh kh nng lm vic vi c s d liu m khng phi thng qua cng c qun tr c s d liu hoc cc cng c trong Add-In. Cng c ny chnh l ca s Data View. T Menu ca VB chn Data View hoc nhn nt Data View trn thanh cng c. Ca s Data View xut hin cho ta hai la chn: Data Links v Data Environment Connections.

Hnh VIII.6 Ca s Data View


Lin kt d liu (Data Link) l mt cch kt ni mi trng pht trin ca VB6 vi mt c s d liu no . Mt kt ni mi trng d liu (Data Environment Connection) l cch thc s dng c s d liu trong mt n c th. im khc bit gia hai thnh phn ny l s lin quan gia c s d liu vi n c th. s dng c s d liu theo kiu Data Link, ta tin hnh nh sau: Chn Data Links, n chut phi -> Add a Data Link hoc n nt Data Link trn thanh cng c ca ca s. Ca s Data Link Properties xut hin.

Trang 99

Visual Basic

Hnh VIII.7 Hp thoi Data Link Properties


Chn trnh cung cp Microsoft Jet, chn Next. Chn c s d liu mun ni kt n, nhn OK. Lin kt d liu cung cp mt cch nhn tm lc v ngun d liu. Mi ln ta to mt lin kt d liu, ta c th duyt bng cch m rng phn t trong danh sch tm lc. Thc hin iu ny bng cch nhn vo du cng bn tri mi phn t (hnh VIII.8).

Hnh VIII.8 Ca s Data

V. S dng iu khin d liu to giao din ngi s dng


iu khin d liu gip cho ngi s dng lin kt biu mu ca mnh n ngun c s d liu. iu khin d liu cung cp cho ngi s dng nhng tnh nng x l d liu c bn nh duyt qua cc mu tin, thm mi, cp nht. i vi phin bn VB6 cung cp cho chng ta 3 trnh iu khin d liu: DAO (Data Access Object), RDO (Remote Data Object) v ADO (ActiveX Data Object).

Trang 100

Visual Basic

V.1 Kt ni vi c s d liu v lm vic vi cc mu tin thng qua iu khin ADO Data


V.1.1 Hin th d liu Nu nh chng ta xy dng mt biu mu ch hin th cc mu tin ca mt bng, iu ny rt n gin v ta khng cn phi lp trnh g c. s dng iu khin ADO Data, ta cn nh du Microsoft ADO Data Control 6.0 (OLEDB) trong hp thoi Components.

Hnh VIII.9 Hp thoi Components Chn iu khin ADO Data t hp cng c a vo biu mu, lin kt n ngun d liu thng qua hai thuc tnh ConnectionString v RecordSource. ConnectionString: Xc nh ngun d liu cn ni kt, chnh l chui ni kt ch n c s d liu m ta thao tc. RecordSource: Xc nh xem ni kt ca ta ang thao tc trn bng no. V d: To mt ni kt n c s d liu "C:\Program Files\Microsoft Visual Studio\VB98 \Biblio.mdb". Chn Use Connection String, n Build. Chn Microsoft Jet 4.0 OLE DB Provider. Chn c s d liu nh v d. n OK. Quay v ca s Property Pages, chn Tab RecordSource, xc nh cc ty chn nh hnh v. n Close.

Trang 101

Visual Basic

Sau khi xc nh c ni kt, ta vn khng thy c s hot ng ca iu khin d liu, nguyn nhn do chng ta khng c iu khin hin th ni dung, cch gii quyt vn l dng iu khin TextBox hin th d liu. dng iu khin Textbox hin th d liu, ta xc nh hai thuc tnh sau y ca iu khin: DataSource, DataField. Cc thuc tnh ny xc nh ngun d liu v tn trng, i vi v d ny l Adodc1 (tn ca ADO Data) v Au_Id. Thc thi n, ta c kt qu sau:

Hnh VIII.11 V d dng ADO Data V.1.2 Cp nht d liu Thao tc cp nht d liu cng kh n gin, iu khin ADO Data s t ng cp nht li gi tr ca mu tin hin hnh mi khi ta duyt qua mu tin khc, v vy ta cng khng phi lm g c. V.1.3 Thm mi mu tin c th thm mi mu tin, ta c hai phng cch nh sau: Thit lp thuc tnh EOFAction ca iu khin ADO Data l 2-AddNew. Cch ny khng cn phi lp trnh g c. Trang 102

Visual Basic

thm mi vo mt mu tin, ta s i n cui mu tin, sau n nt tip, ta nhn thy gi tr ca cc trng s rng ch chng ta nhp mi thng tin vo.

Hnh VIII.12 Thm mi mu tin dng ADO Data


Thm mi mu tin bng 2 phng thc AddNew v Update, cc bc tin hnh s nh sau: - Thit k hai nt lnh l ADD NEW v UPDATE. - Trong s kin Click ca hai nt trn ln lt nhp vo cu lnh sau: Adodc1.Recordset.AddNew, Adodc1.Recordset.Update vi Adodc1 l thuc tnh Name ca iu khin d liu.

Hnh VIII.13 S dng phng thc AddNew v Update

V.1.4 Dng s kin MoveComplete cp nht giao din ngi s dng Ta c th dng s kin MoveComplete ca iu khin ADO Data khi ng sa i trong ng dng khi ngi s dng di chuyn t mu tin ny sang mu tin khc. S kin MoveComplete c kch hot khi mt mu tin mi thnh mu tin hin hnh. y l mt trong vi s kin c kch hot khi iu khin di chuyn t mu tin ny sang mu tin khc. Cc s kin khc bao gm WillChange, c kch hot khi iu khin di chuyn t mu tin ny sang mu tin khc hay thay i mt mu tin v s kin RecordChangeComplete, xy ra khi mt mu tin c sa i thnh cng trong c s d liu nh mt kt qu ca hot ng trong iu khin d liu. Trang 103

Visual Basic

V.1.5 Xa mu tin xa mu tin trong mt ng dng s dng iu khin d liu, ta dng phng thc Delete ca i tng Recordset ca iu khin d liu. V d: Adodc1.Recordset.Delete V.1.6 Dng s kin WillChangeRecord m bo d liu hp l Trong lp trnh c s d liu, vic m bo rng d liu nhp vo ph hp vi cc quy tc ca mt c s d liu ngi dng c th l yu t quan trng bc nht v mang tnh bt buc. i vi iu khin ADO Data, vic xc nh xem d liu c hp l hay khng s c vit trong s kin WillChangeRecord ca iu khin. S kin ny s c kch hot khi ngi dng thay i thng tin ca mt mu tin v di chuyn sang mu tin khc hoc thm mi mu tin.

V.2 Kt ni vi c s d liu v lm vic vi cc mu tin thng qua iu khin Data (DAO Data Control)
iu khin Data hn ch hn iu khin ADO Data v n ch cho php chng ta ni kt n mt s ngun d liu c th, chng hn nh Access, Excel, Foxpro, nhng Version ca cc h qun tr ny cng l nhng Version lu i. s dng iu khin ny, ta cn xc nh cc gi tr ca cc thuc tnh sau: Connect, DatabaseName, RecordSource. - Connect xc nh c s d liu ca ta l loi g. - DatabaseName ch n mt c s d liu c th. - RecordSource l mt bng d liu trong c s d liu (i vi c s d liu Access). Sau khi xc nh gi tr ca cc thuc tnh trn th vic duyt qua cc mu tin cng tng t nh ca iu khin ADO Data. Thuc tnh EOFAction ca iu khin Data quy nh vic chng ta c th thm mi mt mu tin hay l khng (tng t iu khin ADO Data).

Trang 104

Visual Basic

Chng 9: CC I TNG TRUY CP D LIU (DATA ACCESS OBJECTS)


Mc tiu: Chng ny gii thiu v th vin i tng Data Access Objects, cch thc c s dng truy cp c s d liu ca cc h qun tr c s d liu nh nh Microsoft Access, Foxpro... Hc xong chng ny, sinh vin phi nm bt c cc vn sau: - M hnh cy phn cp ca i tng DAO. - S dng th vin i tng DAO tng tc vi c s d liu trong VB. Kin thc c lin quan: - Cc cu trc lp trnh trong VB. - Cu lnh truy vn d liu trong c s d liu. Ti liu tham kho: - Microsoft Visual Basic 6.0 & Lp trnh c s d liu - Chng 20, trang 571 - Nguyn Th Ngc Mai (ch bin), Nh xut bn Gio dc - 2000. - T hc Lp trnh c s d liu vi Visual Basic 6 trong 21 ngy (T1) Chng 8, trang 305 - Nguyn nh T (ch bin), Nh xut bn Gio dc - 2001.

Trang 105

Visual Basic

Cc ng dng Visual Basic c th thao tc trn c s d liu thng qua DAO (Data Access Objects). Dng DAO ta c th thi hnh cc cu truy vn xem, cp nht, cng nh to mi cc gi tr cho cc mu tin ca bng DAO c th c s dng cho cc ng dng truy cp d liu t my c nhn hoc cc ng dng theo kiu Khch/Ch (Client/Server). Tuy nhin, vo thi im hin ti, chng ta ch dng DAO thao tc vi c s d liu Jet v dng ng dng Client/Server l th mnh ca ADO (ActiveX Data Objects).

I. M hnh i tng Data Access Objects (DAO)


M hnh i tng DAO kh phc tp vi hng trm yu t vi rt nhiu tp hp cha kh nhiu i tng, mi i tng li c cc thuc tnh, phng thc v cc i tng con ca ring n. Sau y l m hnh cy phn cp ca i tng DAO:

Trong lp trnh DAO, c mt tp hp ct li cc k thut thng dng c s dng gn nh mi chng trnh. Chng bao gm: o Thi hnh cu truy vn SELECT ly v d liu t c s d liu. o Duyt qua tng mu tin trong mt Recordset. o Thi hnh cu truy vn hnh ng (Update, Delete, Insert). o Sa i cu trc c s d liu. Trang 106

Visual Basic

o X l li pht sinh bi truy cp c s d liu.

II. S dng DAO lm vic vi c s d liu


s dng i tng DAO, ta cn tham chiu n i tng ny bng cch chn Project -> References, sau nh du chn Microsoft DAO 3.51 Object Library. Nhn OK v ta c th s dng cc i tng do DAO cung cp.

II.1 i tng Database


i tng Database l ni bt u vic truy cp n c s d liu, hay ni cch khc c th kt ni v thao tc vi c s d liu thng qua DAO th cn thng qua i tng u tin l i tng Database. Trc tin ta khai bo mt i tng Database nh sau: Dim db As Database i tng Database c rt nhiu phng thc, ta s ch xt qua nhng phng thc c bn v quan trng nht cho php ta thao tc vi c s d liu. II.1.1 S dng phng thc OpenDatabase to mt i tng Database Ta dng phng thc OpenDatabase cho php mt i tng Database tham kho n mt c s d liu c th, i s bt buc ca phng thc l mt chui, kt qu tr v l mt i tng Database, v vy trc khi s dng phng thc ny, ta cn khai bo mt i tng Database. Chng hn nh:
Dim Set db As db = Database OpenDatabase("..\..\baigiang.mdb")

C php y ca phng thc OpenDatabase: Set database = OpenDatabase (dbname, options, read-only, connect) ngha cc tham s ca phng thc OpenDatabase nh sau: Thnh phn database dbname options read-only connect ngha Bin kiu i tng Database m ta mun s dng. Chui xc nh s tn ti ca c s d liu Jet hoc l tn ngun d liu (DSN) dng ODBC data source. Bin mang gi tr xc nh ty chn loi c s d liu. Mang gi tr kiu Boolean, TRUE nu nh m c s d liu dng ch c, ngc li cho kiu truy xut c v ghi. Kiu chui, xc nh kiu ni kt bao gm c mt khu. Cc gi tr ca ty chn Options Gi tr dbDriverNoPrompt ngha Trnh qun l ODBC dng chui ni kt cung cp tn c s d liu v ni kt. Nu Trang 107

Visual Basic

ta khng cung cp thng tin c th, s xy ra li ti thi im thc thi. dbDriverPrompt Trnh qun l ODBC hin th hp thoi cc ngun d liu ODBC. Chui kt ni s c to t ngun d liu do ngi dng chn thng qua hp thoi, nu khng ngun d liu mc nh s c s dng. Nu ni kt v tn ngun d liu xc nh y cc thng tin cn thit cho mt ni kt th trnh qun l ODBC s dng chui trong ni kt nu khng s nh trng hp s dng dbDriverPrompt.

dbDriverComplete

II.1.2 S dng phng thc Execute thi hnh cu truy vn hnh ng Ta s dng phng thc Excute ca i tng Database thi hnh mt cu lnh SQL trn c s d liu. tuy vy phng thc ny khng nn dng cho mi trng hp. ta ch nn dng phng thc Excute thi hnh cc lnh SQL cho cc mc ch sau: o Cp nht, xa hay sao chp mu tin (trong Access/Jet, ta gi l cc truy vn hnh ng). o Sa cu trc c s d liu (c bit nh l cc lnh DDL Ngn ng nh ngha d liu, Data Definition Language). Cc cu truy vn SELECT theo quy c (ly v cc mu tin) c thi hnh nh phng thc OpenRecordset ca i tng Database. C php: Object.Execute Source - Object: i tng Database. - Source: cu SQL kiu bin chui. V d: Tng gi bn mi sn phm ca bng Products ca CSDL Northwind.MDB ln 10%.
Dim db As Database Private Sub Form_Load() Set db = OpenDatabase(Northwind.mdb) End Sub Private Sub cmdExcute_Click() db.Excute UPDATE Products & _ SET [Unit Price] = [Unit Price] * 1.1 End Sub

II.2 i tng Recordset


i tng Recordset xc nh mt tp hp cc mu tin t mt bng c s hoc kt qu ca mt cu lnh truy vn no . Ti mt thi im bt k, i tng

Trang 108

Visual Basic

Recordset ch tham kho n mt mu tin n, l mu tin hin hnh. s dng i tng Recordset, ta dng phng thc Open Recordset. C php thng dng ca OpenRecordset nh sau: Set recordset = object.OpenRecordset source [, Type][, Options][, LockEdits] Trong phng thc OpenRecordset tr v i tng Recordset v object l bin i tng kiu Database, tham s Source y s l mt cu lnh truy vn (SELECT). i tng Recordset c nhiu loi (Type) khc nhau, sau y l bng phn tch cng dng cng nh u, nhc im ca tng kiu Recordset. Kiu Dynamic (dbOpenDynamic) u im Cp nht c, kt qu tr v c th thuc nhiu bng khc nhau thng qua ni kt bng. Mt u im ni tri l i vi c s d liu nhiu ngi s dng, n c c kh nng t cp nht khi cc ngi dng khc cp nht mu tin cha trong . Dynaset Cc chc nng tng t nh (dbOpenDynaset) Dynamic, nhng t c hiu qu hn do khng thao tc trn d liu thc s m l s tham chiu n d liu. Forward-Only C th ly v mu tin t (dbOpenForwardOnly) nhiu bng thng qua ni kt bng. c bit hiu qu i vi cc Recordset nh. Snapshot Tng t nh Forward-Only (dbOpenSnapshot) Table (dbOpenTable) Nhc im Km hiu qu hn so vi kiu Dynaset

Tm kim khng tht s hiu qu do khng c cc ch mc.

Ta ch c th di chuyn n pha trc.

Khng cp nht c vi d liu Jet. Tr v mt bng sao n d liu, nn thao tc chm hn rt nhiu so vi Dynaset. C th nh v v ly v cc Khng th thc hin mt cu mu tin mt cch nhanh truy vn lin quan n nhiu chng v cc bng c lp bng. ch mc.

Lu : Nu ta m mt Recordset vi b my CSDL Microsoft Jet v ta khng xc nh tham s type ca OpenRecordset th dbOpenTable l mc nh (nu c th). Vi mt Recordset xc nh mt cu truy vn, dbOpenDynaset l mc nh. Vi cch truy cp CSDL theo ODBC, dbOpenForwardOnly l mc nh. Mt s gi tr ca tham s Option, mt hng s c th c kt hp bi nhiu gi tr khc nhau, xc nh c tnh ca Recordset. Trang 109

Visual Basic

Hng s dbAppendOnly

ngha Cho php ngi dng thm mu tin mi vo Recordset, nhng khng c sa i hay xa cc mu tin c sn (ch vi dynaset-Recordset ca JET).

dbSQLPassThrough Cho php tham kho n cc cu SQL ca b my CSDL JET khi khi n c ni vi mt ngun d liu ODBC (ch vi snapshot-Recordset ca JET). dbSeeChanges Mt li thc thi s xut hin khi mt ngi dng thay i d liu m ngi khc ang thao tc (ch vi dynaset-Recordset ca JET). iu ny tht s c ch cho ng dng a ngi dng cn ng b ha d liu. Ngn cn ngi dng khc sa i hay thm mu tin. Ngn cn ngi dng khc c d liu t mt bng (chi vi Table-Recordset ca JET). Mt Recordset ch cho php di chuyn ti (snapshot-Recordset ca JET). Khng cho ngi dng thay i d liu. Thc thi mt cu truy vn khng ng b (truy cp d liu theo ODBC). Thc thi cu truy vn b qua phng thc SQLPrepare v trc tip gi phng thc SQLExecDirect (truy cp d liu ODBC trong mi trng a ngi dng).

dbDenyWrite dbDenyRead

dbForwardOnly

dbReadOnly dbRunAsync

dbExecDirect

Lu : Ta khng th s dng tham s lockedits khi options l dbReadOnly. Mt s cc gi tr ca tham s lockedits:

Trang 110

Visual Basic

Hng s dbReadOnly

ngha Ngn cn ngi dng sa i d liu (mc nhin i vi cch truy cp d liu theo ODBC). Ta c th s dng hng s ny tham s Options hay LockEdits u c, nhng khng th cng mt lc (li thc thi xy ra). Kha trang bi quan trong mi trng a ngi dng. Trang cha mu tin ang sa i s b kha li khi phng thc Edit c thc thi (mc nh i vi JET). Kha trang lc quan trong mi trng a ngi dng. Trang cha mu tin ang sa i s khng b kha cho ti khi phng thc Update c gi thc thi. Kha trang lc quan ng thi da vo gi tr ca mt dng c th (ch i vi cch truy cp d liu theo ODBC). Cho php cp nht theo l (ch i vi cch truy cp d liu theo ODBC).

dbPessimistic

dbOptimistic

dbOptimisticValue

dbOptimisticBatch

Lu : Xt v d sau:
Dim Dim Set Set db rs db rs As Database As Recordset = OpenDataBase ("..\..\baigiang.mdb") = db.OpenRecordset ("Select * From Canbo " & _ "Order by hotencb = "Truong"")

- Nh vy cu lnh cui cng trong v d trn s sai ch l VB khng xc nh c u l du trch dn ca chui v u l du trch dn ht cu lnh truy vn. Cch khc phc l i du trch dn chui thnh du nhy n. - Mt im cn ch khc l khi vit mt cu truy vn trn nhiu dng th cn c k t ni dng _ cui mi dng. - Nu gi tr ca tham s trong cu truy vn khng phi l cng nhc, tc ta ly gi tr t mt bin th ta theo nguyn tc sau:
Set rs = db.OpenRecordset ("Select * From Canbo " & _ "Order by hotencb = "& name & "")

II.3 i tng Field


i tng Field gip chng ta truy xut gi tr ca mt trng trong Recordset. Gi tr ca trng s truy xut qua thuc tnh Value ca i tng Field, tuy nhin thuc tnh Value l thuc tnh mc nh ca Field, nn ta khng cn tham kho tng minh n thuc tnh ny. Trang 111

Visual Basic

Nh vy truy xut gi tr ca mt trng trong 1 Recordset c th, ta c th dng mt trong cc cch sau: - Fields(Num): Num l s th t ca trng trong Recordset (bt u tnh t 0) - Fields("name"): Vi name l tn trng - Fields![name]: Vi name l tn trng.

II.4 Cc phng thc duyt qua i tng Recordset


Sau khi nhn v mt i tng Recordset, ta cn c nhng cch thc duyt qua cc mu tin phc v cho mt cng vic c th no . Ta c mt s phng thc duyt Recordset nh sau: Phng thc MoveFirst MoveNext MovePrevious MoveLast Move N ngha Di chuyn n mu tin u tin trong Recordset Di chuyn n mu tin k tip trong Recordset Di chuyn n mu tin lin trc trong Recordset Di chuyn n mu tin cui trong Recordset Di chuyn i N mu tin c ch nh trong Recordset

Cng nh nu trn, c nhiu loi kiu Recordset, ty vo tng kiu m chng ta ch c th duyt ti m khng th i lui, khi cc phng thc nh MoveFirst, MovePrevious s gy ra li. bit c rng chng ta ang di chuyn trong phm vi cc mu tin ca Recordset, ta s dng hai thuc tnh sau y xc nh iu : - BOF: Tr v TRUE nu ta di chuyn n trc mu tin u tin ca Recordset. - EOF: Tr v TRUE nu ta di chuyn n sau mu tin cui cng ca Recordset. Hn th na, ta c th dng hai thuc tnh ny kim tra mt Recordset c rng hay khng, mt Recordset rng khi ti mt thi im bt k c hai thuc tnh EOF v BOF u c gi tr l TRUE. xc nh s mu tin c trong mt Recordset, ta dng thuc tnh RecordCount. Nhng ch rng ta cn di chuyn n mu tin cui cng trc khi s dng thuc tnh RecordCount th kt qu tr v mi chnh xc. Ti sao li nh vy? Bi v cu lnh truy vn c x l thng qua hai giai on, tr v s lng mu tin cho x l v x l bn di cu lnh truy vn trn mt s lng ng d liu kt qu, v ta khng th iu khin c hai qu trnh ny. cp nht gi tr ca 1 mu tin ta lm theo cc bc nh sau: - Dng cc phng thc duyt mu tin i n mu tin cn thay i gi tr. - Thi hnh phng thc Edit. - Dng thuc tnh Fields gn tr cho trng trong mu tin, chng hn:
rs.Fields("hotencb") = Truong Quoc Dinh

Trang 112

Visual Basic

- Lu li s thay i bng cch thi hnh phng thc Update. thm mi mt mu tin ta lm theo cc bc: - Thi hnh phng thc AddNew, VB s thm mi mt mu tin trng. - S dng cc cch thc gn tr cp nht gi tr cho mu tin mi thm vo. - Thi hnh phng thc Update. Sau khi hon thnh cng vic chng ta cn thi hnh phng thc Close ng mt i tng Recordset. iu ny tht s c ngha khi Recordset hin hnh ang kha d liu, phng thc Close s m kha v cc ngi dng khc c th thao tc trn d liu.

II.5 Tm kim d liu trong Recordset v Table (bng)


i khi i vi mt s cng vic no , ta cn tm kim mt mu tin c th trong mt tp cc mu tin ca Recordset, c nhiu phng thc tm kim mu tin, ty vo ni dung cng vic m ta p dng phng thc no cho hiu qu. Ta c cc phng thc tm kim trn Recordset nh sau:
FindFirst|FindLast|FindNext|FindPrevious

C php ca phng thc Find: recordset.{FindFirst | FindLast | FindNext | FindPrevious} criteria Thnh phn recordset criteria ngha Mt bin i tng Recordset kiu dynaset hoc snapshot. Chui dng xc nh mu tin, ging nh mnh WHERE trong cu lnh SQL nhng khng c t kha WHERE.

Phng thc FindFirst FindLast FindNext FindPrevious

Bt u t Mu tin u tin Mu tin cui cng Mu tin hin hnh Mu tin hin hnh

Hng tm kim n cui Recordset n u Recordset n cui Recordset n u Recordset

Cc phng thc tm kim ny s khng lm ny sinh mt Recordset, n ch di chuyn n mu tin hp iu kin v mu tin tr thnh mu tin hin hnh, nu khng tm thy, mu tin hin hnh khng thay i, khi ny thuc tnh NoMacth c gi tr l TRUE. Ngoi ra i tng Recordset cn cung cp phng thc Seek gip ta tm kim trn mt Recordset kiu bng c ch mc, c php nh sau: recordset.Seek comparison, key1, key2...key13

Trang 113

Visual Basic

Thnh phn recordset comparison key1, key2...key13

ngha Mt bin i tng Recordset kiu bng nh ngha ch mc thng qua thuc tnh Index. Mt trong cc biu thc so snh sau <,<=, =, >=, or >. Mt hoc nhiu gi tr tng ng vi trng ch mc hin hnh, ta c th dng ti a n 13 gi tr.

III. S dng iu khin DAO Data


Hin ti mc d vic lin kt vi c s d liu u c th thc hin thng qua iu khin ADO Data vi nhiu tnh nng mnh hn, tuy nhin ta cng c th dng iu khin DAO Data tham kho n c s d liu Jet cng nh mt s loi c s d liu khc nh DBASE, vn bn, bng tnh Excel m chng ta khng cn dng ODBC. iu khin ny chnh l iu khin Data m ta xt chng 8. Tuy nhin khi s dng iu khin ny th ta cn ch n thuc tnh Connect, y l thuc tnh quy nh loi d liu s kt ni. Mt s kiu c s d liu c h tr bi iu khin DAO Data: - Microsoft Access. - DBASE III, IV v 5.0. - Phin bn Excel 3.0, 4.0, 5.0 v 8.0. - Phin bn FoxPro 2.0,2.5 2.6 v 3.0. - Lotus spreadsheet vi nh dng WK1, WK3 v WK4. - Phin bn Paradox 3.x, 4.x v 5.x. - Tp tin vn bn ASCII c phn cch.

Trang 114

Visual Basic

Chng 10 : ODBC V CC I TNG D LIU T XA (REMOTE DATA OBJECTS)


Mc tiu: Chng ny gii thiu v th vin i tng Remote Data Objects, cch thc c s dng truy cp cc i tng d liu t xa. Hc xong chng ny, sinh vin phi nm bt c cc vn sau: - Khi nim Open Database Connectivity (ODBC). - S dng iu khin d liu t xa (Remote Data Control) truy cp d liu. - Cy phn cp ca m hnh i tng RDO. - S dng th vin i tng RDO tng tc vi c s d liu trong VB. Kin thc c lin quan: - Cc cu trc lp trnh trong VB. - Cu lnh truy vn d liu trong c s d liu. - Nm bt c cc m hnh DAO l mt li th v lc vic tip thu m hnh ADO c nhanh hn. Ti liu tham kho: - Microsoft Visual Basic 6.0 & Lp trnh c s d liu Chng 23, trang 735 - Nguyn Th Ngc Mai (ch bin), Nh xut bn Gio dc - 2000. - T hc Lp trnh c s d liu vi Visual Basic 6 trong 21 ngy (T2) Chng 17, trang 227 - Nguyn nh T (ch bin), Nh xut bn Gio dc - 2001.

Trang 115

Visual Basic

I. Open Database Connectivity (ODBC)


1. Khi nim
ODBC l cng ngh Windows cho php ng dng Client ni vi c s d liu t xa. Nm trn my Client, ODBC lm cho ngun d liu quan h tr nn trong sut i vi ng dng Client. V th ng dng Client khng cn quan tm n kiu c s d liu l g. ODBC gm 3 phn: - Trnh qun l iu khin (driver manager). - Mt hay nhiu trnh iu khin (driver). - Mt hay nhiu ngun d liu (data source).

2. Kin trc
Kin trc ODBC cha kt ni gia ng dng Client v c s d liu Server thng qua trnh qun l iu khin ODBC.
ng dng Client Ngun d liu ODBC Trnh qun l iu khin ODBC Trnh iu khin ODBC

DB

Hnh 10.1: Kin trc ODBC trnh by kt ni gia ng dng Client v CSDL Server thng qua trnh qun l iu khin ODBC

3. To ngun d liu ODBC


mt ng dng Client ni vi c s d liu Client/Server dng ODBC; trc ht, ta phi cung cp thng tin v ngun d liu ODBC trn Client. Mi Server yu cu nhng gi thng tin khc nhau ni vi Client. ODBC cung cp cho thng tin ny mt tn n gin ta c th tham chiu n n, thay v phi thit lp gi thng tin t u mi ln ta cn n n. ng dng Client c th tham chiu mt cch d dng n t hp ca mt iu khin, mt c s d liu v c th thm mt ngi s dng v mt khu. Tn ny chnh l tn ngun d liu hay Data Source Name (DSN). to mt tn ngun d liu ODBC trn my Client, ta lm nh sau: o M Control Panel. o Chn Administrative Tools\Data Source (ODBC), hp thoi qun tr ngun d liu xut hin:

Trang 116

Visual Basic

Hnh 10.2: Hp thoi qun tr ngun d liu ODBC

o Ta c th to mt trong ba kiu ngun d liu ODBC: User DSN: ch c ngi dng to ra n mi c th s dng (trn my ang dng). System DSN: bt k ai s dng my ny u c th dng c. y cng l kiu ngun d liu m ta cn to khi ci t ng dng c s d liu Web. File DSN: c th c copy v s dng bi my khc. o Khi hp thoi ODBC m ra, chn lp UserDSN (hay System DSN), To mt kt ni mi, nhn nt Add, mn hnh s hin ra nh sau:

Hnh 10.3: La chn loi c s d liu cn thit to kt ni

Trang 117

Visual Basic

o Chn loi CSDL m ta mun thao tc (Access, Foxpro, SQL Server,), nhn Finish. Sau khi nhn Finish, mt mn hnh s hin ra cho php ta nhp vo Data Source Name, y l tn ca kt ni CSDL. Tn ca kt ni khng cn phi ging vi tn ca c s d liu. Phn Description dng g cc thng tin m t v kt ni. Ngoi ra ta cn phi chn ng dn n tp tin CSDL tng ng.

4. Truy cp ngun d liu vi iu khin DAO Data v ODBC Direct


DAO t ng np b my c s d liu Jet mi khi n truy cp d liu Client/Server, thm ch khi ta khng thc s s dng c s d liu Jet/Access. Ngoi ra ta cn c thm ty chn s dng ODBCDIRECT truy cp d liu Client/Server. y l mt chuyn i truy cp c s d liu server trc tip thng qua DAO m khng cn np b my c s d liu Jet. Ty chn ny thch hp khi ta phi dng DAO truy cp d liu Client/Server m khng cn bn tm v tnh linh hot, kh nng s dng li v tnh d bo tr ca chng trnh. V d: To mt Form c s dng ODBCDirect v DAO Data Control. o To d n mi. o Tham chiu n iu khin li Microsoft Data Bound Grid Control trong mc Project\Components. o To Form c dng sau:

2
Hnh 10.4: V d v ODBC Direct

1: DBGrid. Name: dbGrid1. 2: Data Control. Name: Data1. o i thuc tnh DefaultType ca DataControl l 1 Use ODBC. iu ny lm cho chng trnh thc hin nhanh hn. o Thuc tnh Connect ca Data1 l: ODBC;DSN=DBHH o t thuc tnh Record Source ca Data Control: Select * From THANGHOA t thuc tnh Data Source ca DBGrid1 l: Data1. Lu d n v thc thi chng trnh.

Trang 118

Visual Basic

II. Truy cp d liu dng iu khin d liu t xa


iu khin d liu t xa (Remote Data Control - RDC) l mt cch khc truy cp d liu t xa trong cc ng dng Visual Basic. iu khin ny dng mt giao din lp trnh tng t nh iu khin ADO Data hay DAO Data. V d: S dng RDC hin th d liu trn li: o y ta c s dng Remote Data Control v li hin th d liu, do ta tham chiu n cc thnh phn ny bng cch chn Project\Components, thit lp tham chiu n Microsoft Remote Data Control v Microsoft Data Bound Grid Control. Nhp OK. o Thit k Form c dng sau:

1
Hnh 10.5: V d v Remote Data Control

1: RemoteDataControl. Name: rdcHangHoa 2: DBGrid. Name: dbgHangHoa. o t thuc tnh DataSourceName ca iu khin rdcHangHoa l DBHH (DSN to trc y). o nh thuc tnh SQL ca iu khin rdcHangHoa l: Select * From THANGHOA o Ch nh thuc tnh DataSource ca iu khin dbgHangHoa l rdcHangHoa. o Thc thi chng trnh.

III. Remote Data Object (RDO)


i tng d liu t xa (Remote Data Objects - RDO) c m t dng hnh cy tng t nh DAO. Tuy nhin m hnh i tng RDO n gin hn DAO.

Trang 119

Visual Basic

D vy ta khng th dng RDO to i tng c s d liu nh bng, view, th tc cha sn tham chiu n RDO ta vo Project\References\Microsoft Remote Data Object 2.0. M hnh i tng RDO:

Hnh 10.6: Kin trc ca RDO

III.1 i tng RDOEngine


y l i tng cp cao nht trong m hnh RDO, gii thiu v cc thnh phn ca m hnh. Ta khng cn phi khi to i tng ny cch tng minh bi v n c khi to t ng. i tng rdoEngine cho php ta truy cp ton b cc i tng khc trong m hnh RDO. Ngoi ra, n cn c s dng to mi mt Data Source Name (DSN) nh vo phng thc rdoRegisterDataSource. on m lnh di y cho php ng k mt ngun d liu mi cho c s d liu Pubs (ca SQL Server):
Dim strTemp As String strTemp = Description=Test DSN & Chr(13) & _ SERVER=(local) & Chr(13) & Database=Pubs rdoEngine.rdoRegisterDataSource MyTestPubs, SQL Server, _ True, strTemp

III.2 i tng RDOError


i tng li xc nh thao tc no trn mt ngun d liu gy ra li. y khng phi l cc li ca Visual Basic v n xy ra i vi c s d liu. V th, ta Trang 120

Visual Basic

khng cn phi by li cho cc li ny. Thay vo , tp hp rdoErrors s xc nh thao tc ca ta l thnh cng hay tht bi. Chng hn nh on m lnh sau:
Dim objError As RDO.rdoError Dim strError As String For Each objError In rdoEngine.rdoErrors strError = strError & objError.Description & vbCrLf Next ' Display Errors MsgBox "The following errors occurred: " & strError

III.3 i tng RDOEnvironment


i tng ny ch ra cch thc bo mt ca c s d liu. Ta s dng i tng ny xc nh nh danh ngi dng cng mt khu hay thi hnh mt phin giao dch (Transation) trn c s d liu. i tng ny khng c khi to trc tip, chng c to ra t ng.

III.4 i tng RDOConnection


Phn ln cc chc nng ca RDO bt u vi i tng rdoConnection; i tng ny cho php thit lp mt ni kt n mt ngun d liu ODBC. Khi ngun d liu c nh ngha, cc thuc tnh cng cc phng thc ca i tng ny c s dng giao tip vi ngun d liu y. on m lnh n gin di y cho php to mt ni kt n ngun d liu c tn l Biblio.
Set m_Connection = New RDO.rdoConnection m_Connection.Connect = DSN=Biblio m_Connection.EstablishConnection

III.4.1 i tng RDOQuery i tng ny c s dng thc thi cc cu truy vn trn ngun d liu ODBC. Cc cu truy vn ny c th l cc cu SQL hay l li gi thc thi cc th tc lu tr sn trong c s d liu. Nu l li gi cc th tc lu tr sn th tham s ca cc th tc ny c xc nh nh i tng rdoParameter. Hai yu t then cht xc nh mt i tng rdoQuery l ni kt no cn truy vn v cu lnh SQL truy vn d liu. V d: Gi s ta c on m lnh bn trn to ni kt n ngun d liu Biblio. on m lnh di y thc thi cu lnh SQL ly v thng tin v tt c cc nh xut bn:
To cu SQL Dim strSQL As String strSQL = SELECT * FROM Publishers To i tng Query Dim m_Query As RDO.rdoQuery Set m_Query = New RDO.rdoQuery Set m_Query.ActiveConnection = m_Connection

Trang 121

Visual Basic
m_Query.SQL = strSQL m_Query.Excute

III.4.2 i tng RDOResultset i tng ny qun l cc mu tin c tr v t mt ni kt qua ODBC. Tp cc mu tin c th c tr v thng qua i tng rdoQuery hay nh phng thc OpenResultset ca mt i tng rdoConnection. Trong mt s trng hp, tp cc mu tin c truy xut nh vo thuc tnh LastQueryResults ca i tng rdoConnection:
Set m_Resultset = m_Connection.LastQueryResults

Khi i tng rdoResultset c to ra, ta c th di chuyn n mu tin xc nh bng cc phng thc MoveFirst, MoveLast, MoveNext, MovePrevious. III.4.3 i tng RDOTable i tng ny xc nh mt bng trong mt ngun d liu ODBC. i tng ny khng c s dng cho cc thao tc truy xut d liu m n ch c s dng khi ta cn xc nh cu trc cc bng ca c s d liu ca ta. III.4.4 i tng RDOParameter i tng ny xc nh cc tham s u vo hay cc kt qu nhn c t cc th tc lu tr sn trong c s d liu.

III.5 S dng RDO trong chng trnh


III.5.1 Thit lp kt ni n ngun d liu o Trc tin ta phi tham chiu n m hnh i tng RDO. o Ni kt n ngun d liu nh i tng rdoConnection. - Khai bo mt bin i tng rdoConnection. - Khi tao i tng, sau thit lp cc thuc tnh v cc phng thc thch hp hon tt kt ni; trong c hai thuc tnh cn quan tm l chui kt ni (ConnectionString) v loi con tr (Cursor Driver). o Thit lp ni kt nh phng thc EstablishConnection ca i tng rdoConnection. III.5.2 Chui kt ni (ODBC Connect String) Chui kt ni c s dng khi thit lp ni kt n ngun d liu. y l mt chui (String) xc nh cc thng tin quan trng gi n trnh iu khin ODBC truy cp d liu. Cc thng tin cn quan tm: tn ngun d liu (DSN Name), User ID, Password. Cc tham s ca chui kt ni ODBC: Tham s DSN UID PWD DRIVER Tn ngun d liu ODBC Tn ngi dng c s d liu Mt khu truy cp Trnh iu khin DBC Trang 122 ngha

Visual Basic

DATABASE SERVER WSID APP

Tn ca c s d liu c ni kt Tn my cha c s d liu phc v (database server) Tn my cha c s d liu khch (database client) Tn ca tp tin chng trnh (*.exe)

Chui kt ni c xc lp nh thuc tnh Connect ca i tng rdoConnection. V d: Chui ni kt n 1 DSN ca c s d liu Access Biblio:
Set m_Connection = New RDO.rdoConnection m_Connection.Connect = "DSN=Biblo" m_Connection.EstablishConnection

Chui ni kt n DSN Publications ca c s d liu SQL Server:


Set m_Connection = New RDO.rdoConnection m_Connection.Connect = "DSN=Biblo;UID=sa;PWD=;" m_Connection.EstablishConnection

Bn cnh ni kt chun thng qua ODBC, RDO cng h tr loi ni kt DSN cp thp (DSN-less connection). i vi loi ny, ta khng cn nh ngha tn ngun d liu (DSN) trong b qun tr ODBC ca Windows. Lc ny tt c cc thng tin v c s d liu c cung cp y trong chui ni kt. V d: Chui ni kt cp thp n c s d liu SQL Server Pubs:
Set m_Connection = New RDO.rdoConnection m_Connection.Connect ="DRIVER={SQL Server}; & _ SERVER=(local);DATABASE=Pubs;UID=admin;PWD=;DSN=;" m_Connection.EstablishConnection

III.5.3 Trnh iu khin con tr (Cursor Drivers) Trnh iu khin con tr xc nh cch thc tp cc mu tin tr v t c s d liu c lu tr nh th no, c th chng c lu tr ti my ch (server) hay my trm (client). Trnh iu khin con tr c thit lp nh thuc tnh CursorDriver ca i tng Connection (trc khi gi thc thi phng thc EstablishConnection) v cc gi tr sau c th c cho n: Gi tr rdUseIfNeeded ngha Trnh iu khin ODBC t ng xc nh loi con tr (c lu pha server hay client). Nu c th, con tr loi c lu pha server c c. Xc nh loi con tr ca ODBC chun, ngha l tp tt c cc mu tin c lu my client. Tp cc mu tin c lu phia server. Tuy nhin loi con tr ny khng thch hp lm trong mi trng a ngi dng. Trang 123

rdUseODBC rdUseServer

Visual Basic

rdUseClientBatch rdUseNone

Ging nh rdUseODBC nhng c th c cp nht ng thi. Khng s dng con tr, tp cc mu tin c tr v mt ln duy nht lc chng c yu cu. Ta ch c th di chuyn ti trong tp cc mu tin kt qu.

Trang 124

Visual Basic

Chng 11: I TNG D LIU ACTIVEX


(ACTIVEX DATA OBJECTS)
Mc tiu: Chng ny gii thiu v th vin ActiveX Data Object (ADO), th vin i tng c s dng nhiu nht trong cc ng dng truy cp c s d liu dng khch/ch (Client/Server) hin nay. Hc xong chng ny, sinh vin phi nm bt c cc vn sau: - Kin trc OLEDB/ADO. - Cy phn cp ca m hnh i tng ADO. - S dng th vin i tng ADO tng tc vi c s d liu trong VB. Kin thc c lin quan: - Cc cu trc lp trnh trong VB. - Cu lnh truy vn d liu trong c s d liu. - Nm bt c cc m hnh DAO, RDO l mt li th v lc vic tip thu m hnh ADO c nhanh hn. Ti liu tham kho: - Microsoft Visual Basic 6.0 & Lp trnh c s d liu - Chng 27, trang 877 - Nguyn Th Ngc Mai (ch bin) Nh xut bn Gio dc 2000. - T hc Lp trnh c s d liu vi Visual Basic 6 trong 21 ngy (T2) Chng 18, trang 277 - Nguyn nh T (ch bin) - Nh xut bn Gio dc - 2001.

Trang 125

Visual Basic

ADO (ActiveX Data Objects) l cng ngh truy cp c s d liu hng i tng tng t nh DAO. Hin nay, ADO c Microsoft xem k thut chnh truy cp d liu t Web Server.

I. Kin trc OLE DB/ADO


ADO s dng OLEDB nh l trnh cung cp d liu c s. Trnh cung cp OLE DB cho php ngi lp trnh c th truy xut d liu t c hai ngun: quan h v phi quan h. VB6.0 h tr cc trnh cung cp cc b cho SQL Server, Oracle v Microsoft Jet/Access. Client Application
Remote Data Objects ODBC Driver ActiveX Data Objects OLE DB Data Provider OLE DB

ODBC Driver Manager

Document Server

Email Server Relational Database

Hnh 11.1: M hnh lp trnh CSDL Client - Server dng RDO v ADO

Ta ch cn lp trnh vi phn giao din ngi s dng pha Client. Vic truy cp c s d liu trn trnh duyt Web hay ng dng VB c thc hin nh ADO. Cu trc ny cho php ta lp trnh mt cch nht qun trn Web cng nh trn ng dng.

Trang 126

Visual Basic

Web Browser

HTTP

MS Internet Information Server with Active Server Pages

DCOM

ActiveX Server (DLL or EXE)

ADO

OLE DB

Hnh 11.2: Truy cp CSDL t trnh ng dng & trnh duyt WEB theo ADO

II. M hnh ADO


M hnh ADO c trnh by theo dng phn cp (tng t DAO v RDO). c th lp trnh vi th vin ADO, ta phi tham chiu n th vin ny bng cch chn Project\References\Microsoft ActiveX Data Object 2.0.

Hnh 11.3: M hnh ADO

M hnh ADO c 3 i tng ct li: Trang 127

Database

Client Application

Visual Basic

o Connection: kt ni CSDL tht s. o Command: thc thi cc cu truy vn da vo kt ni d liu. o RecordSet: l tp cc mu tin c chn t cu truy vn thng qua i tng Command.

III Cc i tng trong m hnh ADO


III.1 i tng Connection
Dng phng thc Open ca i tng Connection thit lp kt ni vi ngun d liu. thc hin iu ny ta cn phi thng bo vi ADO thng tin kt ni vi dng chui theo kiu chui kt ni ca ODBC. Thuc tnh ConnectionString thc hin iu ny. Ngoi ra ta cn c th chn trnh cung cp bng cch quy nh gi tr ca thuc tnh Provider ca i tng. ni kt vi d liu, ta cn xc nh trnh cung cp OLE DB v chui kt ni. Nu khng xc nh c hai yu t ny, ta s s dng trnh cung cp mc nh l ODBC: MSDASQL. Mt s trnh cung cp c sn: Microsoft OLEDB cho cc trnh iu khin ODBC. Microsoft OLEDB cho Oracle. Microsoft Jet 3.51 OLEDB (Access). Microsoft Jet 4.0 OLEDB (Access) Microsoft OLEDB cho SQL Server. Microsoft OLEDB cho cc dch v th mc. V d: i vi trnh cung cp ODBC, thuc tnh ConnectionString c th l mt DSN hay l mt kt ni khng c DSN (DSN cp thp).
Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Provider = "MSDASQL" cn.ConnectionString = "DSN=Baigiang" cn.Open

Kt ni DSN cp thp:
Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Provider = "MSDASQL" cn.ConnectionString = "DRIVER={SQL Server}; & _ DATABASE=Baigiang;UID=myuser;PWD=mypassword;" cn.Open

Trong trng hp ny vic kt ni vi c s d liu Server c thc hin nhanh hn v chng trnh khng cn c thng tin v cc DSN trn my Client, tuy nhin thng tin v ngun c s d liu li kt cht vi chng trnh bin dch. kt ni vi c s d liu Access, ta dng trnh cung cp Jet vi chui kt ni l ng dn n tp tin .mdb
Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Provider = "MicroSoft.Jet.OLEDB.4.0" cn.ConnectionString = "d:\data\baigiang.mdb"

Trang 128

Visual Basic
cn.Open

i vi c s d liu SQL Server, ta c th dng trnh cung cp SQLOLEDB.1, trong trng hp ny, chui kt ni tng t nh trng hp kt ni dng trnh cung cp ODBC khng c DSN, tuy nhin ta khng cn xc nh gi tr ca DRIVER:
Dim cn as ADODB.Connection Set cn = New ADODB.Connection cn.Provider = SQLOLEDB.1 cn.ConnectionString = DATABASE=DBHH; & _ SERVER=www;UID=user;PWD=user cn.Open

M v ng ni kt ngun d liu pht cc yu cu n ngun d liu s dng ADO, ta cn m kt ni n ngun d liu bng phng thc Open ca i tng Connection. C php y nh sau: connection.Open [connect], [userid], [password] Tt c cc tham s ca phng thc Open u l ty chn, nu nh cc thng s ny c xc nh thng qua cc thuc tnh khc ca i tng Connection th ta khng cn m t chng y. Khi hon thnh tt c cc thao tc lin quan n ni kt ny, ta cn phi ng ni kt mt cch tng minh thng qua phng thc Close ca i tng Connection. connection.Close ng ni kt mt cch tng minh s m bo rng tt c cc ti nguyn lin quan n ni kt ny trn Server cng nh Client u c gii phng mt cch hp l. Xc nh v tr con tr Con tr (Cursor): mt tp cc mu tin c tr v cho chng trnh. V tr con tr c xc nh nh thuc tnh CursorLocation (c c i tng Recordset). C 2 gi tr c th ch nh: adUseClient: con tr pha Client. adUseServer: con tr pha Server (mc nh). Thc thi cc cu truy vn hnh ng Cc cu truy vn hnh ng (Insert, Update, Delete) c thc hin nh phng thc Execute ca i tng Connection; ngoi ra phng thc ny cng c th c s dng thc thi cc th tc lu tr sn trong c s d liu hay cc cu SELECT. C php phng thc ny nh sau: Nu khng c kt qu tr v: connection.Execute CommandText, RecordsAffected, Options C kt qu tr v: Set recordset = connection.Execute (CommandText, RecordsAffected, Options) Trong : - connection: i tng Connection. - recordset: i tng Recordset l kt qu tr v ca phng thc Execute, tuy nhin, ngi ta thng t khi s dng cch ny. Thay vo , ngi ta thng s dng phng thc Open ca i tng Recordset. Trang 129

Visual Basic

- CommandText: l mt chui xc nh cu truy vn hnh ng, SELECT, th tc lu tr sn hay tn mt bng trong c s d liu. - RecordEffected: Ty chn, l mt s nguyn di (Long) xc nh trnh cung cp tr v bao nhiu mu tin tha iu kin. - Options: Ty chn, l mt s nguyn di (Long) xc nh trnh cung cp s nh gi cc i s ca CommandText nh th no. Thuc tnh Mode: Xc nh trnh cung cp c th hn ch truy cp n c s d liu khi c mt recordset ang m. Cc gi tr c th l: Hng s adModeUnknown adModeRead adModeWrite adModeReadWrite adModeShareDenyRead adModeShareDenyWrite adModeShareExclusive adModeShareDenyNone Gi tr 0 1 2 3 4 8 12 16 ngha Mc nh, ch nh quyn hn cha thit lp hay khng th xc nh M Recordset vi quyn ch c M Recordset vi quyn ch ghi M Recordset vi quyn c/ghi Ngn ngi khc m kt ni vi quyn ch c Ngn ngi khc m kt ni vi quyn ch ghi Ngn ngi khc m kt ni Ngn ngi khc m kt ni vi bt c quyn no

III.2 i tng Recordset


c th khi to mt i tng Recordset ta c th thc hin mt trong hai cch: o Phng thc Execute ca i tng Connection. Tuy nhin cch ny ta ch to c cc Recordset ch c v ch c th di chuyn ti. o Xc lp cc thng s thch hp cho i tng Recordset ri thc thi phung thc Open ca i tng Recordset. iu ny c thc hin nh cc bc: Sau khi khi to i tng Connection, ch nh Recordset l ca i tng Connection trn. Thit lp cc thuc tnh thch hp ca Recordset (Source, LockType). Thc thi cu truy vn ni kt nh phng thc Open. III.2.1 Thuc tnh CursorType (loi con tr) Xc nh loi con tr c tr v t c s d liu. Cc gi tr c th nhn: Hng Gi tr M t adOpenForwardOnly 0 Ch c th di chuyn pha trc adOpenKeyset 1 Khng th thy cc mu tin do ngi dng khc thm vo nhng khi h xa hay sa i mu tin s lm nh hng n cc mu tin ta ang lm vic. adOpenDynamic 2 C th thy ton b s thay i do ngi Trang 130

Visual Basic

adOpenStatic

dng khc tc ng. Bn sao tnh ca tp mu tin. Mi s thay i ca ngi dng khc ta khng thy c

III.2.2 Thuc tnh LockType (kha mu tin) Xc nh cch thc kha mu tin trong Recordset. Dng tnh nng ny khi mun kim sot cch thc cp nht mu tin vi nhiu ngi dng trong c s d liu. Hng Gi tr 1 2 M t

adLockReadOnly adLockPessimistic

adLockOptimistic adLockBatchOptimistic III.2.3 Thuc tnh Source

3 4

Mc nh - Ch c. Kha trang bi quan. Mu tin trong RecordSet b kha khi bt u sa i & tip tc kha cho n khi thi hnh phng thc Update hay di chuyn sang mu tin khc. Kha trang lc quan. Mu tin ch b kha ngay lc thi hnh phng thc Update hay di chuyn sang mu tin khc. Kha trang lc quan hng lot. H tr cp nht nhiu mu tin cng mt lc.

y l mt chui xc nh cu truy vn ly d liu, c th l tn ca bng hay tn ca th tc lu tr sn. III.2.4 Thuc tnh ActiveConnection y l mt thuc tnh i tng xc nh Recordset l ca ni kt no trong chng trnh. III.2.5 V d s dng i tng Recordset trong chng trnh i tng Recordset c th c s dng l i tng ngun d liu (DataSource) ca iu khin li: Microsoft DataGrid Control 6.0 (OLEDB). Nh iu khin li ny ta c th hin th d liu t mt Recordset theo dng hng v ct. Chng hn ta c th hin th trn li thng tin v cc mt hng cng vi m loi hng ca n:
Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Private Sub Form_Load() Set cn = New ADODB.Connection cn.Provider = "Microsoft.Jet.OLEDB.3.51" cn.ConnectionString = "F:\Data\DBHH.mdb" cn.Open

Set rs = New ADODB.Recordset


rs.Source = "SELECT MaHang, TenHang, DVTinh & _

Set rs.ActiveConnection = cn rs.CursorLocation = adUseClient

TenLoai FROM THangHoa, TLoaiHang WHERE & _ THangHoa.MaLoai = TLoaiHang.MaLoai" Trang 131

Visual Basic
rs.Open Set grdHH.DataSource = rs End Sub

Kt qu thc thi ca chng trnh ny nh sau:

*: Microsoft DataGrid Control 6.0 (OLEDB): Name: grdHH. III.2.6 Cp nht v thm mi mu tin

Hnh 11.4: S dng Datagrid hin th d liu t Recordset

Thm mi mu tin - M Recordset - Thi hnh phng thc AddNew - Gn gi tr cho cc trng trong mu tin ca Recordset - Lu li mu tin bng cch thi hnh phng thc Update (hay UpdateBatch). Cp nht mu tin - M Recordset - Thc hin cu lnh truy vn nhn v cc mu tin thch hp. - Di chuyn n mu tin cn cp nht li gi tr. - Gn li gi tr cho cc trng. - Thi hnh phng thc Update (hay UpdateBatch ty thuc vo LockType). Lu :Ch kha mu tin mc nh trong ADO l ch c, v vy ta phi i thuc tnh LockType ca i tng Recordset sang ch son tho trc khi thi hnh cp nht hay thm mi mu tin. III.2.7 Thuc tnh CursorLocation Xc nh tp mu tin tr v t c s d liu c lu u (Server hay Client, Server l mc nh). Thuc tnh cng ging thuc tnh CursorLocation ca i tng Connection. III.2.8 Recordset ngt kt ni Khi chng ta dng con tr pha Client, ta c kh nng ngt kt ni vi Server c s d liu m vn tip tc lm vic vi d liu. Cch ny cho php ng dng tr nn Trang 132

Visual Basic

linh hot hn bi v nhiu ngi dng c th lm vic vi cng mt d liu ti mt thi im nu nh h khng c ni kt vi server. ngt ni kt vi Server, ta quy nh thuc tnh ActiveConnection ca i tng Recordset l Nothing. V d:
Dim cn As ADODB.Connection Private Sub Form_Load() Set cn = New ADODB.Connection cn.Provider = "Microsoft.Jet.OLEDB.3.51" cn.ConnectionString = "F:\Data\GiangDay.mdb" cn.Open End Sub Public Function GetList (strState As String) _ As ADODB.Recordset Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset Set rs.ActiveConnection = cn rs.CursorLocation = adUseClient rs.LockType = adLockBatchOptimistic rs.CursorType = adOpenKeyset rs.Open strState Set rs.ActiveConnection = Nothing Set GetList = rs Set rs = Nothing End Function

thi hnh cng mt hnh ng trn mt mu tin, ta sa i li cc thuc tnh ca i tng Recordset.
rs.LockType = adLockBatchOptimistic rs.CursorType = adOpenKeyset

Chng ta thit lp gi tr cc thuc tnh li nh trn xc nhn rng Recordset c th ni kt li cp nht v sau. Sau , ta s thit lp mt hm nhn Recordset ngt kt ni lm tham bin to mt i tng Recordset khc cp nht d liu.
Public Sub WriteData(rsDis As ADODB.Recordset) Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset Set rs.ActiveConnection = cn rs.Open rsDis, cn rs.UpdateBatch End Sub

Gi thc thi th tc WriteData:


Private Sub cmdWrite_Click() WriteData GetList("Select * From THanghoa") End Sub

Trang 133

Visual Basic

III.3 i tng Command


y l i tng c ngi lp trnh s dng khi mun thi hnh cc th tc lu tr sn hay nhng cu truy vn c tham s. Vi i tng Command ta c th thi hnh mt s cng vic nh sau: - S dng thuc tnh CommandText nh ngha cc on Text thi hnh c. Thng thng thuc tnh ny dng thit lp mt cu lnh SQL hoc mt li gi th tc lu tr sn, hay nhng dng khc m trnh cung cp h tr - Xy dng chui cc i s ca cu truy vn cng nh cc tham s ca cc th tc lu tr sn thng qua i tng Parameter hoc tp hp Parameters. - Thc hin mt cu truy vn v tr v i tng Recordset thng qua phng thc Execute. - Xc nh kiu ca i tng Command nng cao hiu qu thng qua thuc tnh CommandType. - Xc nh s giy m trnh cung cp phi ch khi thi hnh mt i tng Command thng qua thuc tnh CommandTimeOut. Cc kiu ca i tng Command c trnh by trong bng di y: Hng adCmdText ngha nh gi thuc tnh CommandText di dng Text ca mt cu lnh hoc mt li gi th tc lu tr sn. nh gi thuc tnh CommandText nh l tn ca mt bng khi tt c cc trng ca bng s c tr v bi cu lnh truy vn ni ti. nh gi thuc tnh CommandText nh l tn ca mt bng khi m tt c cc trng ca bng s c tr v. nh gi thuc tnh CommandText nh l tn ca mt th tc lu tr sn. Ch nh rng thuc tnh CommandText l mt cu lnh hoc mt th tc lu tr sn khng tr v bt k dng no (v d nh lnh thm mi d liu ). Cu trc ny lun bao hm adCmdText, adCmdStoredProc.

adCmdTable

adCmdTableDirect adCmdStoredProc

adExecuteNoRecords

Thuc tnh Parameter c xc lp thng qua hai phng thc CreateParameter v Append Set parameter = command.CreateParameter (Name, Type, _ Direction, Size, Value) Name: ty chn, chui xc nh tn ca i tng Parameter. Type, Direction: gi tr xc n kiu ca i tng Parameter

Trang 134

Visual Basic

Size: gi tr xc nh di ti a ca gi tr i tng Parameter bng k t hoc Byte. Value: bin xc nh gi tr ca Parameter truyn. Nhng gi tr c th ca thuc tnh Direction: Hng adParamUnknown adParamInput adParamOutput adParamInputOutput adParamReturnValue M t Khng bit chiu ca Parameter. Mc nh, xc nh y l tham s u vo. Tham s u ra. Va l tham s u vo va l tham s u ra. y l gi tr tr v.

Phng thc Append dng a i tng Parameter va to vo tp hp. Chng ta s xt qua v d dau y:
Public Sub ActiveConnectionX() Dim cnn1 As ADODB.Connection Dim cmdByRoyalty As ADODB.Command Dim prmByRoyalty As ADODB.Parameter Dim rstByRoyalty As ADODB.Recordset Dim rstAuthors As ADODB.Recordset Dim intRoyalty As Integer Dim strAuthorID As String Dim strCnn As String ' nh ngha 1 i tng command cho mt th tc lu tr sn Set cnn1 = New ADODB.Connection cnn1.Provider = "SQLOLEDB.1" cnn1.ConnectionString = "DATABASE=Pubs;" & _ "SERVER=(local);UID=user;PWD=user;" cnn1.Open Set cmdByRoyalty = New ADODB.Command Set cmdByRoyalty.ActiveConnection = cnn1 cmdByRoyalty.CommandText = "byroyalty" cmdByRoyalty.CommandType = adCmdStoredProc cmdByRoyalty.CommandTimeout = 15 ' nh ngha i s u vo cho th tc lu tr intRoyalty = Trim(InputBox( "Enter royalty:")) Set prmByRoyalty = New ADODB.Parameter

Trang 135

Visual Basic
prmByRoyalty.Type = adInteger prmByRoyalty.Size = 3 prmByRoyalty.Direction = adParamInput prmByRoyalty.Value = intRoyalty cmdByRoyalty.Parameters.Append prmByRoyalty ' To mt recordset bng cch thi hnh i tng Command. Set rstByRoyalty = cmdByRoyalty.Execute() ' M bng Authors ly tn hin th Set rstAuthors = New ADODB.Recordset rstAuthors.Open "authors", cnn1, , , adCmdTable Debug.Print "Authors with " & intRoyalty & _ " percent royalty" Do While Not rstByRoyalty.EOF strAuthorID = rstByRoyalty!au_id Debug.Print , rstByRoyalty!au_id & ", "; rstAuthors.Filter = "au_id = '" & _ strAuthorID & "'" Debug.Print rstAuthors!au_fname & - & _ rstAuthors!au_lname rstByRoyalty.MoveNext Loop rstByRoyalty.Close rstAuthors.Close cnn1.Close End Sub

III.4 i tng Field


Dng i tng Field v tp hp Fields khi ta mun truy cp gi tr ca mt trng ca mt Recordset no , k thut ny tng t nh i vi DAO.

IV. Dch v d liu t xa ca ADO


y l k thut s dng th vin Remote Data Service (RDS) vn chuyn ADO Recordset t server n my tnh client Recordset kt qu c lu my client v chng c ngt kt ni n server. RDS l mt phn ca Microsoft Data Access Components (MDAC). Cc thng tin v RDS c th tm thy trang http://www.microsoft.com/data/. RDS gm 2 phn chnh: - RDS 1.5 server: i km khi ci t Internet Information Server (IIS) 4.0. - RDS 1.5 client i km khi ci t Internet Explorer (IE) 4.0. Th vin ADODB gm cc thnh phn hot ng ch yu pha server (server side) nh cc i tng Connection, Command, Error, Parameters ... S tht hiu qu nu s dng cc thnh phn ny giao tip vi c s d liu. Tuy nhin trong trng hp s dng cc chc nng cn phi c pha client th ta cn phi phn phi km theo Trang 136

Visual Basic

mt s tp tin v s dng ODBC cho mi my client. i tng ADODB Recordset khng th phn phi vi cc thnh phn ca RDS Client. Thay vo th vin i tng Microsoft ActiveX Data Objects RecordSet (ADOR) c s dng. Th vin ny gm cc thnh phn hon ton nm pha client v cho php ta c cc thao tc trn mt recordset tht s pha client. ADOR khng c cc i tng Connection, Command, Error, hay Parameters. ADOR c cc chc nng cho php phn phi recordset vi cc thnh phn RDS client. Mt ADO Recordset khng th vn chuyn thng qua giao thc http. Thay vo RDS c s dng nhn v tng tc d liu t xa thng qua http. Mt proxy RDS c s dng kim sot t xa mt ADOR Recordset ngt kt ni truyn thng qua giao thc http. Nh vy RDS l vt cha (container) cho php lu tr v truy cp t xa cc ADOR Recordset. Ta c th dng i tng DataControl ca RDS nhn v i tng Recordset ca ADO t Internet. c th s dng k thut ny, ta cn tham kho cc thuc tnh ch yu ca i tng DataControl. - Thuc tnh Connect: DataControl.Connect = "DSN=DSNName;UID=usr;PWD=pw;" - Thuc tnh Server: Xc nh my ch Web cha ngun d liu bao gm tn v giao thc ni kt. - Thuc tnh SQL: L cu lnh truy vn nhn v i tng Recordset DataControl.SQL = "QueryString" - Thuc tnh ExecuteOptions: xc nh vic thi hnh cc cu lnh truy vn mt cch ng b hay khng, cc gi tr l mt trong hai gi tr sau y: Hng adcExecSync Thi hnh ng b M t

adcExecAsync Mc nh, Thi hnh khng ng b. - Thuc tnh ReadyState: Xc nh trng thi ca iu khin. Gi tr adcReadyStateLoaded M t Cu truy vn hin hnh vn ang cn thc hin v cha c mt dng no c tr v. i tng Recordset ca RDS.DataControl cha th s dng. Tp hp dng ban u c tr v v cha trong i tng Recordset, cc dng tip theo vn ang c tr v. Tt c cc dng u c cha trong i tng Recordset.

adcReadyStateInteractive

adcReadyStateComplete

- Phng thc Refresh: thi hnh cu truy vn. - Thuc tnh Recordset: tr v Recordset kt qu. Trang 137

Visual Basic

Recordset = DataControl.Recordset - Phng thc DoEvents: y l hm ca VB, n s tr iu khin cho h iu hnh thc hin cc qu trnh khc.

Trang 138

Visual Basic

Chng 12: MI TRNG D LIU (DATA ENVIRONMENT)


Mc tiu: Chng ny gii thiu cch thc s dng mi trng d liu (Data Environment), cch thc to cc ng dng tng tc vi c s d liu cch nhanh chng trong VB 6.0. Hc xong chng ny, sinh vin c th: - S dng thnh tho mi trng d liu ca VB 6.0 to cc biu mu nhp liu. - S dng thnh tho mi trng d liu thit k cc cu truy vn d liu cch trc quan, iu ny lm cho vic thit k ng dng c tin li hn. Kin thc c lin quan: - Th vin i tng ADO. - Cu lnh SQL truy vn d liu. Ti liu tham kho: - T hc Lp trnh c s d liu vi Visual Basic 6.0 trong 21 ngy (T1) Chng 9, trang 395 - Nguyn nh T (ch bin) - Nh xut bn Gio dc - 2001.

Trang 139

Visual Basic

I) GII THIU V TRNH DATA ENVIRONMENT DESIGNER (DED)


Gii thiu Cng c DED l mt giao din trc quan rt mnh ca Visual Basic xy dng cc form rng buc d liu. DED cho php ta thao tc vi mt vi hp thoi to kt ni n ngun d liu (c s d liu) & cc ngun record (dataset hay recordset) mt cch nhanh chng. Cu trc chi tit ca DED Giao din DED ActiveX Designer DED s dng mt lp cc i tng Visual Basic gi l ActiveX Designers. ActiveX Designers c np vo mi trng son tho VB cng nh cc mc khc nh Menu, Form, Modul Tuy nhin cch thc thao tc trn n khc vi cc mc ny. Khi thao tc vi DED ta s dng cc mc trn menu ca trnh son tho DED xy dng mt tp hon chnh cc kt ni (Connection) & cc lnh d liu (Command) s dng trong chng trnh. Trong lc thao tc vi DED, ta c s dng 2 i tng khc nhau: i tng kt ni d liu (Connection): i tng ny nh ngha mt kt ni gia chng trnh ca ta & ngun d liu. i tng lnh d liu (Command): nh ngha mt tp cc record ly ra t kt ni d liu trn. Khi xc nh i tng Command, ta cn ch nh i tng Command ny ly d liu t u trong c s d liu bng vic xc lp ngun d liu (Data of Source). Ngun d liu ny xc lp cch thc ly d liu t c s d liu: ly thng qua mt TABLE, VIEW, STORED PROCEDURE, SQL Mi khi mt i tng Command c to ra & c gi thc thi, mt RecordSet ca i tng Command ny cng c kch hot. Lc ny tn ca RecordSet tng ng l: rs + Tn Command V d: Ta to mt i tng Command c tn l comHH, lc tn RecordSet tng ng l: rscomHH. Khi i tng Command c to ra, lc ny nu mun thao tc trn i tng Command ny, ta s thao tc trn RecordSet tng ng ca n. Thit k cc Form rng buc d liu khng cn m lnh: DED cho php ta thit k cc Form rng buc d liu khng cn m lnh. V d: Vi CSDL HangHoa.MDB; ta thit k mt Form cho Table HANGHOA bng cch s dng trnh DED nh sau: Bc 1: To ni kt n c s d liu HangHoa.MDB: Nu mc Data Environment khng c sn trong Project Explorer, ta chn Project\Components, nh du vo mc Data Environment trong ty chn Designers, nhp OK. Chn Project\More ActiveX Designers thm Data Environment vo mi trng son tho. Trong i tng Connection1, chn Properties, mt ca s hin ln: Trang 140

Visual Basic

Hnh 12.1: Thit lp ni kt d liu Chn Microsoft Jet 4.0 OLE DB Provider; chn Next. Chn c s d liu ta mun thao tc trong mc Select or Enter a Database Name Box; y ta chn CSDL HANGHOA.MDB (gi s nm trong ng dn D:\DED\HangHoa.Mdb). Nhp nt Test Connection kim tra ni kt vi CSDL c b li hay khng? Ta s nhp OK nu ni kt ny thnh cng (nu khng ta phi kim tra li). Bc 2: Thm i tng Command vo DED: Nhp chut phi vo Connection1 v chn ADD COMMAND trn menu, mt i tng command c to ra vi tn l Command1 trong Data Environment. Nhp chut phi vo i tng mi to ny, chn Properties chn cch thc thao tc i vi i tng Command ny. Trong , mc Database Object: Table; ObjectName: THANGHOA. Bc 3: DED cho php ta ko mt tp cc trng (Field) t mt i tng d liu trong DED vo 1 Form chun trong Windows v th n ti mt ni no .

Trang 141

Visual Basic

Hnh 12.2: Dng DED to Form rng buc d liu Bc 4: Lc ny khi chy chng trnh, ta thy Form ny hot ng; tuy nhin ta khng th thy cc nt nhn iu khin vic di chuyn cc record (u, Cui, Trc, Sau); hay cc nt nhn hnh ng (Cp nht, Thm, Xa); ta cn t b sung. Cc thun li ca DED: Xy dng cc Form rng buc d liu cch d dng. C nhiu ty chn nh ngha kt ni v cc lnh d liu. Ta c mt giao din thn thin hn thao tc cc kt ni & lnh. DED s dng ActiveX Data Objects (ADO) truy cp d liu.

II) S DNG TRNH DATA ENVIRONMENT DESIGNER


Qu trnh xy dng mt chng trnh thao tc CSDL vi VB thng qua DED bao gm 3 bc: - Chn mt trnh cung cp d liu (ODBC hay OLE DB). - To mt kt ni d liu (file MDB, SQL Server) - To mt lnh d liu (i tng Command). Trang 142

Visual Basic

1) Cc trnh cung cp d liu (Data Provider)


- Data Provider l mt thnh phn iu khin s tng tc ca chng trnh ca ta & ngun d liu. Mt trnh cung cp rt quen thuc l trnh cung cp ODBC (Open Database Connectivity: kt ni c s d liu m). Giao din ny da trn tng l mi ngun d liu c th c thao tc vi ngn ng SQL. - Mt giao din mi c a ra bi Microsoft: giao din OLE DB. Giao din ny khng yu cu ngun d liu phi nhm vo vic s dng ngn ng truy vn SQL; thay vo , giao din OLE DB cho php trnh cung cp d liu chp nhn ngn ng truy vn no m h mun h tr. Do vy cc ngun d liu c m rng ra t cc CSDL truyn thng: dBase, SQL Server; n cc ngun d liu khc nh cc tp tin, th mc ca h iu hnh - VB 6 gi km vi cc trnh cung cp d liu nh sau: Microsoft Jet 3.51 OLE DB Provider. Microsoft Jet 4.0 OLE DB Provider. Microsoft OLE DB Provider for SQL Server. Microsoft OLE DB Provider for Oracle. Microsoft OLE DB Provider for ODBC Drivers.

2) To mt kt ni d liu vi DED
o To mt d n mi; b sung Data Enviroment vo d n ca ta nh chn Project/Add Data Environment. Khi la chn mc ny, mi trng DED s hin th; s dng ca s Properties thit lp thuc tnh Name l: datHH. y, ta s s dng DED kt ni vi CSDL HANGHOA.MDB. o Sa li thuc tnh Name ca Connection1 l conHH; sau chut phi ln conHH, chn Properties. hp thoi u tin, ta phi chn mt trnh cung cp d liu, y chn Microsoft Jet 4.0 OLE DB Provider, nhn Next tip tc. Tip theo ta cn nhp chnh xc ng dn n tp tin CSDL, chng hn y l: H:\Visual Basic\HangHoa.Mdb. Cui cng, nhn nt Test Connection kim tra vic ni kt d liu chnh xc hay khng?

Trang 143

Visual Basic

Hnh 12.3: i tng Connection

3) To i tng Command:
o Xy dng mt i tng Command kt ni trc tip vi Table (bng) THANGHOA trong file d liu HangHoa.mdb. o Nhp chut phi trn kt ni d liu conHH & chn Add Command; sa Command Name l: comHH; chn Table t Combo Box Database Object, chn THANGHOA t Combo Box Object Name. o Trc khi ng hp thoi ny, ta chuyn qua nhn Advanced & thit lp LockType l 3 Optimistic (mc nhin l 1 Read Only); Cursor Location: Use client-side cursor. Nh vy ta mi c th cp nht Record Set t chng trnh ca ta. o Tr li giao din DED, ta c:

Hnh 12.4: i tng Command Trang 144

Visual Basic

4) To mt ng dng nhp liu vi DED


o mi trng DED, ta ko cc trng ca Command comHH vo Form1, chnh sa li cho thch hp. o y ta c s dng mt li hin th d liu; do vy ta chn Project\Component; chn Microsoft DataGrid Control 6.0 (OLE DB); sau ko iu khin ny vo Form, thit lp cc thuc tnh cho thch hp. Name: grdHH. DataSource: datHH DataMember: comHH o Nhp chut phi ln iu khin DataGrid, chn Retrieve Structure. Sau , lu d n & chy chng trnh ta c:

Hnh 12.5: Form hin th table THangHoa o Thm cc nt hnh ng (Thm, Sa, Xa,). Chng hn cc s kin cmd_Them_Click, cmdXoa_Click, cmdLuu_Click, cmdHuy_Click c x l:

Trang 145

Visual Basic

Hnh 12.6: Form nhp hon chnh cho table THangHoa Private Sub cmdThem_Click() With datHH.rscomHH .AddNew End With End Sub Private Sub cmdXoa_Click() With datHH.rscomHH .Delete .Update Me.Refresh End With End Sub Private Sub cmdHuy_Click() With datHH.rscomHH .CancelUpdate Me.Refresh End With End Sub Private Sub cmdLuu_Click() On Error GoTo Xuly With datHH.rscomHH .Update End With Me.Refresh Trang 146

Visual Basic

Exit Sub Xuly: MsgBox Err.Description, vbCritical + vbSystemModal, "Error" End Sub Nh vy, ta thit k xong mt Form cho php hin th thng tin cc hng ha, Form ny cho php sa i, thm mi cc mu tin trong bng THANGHOA ca CSDL HANGHOA.MDB.

5) i tng Command s dng cu lnh SQL


o Ta c th thit k cc cu lnh SQL cch nhanh chng nh s dng trnh SQL Builder. o Vi trnh DataEnvironment trn, ta thm mt i tng Command na; nhng i tng Command ny ly d liu t cu lnh SQL. y, ta cn hin th thng tin v cc loi hng ha & tn loi hng tng ng. o Sau khi thm mt i tng Command vo, ta sa cc thuc tnh nh sau: Name: comHH_Loai Source of Data : SQL Statement. o Sau chn SQL Builder trong ca s thuc tnh; mt ca s hin ra. Ko bng THangHoa & TLoaiHang trong ca s DataView vo khung Diagram ca trnh SQL Builder. Check chn cc trng tng ng (MaHang, TenHang, DVTinh, TenLoai). Ta c kt qu sau (hnh di). o ng ca s ny li; ta c mt i tng Command mi.

Trang 147

Visual Basic

Diagram

SQL

Hnh 12.7: Ca s SQL Builder

Trang 148

Visual Basic

Chng 13:
Mc tiu:

THIT LP BO CO

Chng ny gii thiu cch thc to bo co bao gm hin th d liu cng nh sp xp v phn nhm d liu. Hc xong chng ny, sinh vin c th: o S dng tnh nng Report ca Microsoft Access trong cc ng dng nh. o S dng Data Report to bo biu. o S dng Crystal Report, cng c mnh to bo biu. Kin thc cn thit: - Th vin i tng ActiveX Data Objects (ADO). - Mi trng d liu Data Environment. Ti liu tham kho: Visual Basic 6.0 v Lp trnh c s d liu - Chng 21, trang 637 Nguyn Th Ngc Mai (ch bin) Nh xut bn Gio dc - 2001.

Trang 149

Visual Basic

I. S DNG MICROSOFT ACCESS LP BO CO


C hai k thut thi hnh mt bo co Access t ng dng VB: - S dng Automation phng mt th hin (instance) ca Microsoft Access, thi hnh bo co trc tip t trong ng dng. Automation l mt k thut cho php giao tip gia cc ng dng trn Windows. y Microsoft Access s lm Automation Server. - Dng VSREPORTS ca VideoSoft cho php ngi s dng VB thi hnh bo co ca Microsoft Access bt k my ca h c ci t Microsoft Access hay l khng. y l mt iu khin ActiveX chuyn i bo co t tp tin MDB thnh mt nh dng m ta c th cung cp cng ng dng. Trong bi ging ny, chng ti ch trnh by cch th nht mc d cch ny c nhiu hn ch. i vi cch th hai, c th thc hin c ta cn phi ci t mt s th vin lin kt ng (DLL). Cc th vin ny tng i kh tm v nht l chng i hi bn quyn. Bt li ca k thut dng Automation l buc ngi dng phi chy mt th hin (instance) ca Microsoft Access cng nh phi ci t Microsoft Access trn my. lp trnh theo k thut ny, ta tin hnh theo cc bc sau: - Tham chiu n Microsoft Access bng cch t menu Project chn Preferences -> Microsoft Access 9.0 Object Library. - Sau ta to mt i tng nh l i tng ng dng ca Access nh sau: Dim MSAccess As Access.Application - Sau ta cn to mi i tng ny cng nh to mt tham chiu n c s d liu cha bo co: Set MSAccess = New Access.Application MSAccess.OpenCurrentDatabase(Database Name) - S dng thuc tnh DoCmd thi hnh bo co: MSAccess.DoCmd.OpenReport "Report Name",acViewNormal - ng c s d liu: MSAccess.CloseCurrentDatabase Lu : Trnh dng rng buc tr vi Automation Phin bn c ca Automation l OLE Automation, dng trong VB 3.0 v Microsoft Access 2.0. Trong VB 3.0, ta c th vit chng trnh nh sau: Dim MSAccess As Object Set MSAccess = CreateObject(Access.Application) on chng trnh trn hot ng tt i vi VB 3.0 nhng c mt cch khc tt hn. Thay v dng kiu Object, ta nn ch r kiu d liu i tng m Automation Server cung cp (chng hn Access.Aplication nu l Access). Bi v khi , VB khng cn thi hnh cu truy vn trn Automation Server mi Trang 150

Visual Basic

khi ta truy cp n xc nh kiu i tng cn to. K thut ny gi l rng buc tr, gi y ch ph hp vi 2 tnh hung: - Ta khng bit trc kiu i tng Automation Server. - Ta ang s dng mt mi trng pht trin ng dng khng h tr rng buc sm, nh VBScript hay ASP.

II. S DNG THIT K DATA REPORT


Thit k bo co dng DataReport l im mi trong VB6, y l mt cng c c h tr bi VB6, cung cp mt cch trc quan v thit k bo co v c u dim l rt d dng.

II.1 Thit k vi DataReport


- Chn Project -> Components. - Chn Tab Designers, nh du chn Data Report.

Hnh 13.1 a thit k bo co v n Cc thnh phn ca mt bo co nh sau: -

Report Header: Hin th mt ln u bo co.


- Report Footer: Hin th mt ln cui bo co. - Page Header: Hin th ti u mi trang. - Page Footer: Hin th ti cui mi trang.

- Detail Section: Hin th cc dng d liu.


- Mt hoc nhiu nhm u cui hin th ti u v cui mi phn nhm. Cc iu khin ca thit k Data Report nh sau: - iu khin nhn (Rpt Label). - iu khin hp vn bn (Rpt Textbox). - iu khin nh (Rpt Image). - iu khin hnh dng (Rpt Shape).

Trang 151

Visual Basic

- iu khin cc hm tnh ton (Report Function: rptFuncSum, rptFuncAve, rptFuncMin, rptFuncMax).

Hnh 13.2 Ca s Data Report Cc iu khin ca Data Report cng ging nh l cc iu khin chun trn biu mu, chng c th rng buc vi ngun d liu. Tuy nhin, ta c mt cch thc khc d dng hn l s dng mi trng d liu (c gii thiu chng trc). S dng DataEnvironment trong vic to DataReport: Qu trnh thc hin tri qua cc bc sau: - To i tng Command. - Ko th cc trng ca i tng Command ny vo thit k ca Report. - Thm cc tiu u trang & cui trang. V d: To bo co v cc sinh vin trong bng STUDENT thuc c s d liu Student. - Bc 1: To mt CSDL Student trong Environment, thm mt Command cho php ly d Student. ni kt n trnh Data i tng liu t bng

- Bc 2: Ko th cc trng cn hin th vo bo co ti mc Detail, ch gi li trng lin quan n thng tin d liu (t trong phn Detail Section). Thit Hnh 13.3 Thit lp Data Environment Trang 152

Visual Basic

lp tn trng di dng ting Vit ti phn Page Header. - Bc 3: Cung cp cc thng tin cho php DataReport nhn d liu t u bng cch xc lp: DataSource: DataEnvironment1, DataMember: Student.

Hnh 13.4: Report khi ko th cc trng Thit k bo biu c phn nhm d liu - Chn i tng Command ca trnh DataEnvironment cn nhm c s d liu. - Hin th trang thuc tnh, chn Tab Grouping. - Chn ty chn Group Command Object. - t tn cho nhm cng nh chn cc trng tham gia vo nhm d liu. - t li gi tr cho thuc tnh Data Member ch n ni kt mi nhm d liu. - Chn bo co thit k, n chut phi, chn Insert Group Header/Footer. - Chn tn trng nhm d liu a Hnh 13.4: Nhm d liu vo on Group Header. Khi bo co c thit k nh sau:

Trang 153

Visual Basic

II.2 Xem v xut Data Report


Ta c th xem thng tin v in bo co trn mt ca s ring bit s dng ch Print Preview bng cch thi hnh phng thc Show. Khi bo co s c hin th nh sau:

Hnh 13.6: Thi hnh bo co trong VB

Khi ngi s dng c th duyt qua cc trang nu nh bo co c nhiu trang, cng nh chn mt trang bo co no in. Ngoi ra ngi dng c th chn Export bo co ca mnh ra tp tin c nh dng khc, cc loi nh dng y c th l tp tin vn bn, tp tin HTML. Ta c th chn la xut mt s trang c th no hoc ton b bo co.

Hnh 13.7: Hp thoi xut bo co

Trang 154

Visual Basic

III. S DNG CRYSTAL REPORT LP BO CO


Crystal Report cho php to bo co c s d liu trong ng dng vit bng VB. N gm 2 phn ch yu: - Trnh thit k bo co xc nh d liu s a vo bo co v cch th hin ca bo co. - Mt iu khin ActiveX cho php thi hnh, hin th, iu khin v in bo co khi thi hnh ng dng. Crystal Report khng c sn khi ci VB6, ta cn ci t thm. Chng trnh ci t Crystal Report ch c trn bn Professional. Chy tp tin Crystl32.exe trong th mc \COMMON\TOOLS\VB\CRYSREPT. III.1 Thit k bo co Mt im khc bit khi dng Crystal Report l ta khng thit lp bo co i i vi ng dng c th. Ta s xy dng bo co trc v sau s gi thi hnh bo co t pha ng dng, bo co khng phi l mt b phn thuc ng dng. Ca s thit k Crystal Report nh hnh bn di:

Hnh 13.8 Ca s Crystal Report Khi ta chn to mt bo co mi, Crystal Report trnh by mt hp thoi cho php la chn mt trong nhiu nhng khun mu bo co nh sn.

Hnh 13.9 Hp thoi chn cc mu Trang 155

Visual Basic

Kiu bo co Standard Listing Cross-Tab Mail label Summary Graph Top N Drill Down Another

M t Bo co sp xp thng tin theo dng v ct, cho php nhm d liu. Bo co l danh sch d liu lin tc khng c tng kt hay trng tng cng.. Sp xp d liu theo hai chiu. Bo co c thit k in d liu theo ct cho nhn th. Bo co ch hin th thng tin tng qut, khng cha d liu chi tit. Bo co th hin d liu mt cch trc quan bng biu Bo co cho php ch hin th mt s mu tin c chn Bo co cho php nhn p chut ln d liu tng qut hin th d liu chi tit. Cc bo co c khun mu do ngi dng nh ngha trc .

Chng ta xt qua mt v d s dng Crystal Report lp bo co - Khi ng Crystal Report v chn New, chn kiu bo co l Standard. - Tip theo chn Data File. - Trong hp thoi chn tp tin c s d liu, ta ch n mt tp tin c s d liu, sau n nt Done. Ta s thy cc bng cng nh cc quan h gia cc bng c hin th.

Hnh 13.10 Hp thoi quan h gia cc bng

Quan h gia cc bng c xc nh mc thit k c s d liu nn ta khng cn phi thay i nhng mi lin kt ny. - Nhn nt Next qua bc tip theo, ta s chn nhng trng tham gia vo bo co. - Bc k tip ta chn qua Tab Sort thc hin vic sp xp d liu. - Tab Style cho php chn cc dng khc nhau ca bo co. - Sau khi thit k xong, ta n Save lu li bo co. Trang 156

Visual Basic

Khi m li bo co thit k, ta thy Crystal Report hin th bo co hai mc, thit k v duyt trc.

Hnh 13.11: Ca s xem trc bo co v thit k bo co III.2. Thi hnh bo co trong ng dng thng qua iu khin ActiveX ca Crystal Report Bc u tin c th thi hnh bo co Crystal Report, ta cn tham kho n iu khin ActiveX ca Crystal Report bng cch thm cng c Crystal Report vo n ca chng ta. Chn cng c Crystal Report v a vo ng dng, biu tng trn hp cng c nh sau. Trong s kin Click ca mt nt lnh, ta vit on m sau: Private Sub Command1_Click() CrystalReport1.ReportFileName = "d:\VB\bc.rpt" CrystalReport1.PrintReport End Sub Thuc tnh ReportFileName xc nh ng dn cng nh tn tp tin bo co. Vic thi hnh bo co c thc hin nh vo thuc tnh PrintReport. Ngoi ra, bo co c th thi hnh bng cch hin th trn mt ca s khc hoc l xut ra thng trn my in, Ta thit t thuc tnh qua hp thoi thuc tnh.

Hnh 13.11 Hp thoi xc lp thuc tnh Trang 157

Visual Basic

Bo co thi hnh trn mt ca s ring bit, ta c th la chn nhiu cng vic nh xem qua cc trang, in n bo co, phng to thu nh

Hnh 13.12: Bo co Crystal Report

LI KT
Chng Thit lp bo co cng l chng kt thc ca gio trnh Visual Basic. Tuy nhin lp trnh s kin v lp trnh c s d liu vi VB ch l mt phn trong nhng kh nng m VB mang li. Hy vng chng ti s gp li bn c trong nhng chuyn khc ca VB.

Trang 158

You might also like