Professional Documents
Culture Documents
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
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.
Trang 3
Visual Basic
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.
Visual Basic
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 .
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
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.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
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
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 ---------------------------------------------------------------------------------------------------
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.
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.
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.
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
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.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.
Trang 12
Visual Basic
IV.4. S kin:
o Click, DblClick: xy ra khi khung nhn c mt thao tc nhp (nhp p) chut.
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.
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.
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.
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
Visual Basic
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
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.
Visual Basic
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.
Visual Basic
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.
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
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.
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
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
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
End
TextBox: Name:txtNum
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
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.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
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
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
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)
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.
- 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
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
Visual Basic
Trang 34
Visual Basic
CHNG 4
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.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 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
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.
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
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
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
Trang 40
Visual Basic
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
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
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.
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".
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
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
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.
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).
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.
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
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
Trang 49
Visual Basic
- 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
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
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.
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 minh ha vic s dng thanh cun thay i kch c ca Text h tn vi on m n gin nh sau:
Trang 53
Visual Basic
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 .
Visual Basic
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.
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
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
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.3. Cc s kin
- Click: Xy ra khi ngi s dng chng trnh nhp chut vo mt mc no ca Menu.
Trang 61
Visual Basic
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.
- 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
1 2 3 4 5 6 Trang 65
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
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
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.
Trang 70
Visual Basic
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.
Visual Basic
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.
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
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
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
Trang 76
Visual Basic
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 .
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
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
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.
Cch 2:
Set fso = CreateObject("Scripting. FileSystemObject")
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
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
Visual Basic
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 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 mnuExit_Click:
Private Sub mnuExit_Click() End End Sub
Visual Basic
X X
X X
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
Visual Basic
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]...
Trang 91
Visual Basic
MaHang As String * 10 TenHang As String * 40 DVTinh As String * 15 Gia As Double End Type
Trang 92
Visual Basic
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.
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.
Trang 95
Visual Basic
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.
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
Trang 98
Visual Basic
Trang 99
Visual Basic
Trang 100
Visual Basic
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.
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
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).
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
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
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
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
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 & "")
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.
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.
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.
Bt u t Mu tin u tin Mu tin cui cng Mu tin hin hnh Mu tin hin hnh
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
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.
Trang 114
Visual Basic
Trang 115
Visual Basic
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
Trang 116
Visual Basic
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:
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.
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
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.
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:
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.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.
Visual Basic
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
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
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.
Document Server
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
DCOM
ADO
OLE DB
Hnh 11.2: Truy cp CSDL t trnh ng dng & trnh duyt WEB theo ADO
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.
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
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
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
TenLoai FROM THangHoa, TLoaiHang WHERE & _ THangHoa.MaLoai = TLoaiHang.MaLoai" Trang 131
Visual Basic
rs.Open Set grdHH.DataSource = rs End Sub
*: Microsoft DataGrid Control 6.0 (OLEDB): Name: grdHH. III.2.6 Cp nht v thm mi mu tin
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
Trang 133
Visual Basic
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
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
Trang 139
Visual Basic
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.
Visual Basic
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
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:
Visual Basic
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.
Trang 147
Visual Basic
Diagram
SQL
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
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.
Trang 151
Visual Basic
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
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.
Trang 154
Visual Basic
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.
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.
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.
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
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