You are on page 1of 114

TT.

Visual Basic

Chng 1 THIT K BIU MU DNG CC IU KHIN


Mc tiu: Chng ny gm cc bi tp nhm rn luyn cho sinh vin cc thao tc cn thit cho php thit k cc ng dng n gin trong mi trng lp trnh Visual Basic cng nh mt s k nng lp trnh c bn khi lm vic vi Visual Basic. Hc xong chng ny, sinh vin phi nm bt c cc vn sau: - S dng cc iu khin thit k giao din trong Visual Basic. - Vn dng cc cu trc lp trnh trong Visual Basic vit m lnh. - S dng mt s cu trc d liu trong Visual Basic. Kin thc c lin quan: - Gio trnh Visual Basic; Chng 1, 2, 3, 4, 5. Ti liu tham kho: - Visual Basic 6 Certification Exam Guide - Chapter 1, Page 1; Chapter 2, Page 41; Chapter 4, Page 89 - Dan Mezick & Scot Hillier McGraw-Hill - 1998.

Trang 1

TT. Visual Basic

I. S DNG MT S IU KHIN
I.1 Bi tp c hng dn
Bi tp 1I-1

THAO TC TRN LISTBOX


Bc 1: To th mc Basic\Bt1-1. To mt d n mi kiu Standard EXE, lu vo trong th mc trn. Bc 2: Thm 2 List Box v mt Button vo form (hnh 1). Nhn p ln form m ra ca s Code, nhp cc on m sau trong s kin Form_Load: Form1.List1.AddItem Thing 3 Form1.List1.AddItem Thing 2 Form1.List1.AddItem Thing 1

90 Hnh 1.1: Thao tc vi List Box Bc 3: Chy ng dng bng cch chn Run/Start. List1 hin th 3 phn t va thm vo bc 2. Chm dt chng trnh bng cch chn Run/End trn menu tr v mi trng son tho. Bc 4: Nhp p ln Button Command1 hin th s kin Click ca Command1. Bc 5: Mc ch ca Command1 l chuyn nhng phn t c chn t List1 sang List2. Thm on m sau vo th tc s kin Click ca Command1: ' Kiem tra neu mot phan tu duoc chon If Form1.List1.ListIndex = -1 Then Exit Sub ' Chep cac phan tu duoc chon tu List1 sang List2 Form1.List2.AddItem Form1.List1.List(Form1.List1.ListIndex) Bc 6: Chy ng dng. Nhp phn t th nht ca List1, sau nhp Command1. iu g xy ra? Phn t c chn ca List1 phi c hin th bn List2. Chm dt ng dng v tr v mi trng son tho. Bc 7: Tm trong phn tr gip cc thuc tnh sau ca ListBox: o ListCount o List Trang 2

TT. Visual Basic o ListIndex Bc 8: Tm trong phn tr gip cc hm sau ca ListBox: o AddItem o RemoveItem o Clear Bc 9: Tm tr gip cho lnh VB: Exit Sub Bc 10: on m trong th tc Command1_Click thc hin thao tc chp phn t t mt ListBox sang mt ListBox khc. By gi ta lm ngc li: loi b phn t trong List1. lm iu ny ta nhp p ln Command1 v thm dng code sau vo cui th tc: ' Xoa phan tu duoc chon trong List1 Form1.List1.RemoveItem Form1.List1.ListIndex Bc 11: Chy chng trnh v chn phn t th nht trong List1. iu g xy ra? Bc 12: Nu khng chn phn t no trong List1, nhp Command1. iu g xy ra? Ti sao? Bc 13: Ta c mt button dng chuyn cc phn t c la chn t tri sang phi (List1 sang List2), vi button cn li ta s dng chuyn cc phn t c chn t phi sang tri (List2 sang List1). Bc 14: Vi Command2 ta s copy on m t Command1 vi 1 vi thay i nh. Bc 15: Command2 thc hin cc thao tc ging vi Command1, nhng c nhim v di chuyn phn t c la chn t List2 sang List1. on m trong Command1 s c s dng li vi mt vi thay i nh. Nhp p ln Command1, chn cc m lnh thm vo cc bc trc. Chn Edit/Copy trn menu. Bc 16: ng ca s Code v nhp p ln Command2. S kin Command2_Click s hin th trong ca s Code. Nhp bt k bn trong th tc s kin v chn Edit/Paste trn menu. Nh vy ta chp on m t Command1 sang Command2. Bc 17: Sa li cc m lnh va c chp. Thay i cc ch thch cho thch hp; i List1 thnh List2 v ngc li. Nhng sa i ny gip Command2 c th thc hin thao tc chuyn cc phn t c chn t List2 sang List1. Lu cc cng vic thc hin bng cch chn File/Save Project. Bc 18: Chy chng trnh. Chn phn t th nht trong List1 v chn Command1 chuyn n sang List2. By gi chn phn t th nht trong List2, v nhp Command2. Nu Command2 khng thc thi, tr li mi trng son tho. Kim tra li on m lnh trong th tc Command2_Click ta va chp bc trn. Bc 19: Lu rng cc phn t c 2 ListBox khng c sp th t; nu mun sp th t, ta nhp List1 v i thuc tnh Sorted thnh True, tng t i vi List2. Bc 20: Lu d n li v chy chng trnh. Tt c cc phn t phi c hin th theo th t trong c 2 ListBox, bt chp th t chng c thm vo trong ListBox.

Bi tp 1I-2

THAO TC VI SPINCONTROL

Trang 3

TT. Visual Basic Mt SpinControl l s kt hp ca TextBox v Slider. Slider to mt min gi tr s c hin th trong TextBox. Cc gi tr ny c th c thay i bng cch nhp trc tip vo trong TextBox. Bc 1: To th mc Basic\Bt1-2. To d n mi trong th mc trn. Bc 2: Trong Form1, thm mt TextBox v Horizontal Scroll Bar nh hnh 2. Thit lp cc thuc tnh sau cho mi Control:

Hnh I.2: Spin Control

Item1: TextBox Name: Text1 Text: <blank> Item2: Horizontal Scroll Bar Name: Hscroll1 LargeChange: 10 Max: 100 Bc 3: Nhp p ln scrollbar nhp m lnh, y l s kin Change ca Scroll Bar gi l hm HScroll1_Change. Thm on m sau hin th gi tr hin thi ca scroll bar trong TextBox. Text1.Text = HScroll1.Value Bc 4: Chy ng dng bng cch chn Run/Start trn menu. By gi nhp cc mi tn tri v phi ca scroll bar. Gi tr trong TextBox phi thay i. Bc 5: By gi thm m thay i gi tr bng cch nhp trc tip gi tr trong TextBox. Nhp p vo TextBox v thm on m sau thit lp gi tr cho scroll bar khi TextBox thay i: HScroll1.Value = Text1.Text Bc 6: Chy chng trnh v nhp 50 vo TextBox. Vch ca scroll bar thay i theo. Thay i vch ca scroll bar, gi tr trong TextBox cng thay i. Bc 7: Trong khi chy chng trnh, nhp k t A vo TextBox. iu g xy ra? Nguyn nhn v scroll bar ch nhn cc gi tr l s ch khng phi k t. Bc 8: ngn chn nhng k t khng mong mun c nhp vo TextBox, ta s dng s kin KeyPress. S kin ny xy ra khi c mt phm trn bn phm c nhn, nhng trc khi gi tr thc s c hin th trn TextBox. S kin ny nhn mt gi tr s nguyn ca phm c nhn, gi l ASCII. Mi k t trn bn phm c i din bng mt m ASCII duy nht. Do ta c th kim tra phm no c nhn v b qua n nu ta thy khng cn thit. Bc 9: Thm on m sau vo s kin Text1_KeyPress ngn chn cc gi tr khng phi l s. ' Loai bo ky tu khong can thiet Trang 4

TT. Visual Basic If KeyAscii = vbKeyBack Then Exit Sub If KeyAscii < vbKey0 Or KeyAscii > vbKey9 Then KeyAscii = 0 End If Bc 10: Lu d n li v chy chng trnh.

Bi tp 1I-3

THAO TC VI DRIVELISTBOX, DIRLISTBOX, FILELISTBOX


Trong v d ny ta phi to 5 i tng, trong c 4 iu khin: o Mt Form. o Mt iu khin DriveListBox o Mt iu khin DirListBox o Mt iu khin FileListBox o Mt iu khin ImageBox Bc 1: To giao din ngi dng. Ta ch cn nhp v v ng v tr tng iu khin trn Form. 1 2 4

Hnh I.3: Giao din la chn tp tin hnh nh hin th 1: 2: 3: 4: DriveListBox Name: drvSource DirListBox Name: dirSource FileListBox Name: filSource Pattern: *.bmp;*.wmf;*.ico;*.jpg ImageBox Name: ImgSource Stretch: TRUE Trang 5

TT. Visual Basic Bc 2: Vit m trao i thng tin gia cc i tng: Trong ca s thit k Form, nhp p vo DriveListBox, ca s Code hin ra, x l s kin sau: Private Sub drvSource_Change() dirSource.Path = drvSource.Drive End Sub Tng t cho DirListBox & FileListBox Private Sub dirSource_Change() filSource.Path = dirSource.Path End Sub Private Sub filSource_Click() imgSource.Picture = LoadPicture(filSource.Path & "\" & filSource.FileName) End Sub Bc 3: Lu d n li vo th mc Basic\Bt1-3. Chy chng trnh nh phm F5.

Hnh I.4: Kt qu thc thi

Bi tp 1I-4

IU KHIN OLE
Bc 1: To d n mi, trong ta c s dng OLE. Hp thoi Insert Object hin ra ta la chn, y chn kch hot Create New, Object Type l Bitmap Image; nh du chn Display as Icon.

Trang 6

TT. Visual Basic Hnh I.5: S dng OLE Control Bc 2: Nhp OK, VB s gi trnh ng dng Paint & ta v hnh trn ca s Paint. Sau chn Exit & Return trong ca s Form, ta c:

Hnh I.6: Kt qu thc thi ng dng Bc 3: Lu d n vo th mc Basic\Bt1I-4 v chy chng trnh; nhp p vo biu tng Bitmap Image,VB s khi ng Paint ta hiu chnh hnh v u.

I.2 Bi tp t lm
1) Thit k chng trnh nh sau:

Hnh I.7 Cc php tnh c bn

Nhp vo 2 gi tr A, B; sau chn mt php ton (+,-,*,/). Nhp chn nt nhn Thc hin, kt qu s hin th trong iu khin nhn Kt qu. Trang 7

TT. Visual Basic 2) Thit k chng trnh nhp vo ta ca hai im (x1,y1); (x2,y2) v cho php: a) Tnh h s gc ca ng thng i qua hai im theo cng thc: H s gc = (y2 - y1) /(x2 - x1) b) Tnh khong cch gia hai im theo cng thc: khong cch = (x2 - x1) 2 + (y2 - y1)2 Giao din chng trnh c th nh sau:

Hnh I.8: Ta cc im

3) Vit chng trnh cho php nhp vo bn knh r ca mt hnh trn. Tnh chu vi v din tch ca hnh trn theo cng thc : Chu vi CV = 2*Pi*r Din tch Dt = Pi*r*r Hin th cc kt qu ln mn hnh. 4) Thit k chng trnh c giao din nh hnh di v thc hin cc chc nng sau:

Trang 8

TT. Visual Basic Hnh I.9: La chn tn o Mi khi ngi s dng chng trnh nhp thng tin vo 2 TextBox, sau nhp chn nt Thm, gi tr ca M s c a vo ComboBox, cn gi tr ca H v tn c a vo ListBox. o Mi khi h chn mt m s no trong ComboBox, gi tr h v tn tng ng cng s c chn trong ListBox; ng thi chng s c hin th ln trn cc iu khin TextBox tng ng (nh hnh). (X l s kin Combo1_Click & List1_Click) o i vi m s v h tn ca mt ngi, ta c th sa i gi tr ca chng trong cc nhp TextBox, sau chn nt Sa, gi tr ca chng trong ComboBox & ListBox cng sa i theo. o Khi ngi dng chn mt m s (hay h tn) trn ComboBox (hoc ListBox), sau h chn Xa, cc thng tin ny c xa ra khi ComboBox & ListBox.

II. CC CU TRC LP TRNH TRONG VB


II.1 Bi tp c hng dn
Bi tp 1II-1

S DNG SELECT CASE


To th mc Basic\Bt1II-1. Thit k chng trnh c giao din & lu trong th mc trn:

Hnh I.10: Select Case

y, ngi s dng chng trnh nhp vo mt tui no trong nhp tui, sau h nhp nt Nhn xt, mt nhn xt s xut hin ng vi tui m h nhp t bn phm. Lc ny ta s dng ton t so snh (=, <, <=, >, >=, <>) cng vi cc t kha Is v To trong biu thc. Is: so snh bin vi biu thc c lit k sau t kha Is. To: nh ngha phm vi ca gi tr. S kin Command1_Click(): Dim Age As Integer Age = Val(Text1.Text) Trang 9

TT. Visual Basic Select Case Age Case Is < 18


Label2.Caption = "Ban con thieu nien, ban phai hoc thoi!"

Case 18 To 30
Label2.Caption = "Ban da truong thanh, lap gia dinh thoi!"

Case 31 To 60 Label2.Caption = "Lua tuoi trung nien roi!" Case Else Label2.Caption = "Ban co con chau day dan roi nhe!" End Select Bi tp 1II-2

BIN V CU TRC
Bc 1: To th mc Basic\Bt1II-2. To d n mi (VB Standard EXE) trong th mc trn; thm mt modul vo d n, trong modul nay thm vo on m sau: Public Const tieude As String = "Quan ly hanh chinh" Public Const sohieu As String = "1.0" Thm on m sau vo hm x l s kin Form_Load ca Form1: Form1.Caption = tieude & " phien ban " & sohieu Chy ng dng, ta thy tiu ca Form: Quan ly hanh chinh phien ban 1.0. By gi, m Modul1 v thay Public bng Private. Chy chng trnh. iu g xy ra? Bc 2: i cc khai bo trn thnh Public, thm dng sau y vo u th tc Form_Load: tieude = Loi xuat hien & Hang so khong the thay doi duoc. Chy chng trnh, iu g xy ra? Bc 3: Thm dng sau trong hm x l s kin Form_Resize: MsgBox FORM RESIZE Bc 4: Chy chng trnh, khi Form bt u c hin th (s kin Form_Load), s kin Resize ca Form c thc hin. Ch c hm x l s kin Resize mi cho bit chc rng hm Form_Load c thc thi. kim chng ta to mt bin trn form v trong hm Form_Load ta thit lp gi tr ca n. Sau , hm Form_Resize c th kim tra bin v x l trn bin ny. Bc 5: Khai bo mt bin Private trong Form1 tn sukienLoad: Private sukienLoad As Boolean Trong hm Form_Load, t gi tr True cho bin trn: sukienLoad = True By gi ta kim tra gi tr ca bin trong hm Form_Resize. Thm vo on m sau trong hm Form_Resize: If sukienLoad = True Then SukienLoad =False Exit Sub End If MsgBox Form Resize Trang 10

TT. Visual Basic Chy ng dng, khi Form bt u c hin th, ta khng thy xut hin cu thng bo, nhng khi ta thay i kch thc ca Form (nhn cc nt _, ca form), cu thng bo li xut hin. y ta s dng mt bin lm trung gian cho s giao tip gia s kin Form_Load v s kin Form_Resize. Bi v c 2 hm ny nm trong Form1, nn ta c khai bo Private cho chng, cc ng dng khc khng th truy xut n cc bin ny. CHNG TRNH CON Bc 6: Ta vit mt chng trnh con x l chui. u vo ca chng trnh con l mt chui, kt qu ca chng trnh con l chui nhng cc t u c vit hoa k t u tin. Bi tp ny gip ta khai bo (nh ngha) mt chng trnh con v gi thc thi chng trnh con trong chng trnh ng dng ca mnh. Chn Modul1 trong ca s son tho chng trnh, sau nhp chn Tools\Add Procedure. nh ngha mt hm public tn Doihoa() nh sau: Public Function Doihoa(s As String) As String Dim s1 As String Dim s2 As String Do While InStr(s, " ") <> 0 s1 = Left(s, InStr(s, " ")) s = Right(s, Len(s) - InStr(s, " ")) ' Doi chu hoa s1 = UCase(Left(s1, 1)) & Right(s1, Len(s1) - 1) s2 = s2 & s1 Loop ' Tra ket qua Doihoa = s2 & " " & s End Function ' Ham nay khong viet hoa tu cuoi cung. Bc 7: Hm Doihoa c nhim v nhn vo mt chui v i k t u tin ca cc t trong chui thnh ch hoa. By gi ta kim tra hm ny nh sau: Thm mt TextBox v mt nt nhn (Button) ln Form1. Nhp vo Button, ta thm on m sau vo hm x l s kin Command1_Click: Form1.Caption = Doihoa(Text1.Text) Chy ng dng, nhp mt chui vo Text1, nhp Command1. Chui ch hoa s xut hin trn tiu ca Form1. Bc 8: Sa li sao cho c th vit hoa k t u tin ca tt cc t.

Bi tp 1II-3

LA CHN VI LISTBOX
Bc 1: To th mc Basic\Bt1II-3. To d n mi VB Standard EXE trong th mc trn, sau to Form c dng sau: Trang 11

TT. Visual Basic

Hnh I.11: La chn vi ListBox Ta c 2 ListBox v cc nt nhn (Button); trong : Nt > chuyn mt phn t t tri sang phi Nt < chuyn mt phn t t phi sang tri. Nt >> chuyn tt c cc phn t t tri sang phi. Nt << chuyn tt c cc phn t t phi sang tri. Thm 2 ListBox v 4 Button vo Form1. Trong hm x l s kin Form_Load thm vo on m: List1.AddItem "Thing 1" List1.AddItem "Thing 2" List1.AddItem "Thing 3" List1.AddItem "Thing 4" List1.AddItem "Thing 5" List1.AddItem "Thing 6" Chy chng trnh. Bc 2: Thm hm x l s kin Click cho nt nhn 1 (>) Command1_Click: ' Kiem tra co chon hay khong? If Form1.List1.ListIndex = -1 Then Exit Sub ' Chep tu trai sang phai Form1.List2.AddItem Form1.List1.List(Form1.List1.ListIndex) ' Xoa ben trai Form1.List1.RemoveItem Form1.List1.ListIndex Bc 3: Chy chng trnh, chn phn t trong List1 v nhp nt >, phn t chuyn sang List2. By gi ta lm ngc li: chuyn phn t c chn t List2 sang List1. Tr v ca s son tho; chn on m va nhp trong List1, chn Edit\Copy trong menu ca VB. Nhp ln Button <, chn Edit\Paste. By gi ta sa li on m sau trong hm x l s kin Command2_Click: ' Kiem tra co chon hay khong? If Form1.List2.ListIndex = -1 Then Exit Sub Trang 12

TT. Visual Basic ' Chep tu phai sang trai Form1.List1.AddItem Form1.List2.List(Form1.List2.ListIndex) ' Xoa ben phai Form1.List2.RemoveItem Form1.List2.ListIndex Bc 4: Lu d n v chy chng trnh. Ta nhn thy 2 on m lnh trn (cho Button < v >) l nh nhau (ch i ch List1 cho List2 v ngc li). Do ta s vit mt chng trnh con chuyn d liu t ListBox ny sang ListBox kia, v trong hm x l s kin ca 2 Button ta ch cn gi chng trnh con ny chuyn d liu. Thm mt Modul mi vo d n tn Modul1, chn Tool\Add Procedure thm mt chng trnh con vo tn Chuyendulieu() Vo Modul1, sa i li th tc chuyn d liu nh sau: Public Sub Chuyendulieu(L1 As ListBox, L2 As ListBox) ' Kiem tra co chon hay khong? If L1.ListIndex = -1 Then Exit Sub ' Chep L2.AddItem L1.List(L1.ListIndex) ' Xoa ben trai L1.RemoveItem L1.ListIndex End Sub By gi hm x l s kin ca Command1 (Command1_Click) ta sa li nh sau: Call Chuyendulieu(Form1.List1, Form1.List2) Hm Command2_Click: Call Chuyendulieu(Form1.List2, Form1.List1) Lu d n v chy chng trnh. Kim tra kt qu.

Bi tp 1I -4

TRUYN THEO A CH V TRUYN THEO GI TR


Bc 1: Tham s a vo chng trnh con c truyn theo mt trong 2 cch: theo a ch v theo gi tr. By gi ta to d n mi trong th mc Basic\Bt2-4 kim tra chng. Bc 2: To Form1 nh sau:

Trang 13

TT. Visual Basic

Hnh I.12: Truyn tham s

2 3

Button 1: Name: cmdTTri; Caption: Truyen tri Button 2: Name: cmdTChieu; Caption: Tham chieu TextBox: Name: Text1 Label 1: Name: lblTruoc Label 2: Name: lblTrong Label 3: Name: lblSau Bc 3: Thm 1 Modul vo d n tn l Modul1, chn Tools\Add Procedure thm th tc Thamchieu nh sau: Name: Thamchieu Type: Sub Scope: Public Bc 4: Thm on m sau trong th tc Thamchieu Public Sub Thamchieu(so As Integer) so = so + 2 Form1.lblTrong.Caption = Str(so) End Sub Bc 5: Chn Tool\Add Procedure thm th tc Truyentri nh sau: Name: Truyentri Type: Sub Scope: Public Bc 6: Thm on m sau trong th tc Truyentri Public Sub Truyentri(ByVal so As Integer) so = so + 2 Form1.lblTrong.Caption = Str(so) End Sub Bc 7: S khc nhau gia 2 th tc trn l t kha ByVal trong th tc Truyentri. By gi ta thm th tc x l bin c Click ca Button cmdTTri. Thm on m sau: Private Sub cmdTTri_Click() Dim n As Integer n = Val(Text1.Text) lblTruoc.Caption = Str(n) Call Truyentri(n) lblSau.Caption = Str(n) End Sub Bc 9: Thm hm x l bin c cmdTChieu_Click cho Button cmdTChieu: Trang 14

TT. Visual Basic Private Sub cmdTChieu_Click() Dim n As Integer n = Val(Text1.Text) lblTruoc.Caption = Str(n) Call Thamchieu(n) lblSau.Caption = Str(n) End Sub Bc 10: Lu d n, chy chng trnh. Nhp s bt k vo TextBox ri nhp nt Truyen tri, sau nhp nt Tham chieu. Kim tra kt qu. Gii thch.

Bi tp 1II-5

THAM S TY CHN Bc 1: To th mc tn Basic\Bt1II-5. To d n mi trong th mc ny. Bc 2: To Form nh sau:

Hnh I.13: Ly thi gian

Trong : Label: Name: lblTg Button 1: Name: cmdGioPhut Button 2: Name: cmdGioPhutGiay Bc 3: Thm modul mi vo d n tn Modul1. Chn Tool\ Add Procedure to th tc: Name: Laythoigian Type: Sub Scope: Public Bc 3: Thm on m sau vo th tc trn: Public Sub Laythoigian(gio As String, phut As String, Optional giay As String) ' Tham so thu 3 co tu khoa Optional, nghia la ta ' co the goi thu tuc co the co tham so nay hay khong co deu duoc Trang 15

TT. Visual Basic ' Ham IsMissing kiem tra xem tham so nay co hay khong If IsMissing(giay) Then giay = "" Dim hientai hientai = Now gio = Format$(hientai, "hh") phut = Format$(hientai, "nn") giay = Format$(hientai, "ss") End Sub Bc 4: Thm th tc x l s kin cho Button cmdGiophutgiay, trong th tc ny chn on m sau: Private Sub cmdGiophutgiay_Click() Dim gioht As String Dim phutht As String Dim giayht As String Call Laythoigian(gioht, phutht, giayht) lblTg.Caption = gioht & ":" & phutht & ":" & giayht End Sub Bc 5: Thm th tc x l s kin cho Button cmdGiophut, trong th tc ny chn on m sau: Private Sub cmdGiophut_Click() Dim gioht As String Dim phutht As String ' Khong su dung tham so thu ba Call Laythoigian(gioht, phutht) lblTg.Caption = gioht & ":" & phutht End Sub Bc 6: Lu d n li v chy chng trnh. Kim tra kt qu. Bi tp 1II-6

PARAM ARRAY
Bc 1: To th mc Basic\Bt1II-6. To d n mi trong th mc ny. Bc 2: To Form nh hnh sau:

Hnh I.14: Param Array

Trang 16

TT. Visual Basic Trong : ListBox: Name: lstTen Button: Name: cmdds; Caption: Them vao danh sach Bc 3: Chn modul mi vo d n tn Modul1. Sau , chn Tool\Add Procedure chn th tc sau: Name: Diends Type: Sub Scope: Public Bc 3: Chn on m sau vo th tc Diends Public Sub Diends(ParamArray Ten() As Variant) ' Su dung ParamArray thi mang phai kieu Variant va ' mang nay la tham so cuoi cung cua thu tuc Dim hten As Variant For Each hten In Ten() Form1.lstTen.AddItem hten Next End Sub Bc 4: ParamArray cho php khng cn xc nh s lng cc i s trong mt chng trnh con. By gi, thm hm x l s kin cho nt cmdds: cmdds_Click: Private Sub cmdds_Click() Call Diends("Huynh Xuan Hiep", "Nguyen Van Linh", "Lam Hoai Bao") Call Diends Call Diends("Phan Huy Cuong") End Sub Bc 5: Lu d n li v chy chng trnh. Kim tra kt qu (hnh bn di). Lu n li gi th tc trong s kin cmdds_Click (s lng i s khc nhau)

Hnh I.15: Kt qu Param Array

Trang 17

TT. Visual Basic Bi tp 1II-7

X L CHUI
Bc 1: To d n mi trong th mc Basic\Bt2-7 vi giao din nh sau: 1 2 3 4 5 Hnh I.16: X l chui

1: Form: Name: frmMain; MinButton: False; MaxButton: False; Font: VNI-Times. 2: Label: Name: lblTen. 3: TextBox: Name: txtTen. 4: CommandButton: Name: cmdTen; Caption: Tch tn. 5: CommandButton: Name: cmdCKT; Caption: Ct khong trng. Bc 2: To mt hm ct khong trng nh sau: Private Function ATrim(ByVal Name As String) As String Name = LTrim(RTrim(Name)) Do While InStr(Name, " ") <> 0 Name = Replace(Name, " ", " ") Loop ATrim = Name End Function Bc 3: Trong ca s thit k Form; nhp p vo Tch tn, ta x l on m cho s kin ny: Private Sub cmdTen_Click() Dim sName As String, Name As String sName = ATrim(StrConv(txtTen.Text, vbProperCase)) Dim i As Long i = InStrRev(sName, " ") Name = Right(sName, Len(sName) - i) MsgBox Name & ": " & Str(Len(Name)) End Sub Bc 4: Sau , tr li ca s thit k, nhp p vo Ct khong trng, ta x l: Private Sub cmdCKT_Click() Dim sName As String sName = ATrim(StrConv(txtTen.Text, vbProperCase)) Trang 18

TT. Visual Basic MsgBox sName, , "Kieu du lieu chuoi" End Sub Bc 5: Lu d n v chy chng trnh.

Bi tp 1II-8

X L LI
Bc 1: To mt d n mi. Dng Tools\Add Procedure thm mt th tc mi tn GoiThuTuc vo Form1 vi ni dung nh sau: Public Sub GoiThuTuc() Dim bien As Integer MsgBox "Truoc khi gan tri cho bien" bien = "Bien nguyen khong nhan gia tri la chuoi" MsgBox "Sau khi gan tri cho bien: " & "Bien = " & Format(bien) End Sub Bc 2: Th tc x l s kin Form_Load c ni dung nh sau: Private Sub Form_Load() MsgBox "Truoc khi goi thu tuc" Call GoiThuTuc MsgBox "Sau khi goi thu tuc" End Sub Lu d n vo th mc Basic\Bt1II-8: Form: tn l form1 Project: Debug Bc 3: Chy chng trnh. VB a ra hp thoi bt li (debug) chng trnh. Ta chn End tr v ca s son tho. To tp tin thc thi tn Debug.exe bng cch chn File\Make Debug.exe. Chy tp tin Debug.exe t Windows Explorer ta nhn c hp thoi bo li v chng trnh t ng chm dt. Nhn xt kt qu khi thc hin chng trnh. Bc 4: By gi ta thm vo on m x l li trong th tc ca s kin Form_Load: Private Sub Form_Load() On Error GoTo Xulyloi MsgBox "Truoc khi goi thu tuc" Call GoiThuTuc MsgBox "Sau khi goi thu tuc" Thoat: Exit Sub Xulyloi: Trang 19

TT. Visual Basic MsgBox "Su kien Form_Load - Loi xay ra: " & Err.Description Resume Thoat End Sub Bc 5: Lu d n v chy chng trnh. Nhn thy, thay v ta nhn c cu thng bo li t VB, mt hp thoi bo li do ta a vo xut hin. Lu , nhng li c bt trong th tc Form_Load (ch khng phi trong GoiThuTuc()). Nguyn nhn v th tc GoiThuTuc() c gi bi th tc x l s kin Form_Load. Bc 6: Bin dch li thnh tp tin Debug.exe, chy n. Nhn xt kt qu. Bc 7: Cc kt qu trn cho ta bit c cc li trong s kin Form_Load c x l bi cc thao tc bt li trong th tc Form_Load. Nhng nu th tc GoiThuTuc() cng c cc thao tc bt li chng trnh th sao? n gin gi s mt li xut hin trong GoiThuTuc(). B phn x l li ca GoiThuTuc (do ta thm vo bt li chng trnh) s thc thi thay v on lnh bt li ca s kin Form_Load c thc hin. Khi GoiThuTuc chm dt, quyn x l li mi trao li cho s kin Form_Load. Sa li th tc GoiThuTuc nh sau: Public Sub GoiThuTuc() Dim bien As Integer On Error GoTo Xulyloicucbo MsgBox "Truoc khi gan tri cho bien" bien = "Bien nguyen khong nhan gia tri la chuoi" MsgBox "Sau khi gan tri cho bien: " & "Bien = " & Format(bien) Thoatthutuc: Exit Sub Xulyloicucbo: MsgBox "GoiThuTuc() - Loi xay ra: " & Err.Description Resume Thoatthutuc End Sub Bc 8: Lu d n v chy chng trnh. Thay on m Resume Thoatthutuc bng Resume v chy chng trnh. Mt vng lp v tn xy ra do chng trnh s quay li on m b li v c gng thc thi n; thot chng trnh ta phi bm t hp phm Ctrl + Break. By gi thay Resume bng Resume Next v chy li chng trnh. Nhn xt kt qu. Gii thch.

II.2 Bi tp t lm
1) Thit k chng trnh cho php nhp vo cc h s a, b ca phng trnh bc 1 dng: ax+b=0; sau gii phng trnh ny. Giao din chng trnh c th nh sau:

Trang 20

TT. Visual Basic

Hnh I.17: Phng trnh bc 1

2) Thit k chng trnh cho php nhp vo cc h s a, b, c ca phng trnh bc 2 dng: ax2 + bx + c=0; sau gii phng trnh ny. 3) Thit k chng trnh cho php nhp vo mt k t, sau kim tra xem k t thuc tp hp no trong cc tp k t sau: Cc k t ch hoa: 'A' ...'Z' Cc k t ch thng: 'a' ... 'z' Cc k t ch s : '0' ... '9' Cc k t khc. 4) Gii phng trnh bc 1 bng cch s dng cu trc Select Case 5) To mt chng trnh hin th mt danh sch chn la cho ngi dng trong mt ListBox, sau x l vi cu trc quyt nh Select Case. Mc ch ca iu khin s kin ny l hin thi mt danh sch cc quc gia, sau hin th mt thng ip cho mng bng ngn ng bn x khi ngi dng chn quc gia ca h.

Hnh I.18: Li cho cc nc Chng hn: Ting Anh: Hello, programmer Ting c: Hallo, programmierer Ting Ty Ban Nha: Hola, programador Ting : Ciao, programmatori 6) S dng vng lp For.. Next S dng For.. Next thay i ln k t trn mt Form bng cch thay i thuc tnh FontSize ca Form. Thit k Form c giao din: Trang 21

TT. Visual Basic

Hnh I.19: ForNext S kin Command1_Click() Dim i As Integer For i = 1 To 10 Form1.FontSize = 10 + i Print "Line "; i Next Chy chng trnh. 7) Thit k chng trnh cho php tnh N! (N! = 1*2*3**N). Giao din ngh:

Hnh I.20: Tnh N! 8) Thit k chng trnh cho php nhp vo mt s nguyn N; sau tnh cc tng sau: a. S=1 + 2 + ... + n b. S=1/2 + 2/3 + ... +n/(n+1) c. S= - 1 +2 - 3 +4 - ... + (-1)nn 9) Thit k chng trnh cho php nhp vo s nguyn dng N; sau tm s nguyn dng k nh nht sao cho
2 3 k + + ... + N. 1* 3 2 * 4 (k 1) * (k + 1)

10) Thit k chng trnh cho php nhp vo 2 s nguyn A, B; sau tm UCLN v BCNN ca hai s a v b theo thut ton sau ( K hiu UCLN ca a, b l (a,b) cn BCNN l [a,b]) - Nu a chia ht cho b th (a,b) = b - Nu a = b*q + r th (a,b) = (b,r) - [a,b] = a*b/(b,r) Trang 22

TT. Visual Basic 11) Thit k chng trnh cho php nhp vo s nguyn N; sau vit 1 hm tnh N!; cui cng hin th kt qu gi tr N!. 12) Thit k chng trnh cho php nhp vo 2 s nguyn N, K; s dng hm tnh N! trn, vit mt hm tnh gi tr t hp chp K ca N phn t theo cng thc
K CN =

N! . K !*( N K )!

13) Thit k chng trnh cho php nhp vo s thc X v s nguyn N; sau vit cc hm tnh cc tng sau ri hin th kt qu: - S= 1 + x +x2 + x3 + ... + xn - S= 1 - x +x2 - x3 + ... (-1)n xn - S= 1 + x/1! +x2/2! + x3/3! + ... + xn/n! 14) S dng vng lp Do While Loop thit k chng trnh cho php nhp vo mt s nguyn, sau thng bo kt qu xem s c phi l s nguyn t hay khng? on chng trnh kim tra s nguyn N c nguyn t hay khng: i=2 Do While (i < N) And (N Mod i <> 0) i=i+1 Loop If i = N Then N l s nguyn t Else N khng l nguyn t 15) Lm li bi tp 11 (tnh N!) nhng s dng vng lp Do While Loop. 16) Lm li bi tp 15 (kim tra s nguyn t) nhng bng cch s dng Do Until Loop. 17) Lm li bi tp 11 (tnh N!) nhng s dng vng lp Do Until Loop. 18) Thit k chng trnh cho php nhp vo mt s nguyn N; sau phn tch s nguyn ny ra tha s nguyn t. Giao din chng trnh c th nh sau:

Hnh I.21: Tha s nguyn t 19) S dng iu khin nh thi (Timer). To mt chng trnh cho php ngi dng 15 giy nhp mt khu trong mt TextBox. Nu ngi dng khng nhp mt khu ng trong thi gian ni trn, chng trnh hin th thng bo Time Expired (Ht thi gian) v ng chng trnh. Thi gian lm bi tp: 30 pht. Giao din ngh: Trang 23

TT. Visual Basic

Hnh I.22: Giao di Nhp vo mt khu cn thit (gi s mt khu l: Secret) Nu nhp ng mt khu, ri nhp nt Nhp, mt hp thng bo xut hin vi ni dng: Ban dang nhap thanh cong.

Hnh I.23: Li ng nhp Nu nhp mt khu sai, ri nhp nt Nhp, mt thng bo xut hin vi ni dung: Xin loi, chung toi khong biet ban!

Hnh I.24: Li ng nhp Sau nhp nt OK trn hp thng bo ny th chng trnh cho bn nhp li mt khu. - Nu thi gian qu 15 giy m ngi dng cha nhp ng mt khu th mt thng bo s hin ln Xin loi, thoi gian da het; sau chng trnh s kt thc.

Hnh I.25: Bo ht gi 20) Thit k chng trnh tng t nh ng dng Canculator ca Windows.

Trang 24

TT. Visual Basic

Chng 2 LP TRNH S KIN NNG CAO & HA TRONG VISUAL BASIC


Mc tiu: Chng ny gm cc bi tp nhm mc ch rn luyn sinh vin cc k nng lp trnh s kin nng cao nh cc thao tc x l chut, bn phm cng nh gip cho sinh vin c ci nhn s lc v cch thc x l ha trong Visual Basic. Hc xong chng ny, sinh vin phi nm bt c cc vn sau: - Cch thc s dng menu trong thit k giao din. - Cch x l cc s kin chut v bn phm. - Cc phng thc ha c bn. Kin thc c lin quan: Gio trnh Visual Basic, Chng 6. Ti liu tham kho: Visual Basic 6 Certification Exam Guide - Chapter 3, Page 69 - Dan Mezick & Scot Hillier - McGraw-Hill - 1998. http://www.vovisoft.com/VisualBasic/VB6Chapter12C.htm

Trang 25

TT. Visual Basic

I. HNG DN
Bi tp 2-1
XY DNG MENU V HP THOI C BN Bc 1: To d n mi tn Bt2-1 trong th mc Basic\Bt2-1. Ch thng xuyn lu d n li. Bc 2: Bt u vi Menu Editor. Nhp chut phi ln Form1. Chn Menu Editor. Lc ny ca s Menu Editor s hin ra.

Hnh II.1: To menu Bc 3: To menu File bng cch thit lp cc thuc tnh sau: Trang 26

TT. Visual Basic Caption: &File Name: mnuFile Bc 4: nh ngha cc phn t ca menu File, cc phn t ny s xut hin khi ta nhp vo File. Ta nhp nt Next, vt sng s di chuyn xung 1 hng, ta s in cc thng tin vo. Bc 5: Cc phn t ca menu File phi c t trong cng mt cp: Bng cch nhp chn mi tn phi, ta xc nh cc phn t ny thuc menu File. Bc 6: nh ngha cc thuc tnh sau cho phn t ca menu sau: Caption: &New Project Name: mnuFileNew Bc 7: Chn nt OK ca Menu Editor, sau thc thi d n. Khi nhp chut vo menu File ta s thy x xung phn t New Project ca Menu File. By gi tr li mn hnh son tho. Bc 8: Tr li ca s Menu Editor v thm cc phn t tip theo; nh kim tra th t ca cp m phn t cn thm vo (phi nm trong menu File). Mi ln thm mt phn t ca menu (sau khi in Caption v Name), cn chn nt Next nh ngha mt phn t mi. Cn lu cc phn t ca menu File phi cng mt cp. Bc 9: nh ngha cc phn t sau: Caption: &Open Project Name: mnuFileOpen Caption: A&dd Project Name: mnuFileAdd Caption: Sa&ve Project Name: mnuFileSave Caption: Sav&e Project As Name: mnuFileSaveAs Bc 10: Phn t k tip ca menu s l ng phn cch, ng phn cch ny cng phi c mt tn, ta khng th nhp chut trn n thc thi cng vic. ng phn cch c Caption l du -. By gi ta thm ng phn cch v sau thm mc Exit l hon tt. Bc 11: Nhp nt Next, thm ng phn cch: Caption: Name: mnuSeparator1 Bc 12: Nhp Next, thm mc Exit Caption: E&xit Name: mnuFileExit Bc 13: Cu trc ca h thng menu ca ta nh sau: &File &New Project &Open Project A&dd Project Sa&ve Project Sav&e Project As E&xit T y ta c th chn phn t bt k vo menu ( cc bc trn ta ch chn sau). Bc 14: Mun chn thm mt phn t, nhp vo phn t di v tr m phn t mi mun t ti . Chng hn, mun chn mt phn t trc mc Save Project, nhp vo Save Project sau chn nt Insert. Mt phn t trng mi s xut hin v ta in thng tin vo. Bc 15: nh ngha mc mi: Caption: &Remove Project Name: mnuFileRemove Trang 27

TT. Visual Basic Nu mc Name l khong trng th ta s nhn c mt thng bo li: Menu Control must have a name. Ta phi nhp Name vo. Bc 16: Gn phm tt. Phm tt cho php ta s dng bn phm truy xut n cc mc ca Menu. Chng hn mun cho mc Open Project c phm tt l Ctrl + O, ta chn mc Open Project trong hp thoi Menu Editor. Bc 17: Nhp OK. Lu d n v thc thi chng trnh. Nhp chn mc bt k trong menu, ta thy khng tc dng. Do ta phi cung cp hm x l s kin khi nhp vo cc mc ca menu. Bc 18: ng ca s Menu Editor, nhp File\Exit; ca s Code xut hin. Thm on m sau cho s kin Click ca mnuFileExit: MsgBox Dong ung dung End Bc 19: Chy ng dng, chn File\Exit. iu g xy ra? Bc 20: Tr v ca s son tho; nhp chut vo File\Open Project m ca s son tho m lnh cho hm x l s kin mnuFileOpen_Click. Thm on m sau: MsgBox Ban da nhap vao muc File\Open Project Bc 21: Chy ng dng. Nhp vo File, ri Open Project; mt thng bo hin ra. ng thng bo li Bc 22: Ta c th dng phm tt chn Open Project; gi phm Alt, bm phm f ri o. Bc 23: Mt cch khc chn File\Open Project l bm phm Ctrl + O. Nh vy, ta thy c 3 cch chn File\Open Project. Bc 24: Trong nhiu ng dng c s dng menu, sau khi chn 1 mc trn menu, ta thy xut hin mt hp hi thoi gm cc nt OK v Cancel, trn c nhiu ty chn hay yu cu m ngi s dng c th chp nhn hay hy b. y cng vy, ta s m mt hp thoi tng t nh trn. Bc 25: Nhp chut vo Project\Components. Mt danh sch cc iu khin m ta c th thm vo d n ca mnh. Chn Microsoft Common Dialog 6.0 bng cch nh du vo checkbox v chn OK. Lc ny VB s t ng thm iu khin mi ny vo ToolBox. Bc 26: iu khin Common Dialog s xut hin trn ToolBox, nhp p trn n v t n vo v tr bt k trn Form1. Bc 27: Nhp chut vo mc File\Open Project, ca s son tho m lnh hin ra, thm vo on m sau trong hm x l s kin mnuFileOpen_Click: Form1.CommonDialog1.ShowOpen MsgBox Bn da chon tap tin: & Form1.CommonDialog1.FileName Bc 28: Trong lnh MsgBox trn ta c s dng php ton ni 2 chui li vi nhau: chui Ban da chon tap tin: v chui Form1.CommonDialog1.FileName. Lu , ta phi s dng php ton & ni chui li. Bc 29: m hp hi thoi (Common Dialog) ta phi c mt li gi hm: ShowOpen chng hn. Lc ny hp thoi mi hin ra. Bc 30: Lu d n v chy chng trnh. Chn File\Open Project, hp thoi hin ra. Chn tp tin no , iu g xy ra tip theo? Bc 31: Tm hiu cc lnh ShowOpen, ShowSave, ShowPrinter, ShowColor. Ta c th gi chng bng cch thm hm x l s kin cho mt mc ca menu, chng hn cho mnuFileSave_Click: Form1.CommonDialog1.ShowSave Trang 28

TT. Visual Basic

Bi tp 2-2 HA VI BASIC
Bc 1: To mt d n mi trong th mc Basic\Bt2-2. Bc 2: Trong Form1 ta to Menu c dng:

Hnh II.2: Menu v giao din

Trang 29

TT. Visual Basic

Vi cc thuc tnh nh sau: TT 1 2 3 4 5 6 7 8 Caption Ve hinh &Pixel &Tam giac &Den D&o &Hinh vuong Hinh khac Name MnuVe MnuPixel MnuTg MnuTgDen mnuTgDo MnuGach1 mnuHV MnuKhac TT 9 10 11 12 13 14 15 16 Caption Duong Tron &Cung tron &Bau duc Bieu &do &Xoa man hinh &Thoat Name MnuTron MnuCung MnuBauduc MnuBieudo MnuGach2 MnuXoa MnuGach3 MnuThoat

HM PAINTPICTURE Bc 3: Hm PaintPicture cho php ta copy rt nhanh mt khi d liu ha, ni nm na l mt khu vc trong mt hnh ha trn form, PictureBox n mt ni khc. Th d ta copy mt hnh t ch ny n ch khc trong form, hay t form/PictureBox ra i tng Printer sau ta in n ra. Ta nhp p ln PictureBox Icon trong ToolBox t mt PictureBox ln form vi cc thuc tnh sau: Name: picDohoa. Visible: False ( ta khng thy n lc chy chng trnh). Bc 4: By gi ta load mt hnh vo thuc tnh Picture ca picDohoa bng cch chn mt tp tin hnh nh t ca s Properties. y ta chn INTL_NO.BMP t folder \Program Files\Microsoft Visual Studio\Common\Graphics\Bitmaps\Assorted

Trang 30

Hnh II.3: La chn tp tin nh

TT. Visual Basic Trong chng trnh ny ta mun h khi nt tri ca Mouse xung v di chuyn chut th khi con tr chut i n u, hnh INTL_NO c v n . Bc 5: Ta s dng mt bin nh du nt-tri-ca-Mouse-Down, t tn l IsMousedown. Khi nhn c s kin MouseDown ta t IsMouseDown thnh True, v khi nhn c s kin MouseUp ta t li IsMouseDown thnh False. Mi ln nhn c s kin MouseMove th nu IsMouseDown l True ta s v hnh INTL_NO. Trong phn [General]\[Declaration], khai bo bin sau: Dim IsMouseDown As Boolean Bc 6: u tin bin ny phi c khi to l False trong s kin Form_Load: Private Sub Form_Load() IsMouseDown = False End Sub Bc 7: Ta x l cc s kin MouseUp, MouseDown, MouseMove ca Form nh sau: Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) IsMouseDown = True End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If IsMouseDown Then ' V hnh ti v tr X, Y PaintPicture picDohoa.Picture, X, Y, picDohoa.Width, picDohoa.Height End If End Sub Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) IsMouseDown = False End Sub Bc 8: Chn Form1 trong ca s Project Explorer, ta s x l s kin khi ta nhp chn mc Xoa man hinh trn menu nh sau: Private Sub mnuXoa_Click() Cls End Sub Bc 9: Khi ta nhp chn mc Thoat trn menu, chng trnh t ng ng li s kin mnuThoat_Click c x l: Private Sub mnuThoat_Click() End End Sub Bc 10: Lu d n li, chy chng trnh, th ko chut trn Form. Quan st kt qu. Trang 31

TT. Visual Basic HM PSET Bc 11: Ta dng hm PSet (Point Set) v mt pixel ln form. Ta cn cho bit PSet u v vi mu g, tc l ta cho n ta X,Y ca pixel v mt mu c tnh t hm RGB. Di y l on m v pixels mu ln form mt cch bt chng (randomly) v v tr v mu sc khi ngi dng chn mc Pixel trn menu: Private Sub mnuPixel_Click() Dim i As Integer ' Ta v (X, Y) Dim iXCoord As Integer Dim iYCoord As Integer ' Mu c bn Dim iRed As Integer Dim iGreen As Integer Dim iBlue As Integer ' Sinh cc s ngu nhin Randomize ' V 2000 im ngu nhin For i = 1 To 2000 ' Ly ta X (ngu nhin) ' Note that Rnd(1) returns a real number between 0 and 1, eg: 0.384 iXCoord = Int(Rnd(1) * ScaleWidth) ' Ly ta Y (ngu nhin) iYCoord = Int(Rnd(1) * ScaleHeight) ' Ly gi tr ngu nhin t 0 254 cho mi mu c bn iRed = Int(Rnd(1) * 255) iGreen = Int(Rnd(1) * 255) iBlue = Int(Rnd(1) * 255) ' V 1 pixel ti ta iXCoord, iYCoord PSet (iXCoord, iYCoord), RGB(iRed, iGreen, iBlue) Next MsgBox ("Ve xong!") End Sub Trong th d trn ta dng hm Randomize sinh sn trong b nh cc s thc bt chng t 0 n 0.999. Sau mi ln ta gi hm Rnd(1) l n s tr v mt s thc bt k t b s do hm Randomize sinh ra. Do , Rnd(1) * ScaleWidth s cho ta mt s thc c tr s t 0 n ScaleWidth. Mun i s thc ra s nguyn, ta dng hm Int. Bc 12: Lu d n li, chy chng trnh. Nhp chn Pixel trn menu. HM LINE Hm Line v mt ng thng t mt ta ny n mt ta khc trong mu do ta ch nh. Vi hai hm PSet v Line ta c th lm c rt nhiu chuyn. Th Trang 32

TT. Visual Basic d mun cho mt vt di ng, ta xa vt y bng cch v li n vi cng mu ca BackColor ca form, ri v vt y v tr mi. Mun v mt a gic nh tam gic hay ch nht ta rp nhiu ng thng li vi nhau, u ca mi ng thng l cui ca ng thng va mi c v trc. Mun v hnh dng bn trong mt hnh ch nht ta dng PSet C ba cch ch nh ta ca hai u ca mt ng thng ta mun v: Cho bit ta ca u v cui ng thng: V d: Line (50, 100)-(3000, 4000). Khi ng ny c v xong th v tr ca con tr ha (Graphic Cursor) c ta l v tr ca cui ng, tc l CurrentX=3000 v CurrentY=4000 trong trng hp ny. Ch cho bit ta cui ng thng: V d: Line -(3600, 4500), vbMagenta. Trong trng hp ny v tr ca Graphic Cursor (CurrentX, CurrentY) c ly lm ta ca u ng thng khi v. Tc l nu trc khi thc thi dng m ny CurrentX=3000 v CurrentY=4000 th dng m trn tng ng vi: Line (3000,4000)-(3600,4500), vbMagenta Dng ch Step ni s khc bit t CurrentX v CurrentY: V d: Line Step(400, 600)-Step(800, -500), vbGreen. Nu trc khi thc thi dng m ny CurrentX=3600 v CurrentY=4500 th dng m trn tng ng vi: Line (4000,5100)-(4800,4600), vbGreen Bc 13: Ta s v cng mt hnh tam gic nhng vi 2 mu khc nhau: v en. Ta s x l s kin khi chn mc Den trn menu nh sau: Private Sub mnuTgDen_Click() ' V tam gic vi mu en Line (700, 500)-(2800, 2400) Line (2800, 2400)-(1800, 900) Line (1800, 900)-(700, 500) End Sub Bc 14: V tam gic vi mu cng ta trn. S kin mnuTgDo_Click: Private Sub mnuTgDo_Click() ' V tam gic mu Line (700, 500)-(2800, 2400), vbRed Line -(1800, 900), vbRed Line -(700, 500), vbRed End Sub Bc 15: Ta c th v mt hnh ch nht vi 4 gc trn nh sau: Chn Tools\Add Procedure thm mt th tc vo: Name: HcnTron Type: Sub Scope: Private Private Sub HcnTron(ByVal X1 As Integer, ByVal Y1 As Integer, _ ByVal X2 As Integer, ByVal Y2 As Integer) Const Delta = 50 ' V hcn vi 4 gc trn Line (X1 + Delta, Y1)-(X2 - Delta, Y1) Trang 33

TT. Visual Basic Line -Step(Delta, Delta) Line -(X2, Y2 - Delta) Line -Step(-Delta, Delta) Line -(X1 + Delta, Y2) Line -Step(-Delta, -Delta) Line -(X1, Y1 + Delta) Line -Step(Delta, -Delta) End Sub Bc 16: Ta cng c th to bng bn trong hnh ch nht bng cch dng hm PSet chm cc m cch nhau chng 50 pixels nh sau: Private Sub TaoBong(ByVal X1 As Integer, ByVal Y1 As Integer, _ ByVal X2 As Integer, ByVal Y2 As Integer) Const Delta = 50 Dim i As Integer Dim j As Integer ' Kiem tra X1 < X2 ? ' i gi tr X1, X2 nu X1 > X2 If X2 < X1 Then Temp = X1 X1 = X2 X2 = Temp End If ' Kim tra Y1 < Y2 ' i gi tr Y1, Y2 nu Y1 > Y2 If Y2 < Y1 Then Temp = Y1 Y1 = Y2 Y2 = Temp End If ' V cc chm trong hcn, mi chm cch nhau 50 pixel For i = X1 + Delta To X2 - Delta Step 50 For j = Y1 + Delta To Y2 - Delta Step 50 PSet (i, j) Next Next End Sub Bc 17: By gi phi hp cch v hnh ch nht vi th tc TaoBong ni trn v hm Print ta c th vit ch bn trong mt khung mu nht khi ta x l s kin mnuHcn_Click: Private Sub mnuHV_Click() Dim X1 As Integer Dim Y1 As Integer Dim X2 As Integer Dim Y2 As Integer Trang 34

TT. Visual Basic ' Khi to ta u X1 = 4200: Y1 = 1000 X2 = 6200: Y2 = 2000 ' V hcn HcnTron X1, Y1, X2, Y2 ' To bng TaoBong X1, Y1, X2, Y2 ' V tr xut ch ln mn hnh CurrentX = X1 + 50 CurrentY = Y1 + 50 ' Kch thc ch Font.Size = 18 ' Hin th ra mn hnh Print "Xin chao!" End Sub HM CIRCLE Bc 18: Dng hm Circle v hnh trn, hnh bu dc v cung trn, vi bn trong khng mu hay c ph bng mt mu ta ch nh. v, ta phi cho bit ta ca tm ca ng trn v bn knh ca n. Ta x l cho s kin mnuTron_Click nh sau: Private Sub mnuTron_Click() ' V ng trn tm 2000,1500 bn knh 800 Circle (2000, 1500), 800 ' V ng thng ngang t tm Line (2000, 1500)-Step(0, 800) ' V ng thng ng t tm Line (2000, 1500)-Step(800, 0) End Sub Bc 19: By gi, thay v v nguyn mt ng trn, ta s ch v mt cung trn vi mu . ch nh rng ta s v t v tr no trn ng trn n v tr no khc, th d t 45 n 230 , ta cn phi i ra n v Radian bng cch dng hm Rads nh sau: Chn Tools\Add Procedure thm mt hm tn Rads vi cc gi tr sau: Name: Rads Type: Function Scope: Private Private Function Rads(ByVal Degree As Single) As Single ' i sang Radian Const PI = 22 / 7 Rads = Degree / 180 * PI End Function

Trang 35

TT. Visual Basic Bc 20: Cung trn lun lun c v ngc chiu kim ng h. Di y l on m ca s kin mnuCung_Click v mt cung trn mu bn knh 800, tm (4000, 2000), t 45 n 230 : Private Sub mnuCung_Click() Circle (4000, 2000), 800, vbRed, Rads(45), Rads(230) End Sub Bc 21: Ta c th cho t mu bn trong cc hnh trn, hay Pie Slice (mt phn ca hnh trn) bng cch t thuc tnh FillStyle bng 0 v ch nh mu FillColor. Mt Pie Slice l mt vng cung ng knh bi hai ng thng bn knh hai u. Mun v mt Pie Slice ta nh thm du tr ("-") trc hai tr s Radian, tc l dng Rads(45), -Rads(230) thay v Rads(45), Rads(230). Di y l m lnh v hai Pie Slices, c tm lch nhau mt cht, ng thi thm ch thch 87.5% v 12.5%. Hnh v ny tng t nh cc biu dn s, din tch S kin mnuBieudo_Click: Private Sub mnuBieudo_Click() FillStyle = 0 ' Cho php t mu FillColor = vbYellow ' V mt Pie Slice t 90 n 45 mu vng Circle (3000, 4000), 800, , -Rads(90), -Rads(45) ' V tr hin th vn bn CurrentX = 2800: CurrentY = 4400 Print "87.5%" FillColor = vbBlue ' V mt Pie Slice t 45 n 90 mu xanh Circle (3050, 3900), 800, , -Rads(45), -Rads(90) ' V tr hin th vn bn CurrentX = 3400: CurrentY = 3000 Print "12.5%" FillStyle = 1 ' Khng cho php t mu End Sub Bc 22: Hm Circle cn c dng v cc hnh bu dc (Elip). V hnh bu dc ging nh v mt hnh trn nhng ta cn cho thm mt tham s gi l Aspect. Aspect l s lin h gia bn knh ngang (chiu ngang) v bn knh dc (chiu cao). Th d nu Aspect=2 th chiu cao ca hnh bu dc gp i chiu ngang, ngc li, nu Aspect=0.5 th chiu ngang s gp i chiu cao. Di y l on m ta dng v hai hnh bu dc cng kch thc, mt nm thng ng v mt nm ngang S kin mnuBauduc_Click c x l: Private Sub mnuBauduc_Click() Circle (1400, 3000), 800, vbMagenta, , , 2 Circle (1400, 3000), 800, vbBlue, , , 0.5 End Sub Bc 23: Lu d n v chy chng trnh. Trang 36

TT. Visual Basic

II. BI TP T LM
Bi 1: Thit k chng trnh c giao din nh sau:

Hnh II.4: S dng Common Dialog

o Mi khi ngi dng chn mc Font, mt hp thoi chn Font m ra cho php chn la cc Font, sau khi h chn c Font, Font ch tng ng ca TextBox cng thay i theo. (Hng dn: S dng thuc tnh Font ca i tng TextBox). o Khi ngi dng chn Color, hp thoi chn mu hin th cho php ngi dng thay i mu ch ca TextBox theo mu chn (Hng dn: S dng thuc tnh ForeColor ca i tng TextBox). Bi 2: TR CHI PUZZLE (SP S) M T Khng gian chi gm 16 s, c xp trn 4 hng, mi hng gm 4 ct. Trong c 15 c gi tr t 1 n 15 c phn b theo th t ngu nhin v 1 trng (Hnh II.5)

Hnh II 5

Ngi chi phi tin hnh sp li cc s ny theo th t c kt qu nh hnh II.6 th tr chi kt thc. Chng trnh hin th cu chc mng: Chuc mung! Ban da thanh cong!!! & tng thi gian chi.

Trang 37

TT. Visual Basic

Hnh II 6

Ngi chi c th thc hin chi li bng cch chn File\New. Chng trnh s t ng xo li cc cha s & trng theo th t ngu nhin. Vic sp xp li cc s c thc hin bng cch s dng trng. Ngi dng c th chuyn mt s t cc ln cn n trng bng cch nhp chut ln s . Chng hn trn hnh 1 ngi dng c th nhp cha s 2 chuyn n n trng bn di & khi cha s 2 c s thnh trng mi. Ch rng ngi dng ch c th di chuyn cc s thuc nhng ln cn trng. Chng hn cc ln cn trng trong hnh 1 l nhng 2, 4, 11, 15. Hnh II.7 l mt v d khc v cc ln cn trng. Trong trng hp ny l cc cha s 9, 2 & 12. rng hai cha s 3 & 1 khng c xem l ln cn.

Hnh II.7

CC THUT TON X L Xc nh mt c phi l ln cn ca trng hin hnh hay khng? nh s th t cc t 0 n 15 theo th t t phi qua tri & t trn xung di. Xc nh cc ln cn cho tng . rng cc c th t 0 (hng 1 ct 1), 3 (hng 1 ct 4), 12 (hng 4 ct 1) & 15 (hng 4 ct 4) c s ln cn l 2. 8 c th t 1 (hng 1 ct 2), 2 (hng 1 ct 3), 4 (hng 2 ct 1), 7 (hng 2 ct 4), 8 (hng 3 ct 1), 11 (hng 3 ct 4), 13 (hng 4 ct 1), 14 (hng 4 ct 3) c s ln cn l 3. 4 cn li c th t 5, 6, 9, 10 c s ln cn l 4. Trang 38

TT. Visual Basic V d: Trong hnh 3: c th t 6 (cha s 2), c s ln cn l 4, l cc c th t 2 (cha s 3), 5 (khng cha s), 7 (cha s 15), 10 (cha s 1). c th t 16 (cha s 7), c s ln cn l 2, l cc c th t 12 (cha s 14), 15 (cha s 13). Ta c nhn xt rng, c tt c 16 mi c ti a 4 ln cn. Nh vy ta c th s dng mt mng 2 chiu lu tr gi tr cc ln cn. Dim Neibors(0 To 15, 0 To 3) As Integer V d: c th t 0: Neibors(0,1) = 1 Ln cn th 1 ca 0 l th 1 Neibors(0,2) = 4 Ln cn th 2 ca 0 l th 4 Neibors(0,3) = -1 Khng c ln cn 3 Neibors(0,4) = -1 Khng c ln cn 4 Nu mt trong cc ln cn ca c Click c gi tr trng ( trng) th hon i ni dung c Click vi trng, ngc li khng lm g c. Thut ton xo s o Xem khng gian chi c 16 u trng. o Chn ngu nhin 1 trong 16 s (t 0 n 15) t vo trng u tin. o Sau tip tc chn cc s cn li (15 s cha c chn) t vo th 2. o V c tip tc cho n cui cng, sao cho m bo nguyn tc cc s c chn s khng c chn li. iu ny trnh c tnh trng c 2 hay nhiu c cng gi tr s. o Xa trng ni dung cha s 0 to trng. S dng th tc Randomize & hm Rnd, th ngh xem cch thc kim tra xem mt s c s dng ri hay cha? Vit mt chng trnh con xo s ring. Di chuyn s n trng Thc cht l hon v ni dung c Click & trng. o Gn ni dung c Click cho trng. o Xa trng ni dung c Click. Kim tra tr chi kt thc Tr chi khi t n trng thi hnh 2 l kt thc. Vit hm kim tra. m thi gian chng trnh thc thi S dng b nh thi gian m thi gian thc thi ca chng trnh.

Trang 39

TT. Visual Basic

Chng 3 TP TIN
Mc tiu: Chng ny nhm mc ch rn luyn sinh vin cc k nng thao tc vi h thng tp tin ca Windows trong VB. Bn cnh , vic h thng li cc kin thc ca cc chng trc cng l mt mc tiu quan trng ca chng. Hc xong chng ny, sinh vin phi nm c cc vn sau: - S dng m hnh h thng tp tin. - Cch thc truy cp tp tin tun t. - Cch thc truy cp tp tin truy xut ngu nhin. Kin thc c lin quan: Gio trnh Visual Basic, Chng 7. Ti liu tham kho: - Visual Basic 6 Certification Exam Guide - Chapter 7, Page 191; Chapter 13, Page 377 - Dan Mezick & Scot Hillier - McGraw-Hill - 1998.

Trang 40

TT. Visual Basic

I. BI TP HNG DN
Bi tp 3-1:
XUT NHP TP TIN VN BN Bc 1: To Project mi tn Bt3-1 trong th mc Basic\Bt3-1. To giao din c dng sau:

Hnh III.1: Tp tin vn bn Item 1 TextBox Name Text1 Height 2220 Width 6630 Multiline True ScrollBars Both Item 2 CommandButton Name Command1 Caption New Item 3 CommandButton Name Command2 Caption Open Item 4 CommandButton Name Command3 Caption Save Item 5 CommandButton Name Command4 Caption Print Item 6 CommandButton Name Command5 Caption Copy Bc 2: Nt New c nhim v xa vn bn trong TextBox ta c th khi to mt ti liu mi. Do , trong hm s kin Command1_Click, thm vo on m: Text1.Text = Trang 41

TT. Visual Basic GHI CHUI LN TP TIN Bc 3: y ta nhp vo on vn bn ri ghi ln tp tin. n gin ta c v ghi t mt tp tin vn bn duy nht tn l vidu.txt nm trong th mc ca d n ca mnh ( y l th mc Bt5-1). ghi ln tp tin, trong hm s kin Command3_Click, thm on m sau: ' Ghi len tap tin Open App.Path & "\vidu.txt" For Output As #1 ' Ghi du lieu Print #1, Text1.Text ' Dong tap tin Close #1 MsgBox "Van ban da duoc luu" Bc 4: Vic thao tc trn tp tin c thc hin nh th tp tin. Thc cht y l mt s nguyn ch bi VB mt lin kt n mt tp tin xc nh xut hay nhp vo tp tin . y l s dng #1. Cu lnh Print s dng th tp tin ghi vn bn ln tp tin. Khi vic ghi hon tt, th tp tin c ng li nh cu lnh Close. Bc 5: Chy ng dng, nhp nt Command3. Nu chng trnh thc thi tt, ta c th m tp tin vidu.txt trong Notepad xem. C T TP TIN VN BN Bc 6: c tp tin t a tng t nh ghi tp tin. Chn on m sau trong hm x l s kin Command2_Click Text1.Text = "" Close #1 ' Mo tap tin Open App.Path & "\vidu.txt" For Input As #1 Dim filetext As String ' Bien chuoi luu van ban Do While Not EOF(1) Input #1, filetext ' Doc tung dong ' Hien thi trong TextBox, chu y them vao ky tu xuong dong Text1.Text = Text1.Text & filetext & vbCrLf Loop Close #1 Bc 7: Chy ng dng. Nhp nt Command2 c t tp tin vidu.txt vo TextBox. y ta c nh ngha mt bin trong lnh Dim filetext as String y, mi ln ta c tng dng trong tp tin vidu.txt; mi ln c nh vy ta lu vo bin kiu chui filetext; sau ta ni chui filetext vo sau chui Text1.Text (hin th trong TextBox). Qu trnh trn c thc hin lin tc n khi c ht ni dung tp tin nh vo vng lp: Do While Not EOF(1) EOF l mt hm c nh ngha sn trong VB, hm ny c nhim v kim tra xem c t n cui tp tin hay khng? Nu ni dung tp tin vn cha c c ht, qu trnh c vn tip tc n khi EOF l True. Trang 42

TT. Visual Basic Input #1 c mt chui t tp tin cho n khi gp k t xung dng. K t xung dng ny c b qua trong lnh Input; do nu mun hin th thnh nhiu dng trn TextBox, ta phi thm vo k t xung dng cho mi dng ta c c t tp tin sau ta mi hin th trn TextBox. Hng s vbCrLf l s lin kt 2 k t xung dng v v u dng. IN VN BN RA MY IN Bc 8: Nu my in c ni vo, my in phi c kch hot. Ta c th kim tra chng bng cch in th vi dng vn bn trong Word hay trong Notepad. Bc 9: i tng Printer s ch n my in mc nh. Trong hm x l s kin Command4_Click chn thm on m: Printer.Print Text1.Text Cu lnh ny dng in ni dung trong TextBox ra my in. Tuy nhin ni dung ca TextBox ch c in khi chng trnh chm dt. in ngay lp tc, ta cn phi thm dng sau: Printer.EndDoc CHP D LIU VO CLIPBOARD Bc 10: Trong nhiu ng dng, nhiu khi ta cn s dng d liu qua li vi nhau. Chng hn, ngi dng c th s dng d liu c hin th trn form hin th ca chng trnh chng ta sang chng trnh x l vn bn Microsoft Word. Lc ny, mt cch hiu qu nht l s dng i tng Clipboard, i tng ny cho php c v ghi ln Windows Clipboard t chng trnh ng dng: Thm on m sau vo hm s kin Command5_Click: Clipboard.Clear Clipboard.SetText Text1.Text ng ca s m lnh li v chy chng trnh ng dng. Nhp mt on vn bn, sau nhp Command5. T Microsoft Word, s dng menu Edit\Paste ly d liu t Clipboard hin th.

Bi tp 3-2
THAO TC VI RESOURCE FILE Mc tiu: Gip lm quen vi tp tin resource ca VB, nht l cng c cc thao tc trn tp tin. Bc 1: To th mc Basic\Bt3-2. To mt d n mi trong th mc ny. Bc 2: To giao din nh hnh sau:

Trang 43

TT. Visual Basic

1 2 3 4 8 9
10

5 6 7 Hnh III.2: Tp tin resource

Trong : Item 1: Caption: Thong tin nguoi su dung BorderStyle: 3-Fixed Dialog StartUpPosition: 2-Center Screen Item 2: Label Name: lblHelp Index: 0 Item 3: Label Name: lblHelp Index: 1 Item 4: Label Name: lblHelp Index: 2 Item 5: TextBox Name: txtHelp Index: 0 Item 6: TextBox Name: txtHelp Index: 1 Item 7: TextBox Name: txtHelp Index: 2 Item 8: CommandButton Name: cmdHelp Index: 0 Item 9: CommandButton Name: cmdHelp Index: 1 Item 10: CommandButton Name: cmdHelp Index: 2 Trang 44

TT. Visual Basic Bc 3: Ta nhn thy cc iu khin c cng mt tn hin th (Thong tin). Mc tiu ca ta l s dng tp tin resource (ti nguyn) thay i tn hin th trn cc iu khin. to tp tin ti nguyn, ta vo mc ADD-IN\ADD-IN MANAGER trn menu ca VB. Trong cc mc ca ADD-IN MANAGER nhp p vo resource editor v ng mc ADD-IN MANAGER li. Bc 4: Chn Tools\Resource Editor trn menu. M String Table Editor bng cch nhp chut ln biu tng abc ca Resource Editor. Ca s son tho cho tp tin ti nguyn s m ra. Ta nhp cc hng nh sau: ID RESOURCE ID RESOURCE STRING STRING 1 Ten 7 So dt 2 Ho 8 So CMND 3 Ma nv 9 T. trang hn 4 Huy bo 10 Huy bo 5 Vo hieu hoa 11 Ve truoc 6 Ke 12 Hoan tat Bc 5: Lu tp tin ti nguyn li. Bc 6: M ca s son tho m lnh. To kiu do ngi dng nh ngha lu d liu cn nhp vo. Thm on m sau: Private Type yeucau ho As String ten As String manv As String sodt As String socmnd As String tinhtranghn As String End Type Bc 7: Ta thm 2 bin na; mt bin lu thng tin v ngi s dng (theo kiu trn), mt bin lu th t cc bc m ngi s dng nhp thng tin ca mnh vo. Private chisobuoc As Integer Private cacyeucau As yeucau Bc 8: Trong chng trnh ny, ngi s dng phi nhp thng tin ca mnh vo thng qua cc bc nhp, trong cc iu khin c s dng nh mt mng cc iu khin. tn dng chng ta cn khai bo cc hng s bit hin thi ngi dng ang bc th my ca qu trnh nhp thng tin cng nh bit c mnh nhp vo nt nhn no trong qu trnh trn. Do , ta thm on khai bo sau: ' cac hang so Private Enum buoc buoc1 = 1 buoc2 = 2 buoc3 = 3 End Enum Private Enum nhannut nuttrai nutgiua nutphai Trang 45

TT. Visual Basic End Enum Bc 9: Chng trnh ny th hin trn mt form duy nht v s dng mng cc iu khin to cc bc ngi dng nhp thng tin vo. Do ta s dng tp tin ti nguyn hin th cc tn ca iu khin nhm hin th cho chnh xc. V th ta cn c mt hm (th tc) cp nht thng tin nhp vo da vo cc bc ca ngi dung khi nhp thng tin vo. Vo Tools\Add Procedure thm th tc sau: Public Sub Hienthi() Dim i As Integer ' Kiem tra cac buoc Debug.Assert chisobuoc = 1 Or chisobuoc = 2 For i = 0 To 2 Nhan lblHelp(i).Caption = LoadResString((chisobuoc - 1) * 6 + (i + 1)) ' Nut cmdHelp(i).Caption = LoadResString((chisobuoc - 1) * 6 + (i + 4)) If UCase(cmdHelp(i).Caption) = "VO HIEU HOA" Then cmdHelp(i).Visible = False Else cmdHelp(i).Visible = True End If txtHelp(i).Text = "" Next End Sub Bc 10: Khi chng trnh thc hin, ta phi bc th nht ca qu trnh nhp liu Thm on m sau trong th tc x l s kin Form_Load: chisobuoc = 1 Hienthi Bc 11: Mi khi c mt nt nhn c nhp, qu trnh nhp liu chuyn sang bc k tip; ngi s dng c th i n bc k tip hay tr v bc trc trong qu trnh ny. V cc nt nhn (button) l mt mng iu khin (control array) nn chng c cng mt s kin Click tc ng vo gi l cmdHelp_Click. Hm x l ny c tham s l mt ch s kiu Integer nhn bit nt nhn no c nhp. y, ta thm on m sau trong hm x l s kin ny. Private Sub cmdHelp_Click(Index As Integer) Select Case chisobuoc Case buoc1 cacyeucau.ten = txtHelp(0).Text cacyeucau.ho = txtHelp(1).Text cacyeucau.manv = txtHelp(2).Text Case buoc2 cacyeucau.sodt = txtHelp(0).Text cacyeucau.socmnd = txtHelp(1).Text cacyeucau.tinhtranghn = txtHelp(2).Text End Select Trang 46

TT. Visual Basic ' Cac nut nhan Select Case Index Case nuttrai ' Huy bo End Case nutgiua ' ve truoc chisobuoc = buoc1 Hienthi Case nutphai ' di toi chisobuoc = chisobuoc + 1 If chisobuoc = buoc2 Then Hienthi Else Guiyeucau End If End Select End Sub Bc 12: Khi qu trnh nhp thng tin kt thc, thng tin ny c lu vo trong mt tp tin vn bn, nh th tc Guiyeucau. Thm th tc Guiyeucau vo nh mc Tools\Add Procedure v nhp on m sau: Public Sub Guiyeucau() On Error GoTo Guiloi ' Lay the tap tin Dim intFile As Integer intFile = FreeFile() ' Viet len tap tin Open App.Path & "\yeucau.txt" For Output As #intFile Print #1, "ho: " & cacyeucau.ho Print #1, "ten: " & cacyeucau.ten Print #1, "manv: " & cacyeucau.manv Print #1, "sodt: " & cacyeucau.sodt Print #1, "socmnd: " & cacyeucau.socmnd Print #1, "tinhtranghn: " & cacyeucau.tinhtranghn Close #intFile MsgBox "Yeu cau cua ban da duoc goi di", vbOKOnly + vbInformation, _ "Goi yeu cau" End Exit Sub Guiloi: MsgBox Err.Description, vbOKOnly + vbExclamation, "Goi yeu cau" Trang 47

TT. Visual Basic Exit Sub End Sub Bc 13: Lu v thc thi chng trnh.

Bi tp 3-3 CHNG TRNH X L VN BN N GIN


GIAO DIN A TI LIU Bc 1: To mt d n lu trong th mc Basic\Bt3-3. Giao din a ti liu (MDI Form) gm mt ca s cha cha nhiu ca s con (chng hn nh cc chng trnh Microsoft Word, Excel c t chc theo dng ny). thm vo d n, ta chn mc Project\Add MDI Form t menu ca VB. Bc 2: Ta cho Form1 tr thnh mt ca s con ca MDI Form bng cch chn thuc tnh MDIChild = True. HM MAIN (SUB MAIN) Bc 3: Trong chng trnh ta cn iu khin mi th k t khi cc ca s con ca MDI Form xut hin, do ta cn phi bt u thc thi chng trnh ca ta t hm Main (Sub Main). Ta chn mc Project\ Add Module thm mt Modul vo d n ca mnh, sau ta chn Tools\Add Procedure thm hm Main vo (Public Sub Main); hm ny ta dng bt u gi thc thi chng trnh ca mnh. chn thc thi chng trnh t hm Main, chn Project\Properties; chn Start up Object l Sub Main. Bc 4: Thm dng lnh sau vo hm Main: MDIForm1.Show Bc 5: Chng trnh cn c mt h thng menu gi thc thi. Do , chn MDI Form, sau chn Tools\Menu Editor to menu sau: Menu Name Menu Caption mnuFile &File mnuFileNew &New mnuFileOpen &Open muFileSave &Save mnuFileBar mnuFileExit E&xit Bc 6: Ta x l s kin mnuFileExit_Click nh on m sau: Private Sub mnuFileExit_Click() Dim f As Form ' Thoat cac cua so con For Each f In Forms If TypeOf f Is Form1 Then Unload f Set f = Nothing End If Trang 48

TT. Visual Basic Next ' Thoat cua so cha Unload Me End Sub Bc 7: to ra mt ti liu trng cho chng trnh x l vn bn, ta cn phi c mt TextBox trong Form1. Ngi s dng nh ni dung vo TextBox, do ta thm mt TextBox vo Form1 vi cc thuc tnh sau: MultiLine: True ScrollBars: 2-Vertical Ta x l s kin Form_Resize ca Form1 nh sau: Private Sub Form_Resize() Text1.Height = Me.ScaleHeight Text1.Width = Me.ScaleWidth Text1.Left = 0 Text1.Top = 0 End Sub Bc 8: Mi ln chn mc New trn ca s chng trnh ng dng, mt khung ca s trng hin ra ta nhp vn bn vo. Do , thm on m sau trong th tc x l s kin mnuFileNew_Click: Private Sub mnuFileNew_Click() Dim f As Form1 Static n As Integer Set f = New Form1 f.Text1.Text = "" n=n+1 f.Caption = "Document " & Format(n) f.Show End Sub THAO TC TRN TP TIN Bc 9: Ta cn phi c hp thoi nhm chn tp tin lu (hay m tp tin) trong chng trnh x l vn bn. Do ta cn thm mt Dialog Control vo chng trnh. nh du vo mc chn Microsoft Common Dialog Control 6.0 (SP3). Sau ta thm Dialog Control t ToolBox vo MDIForm1. Ta x l s kin mnuFileSave_Click nh on m sau: Private Sub menuFileSave_Click() Dim tenfile As String CommonDialog1.ShowSave tenfile = CommonDialog1.FileName Open tenfile For Output As #1 Print #1, MDIForm1.ActiveForm.Text1.Text Close #1 End Sub Trang 49

TT. Visual Basic Bc 10: Khi mc Open ca menu c chn, hp thoi Open File c m ra s kin mnuFileOpen_Click c x l nh sau: Private Sub mnuFileOpen_Click() Dim tenfile As String, s As String CommonDialog1.ShowOpen tenfile = CommonDialog1.FileName If UCase(Right(tenfile, 3)) <> "TXT" Then Exit Sub Call mnuFileNew_Click Open tenfile For Input As #1 Do Until EOF(1) Line Input #1, s Me.ActiveForm.Text1.Text = Me.ActiveForm.Text1.Text & s & vbCrLf Loop Close #1 End Sub Bc 11: Lu d n v chy chng trnh. To mi, lu, m mt s ti liu. Nhn xt kt qu.

Bi tp 3-4 THAO TC VI I TNG WORD


Mc ch: Windows c sn mt s i tng khi ta ci t Windows hay khi ci mt s phn mm. Bi tp ny gip ta tm hiu cch thc truy xut cc i tng c sn ny t Visual Basic. THAM CHIU I TNG Bc 1: To th mc Basic\Bt3-4. Khi ng mt d n mi trong th mc ny. Bc 2: Trong bi tp ny ta c tham chiu n i tng Word ca Microsoft Word; do ta phi c thao tc tham chiu n i tng ny trong mn hnh son tho VB bng cch: Chn Project\References trn menu. Trong ca s References, thit lp tham chiu n: Microsoft Word 9.0 Object Library v Microsoft Office 9.0 Library. Sau ng ca s References li. Bc 3: Ta c th kim tra cc i tng trn c c a vo hay cha nh thao tc: Chn View\Object Browser. XY DNG NG DNG Bc 4: To giao din chng trnh c dng sau:

Trang 50

TT. Visual Basic 2 1 3 4 5 6 Hnh III.3: Thao tc vi i tng Word

Trong : 1: TextBox Name: txtWord Multiline: True ScrollBar: 2-Vertical 2: CommandButton Name: cmdLuu Caption: Lu 3: CommandButton Name: cmdTruoc Caption: Trc khi in 4: CommandButton Name: cmdCTa Caption: Kim li. 5: CommandButton Name: cmdThoat Caption: Thot 6: CommandButton Name: cmdGiup Caption: Tr gip Bc 5: s dng c m hnh, ta phi khai bo mt s bin i tng ca Word. Trong phn [General]\ [Declarations], khai bo nhng bin sau: Public ungdung As Word.Application Public tailieu As Word.Document Public trogiup As Office.Assistant Bc 6: Khi chng trnh thc hin, iu ta mun l mt ti liu mi ca Word c to ra ta c th thao tc trn chng mt cch gin tip thng qua chng trnh VB ca mnh. To mt ti liu Word mi tng ng vi vic to ra mt th hin ca i tng Document. V th, chn on m sau vo th tc Form_Load to ra mt ti liu Word mi t chng trnh VB. Set ungdung = CreateObject("Word.Application") Set tailieu = ungdung.Documents.Add Set trogiup = ungdung.Assistant Trang 51

TT. Visual Basic Bc 7: Nt Lu c nhim v ghi tt c nhng g trn TextBox vo i tng Word mi to ra. Do , ta x l s kin cmdLuu_Click nh sau: ' Ghi tai lieu moi tailieu.Content.Text = txtWord.Text MsgBox "Van ban duoc luu trong Word", vbOKOnly, "Word" Bc 8: Nt Trc khi in c nhim v hin th ti liu Word ging nh khi chng c in ra giy; v th s kin cmdTruoc_Click c x l nh sau: tailieu.PrintPreview ungdung.Visible = True ungdung.Activate Bc 9: Nt Kim li thc hin thao tc kim li chnh t cho ti liu Word, thao tc ny c x l trong th tc cmdCTa_Click: tailieu.CheckSpelling txtWord.Text = tailieu.Content.Text Bc 10: Nt Thot s ng ca s cha ti liu Word li. Chn on m sau trong th tc cmdThoat_Click ng Word li: ungdung.Quit SaveChanges = False Bc 11: Khi ta nhp vo nt Tr gip th ca s Help ca Office hin ra. Do , thm on m sau trong th tc cmdGiup_Click m ca s Help ca Office: ungdung.Visible = True ungdung.Activate trogiup.Help Bc 12: Lu d n v chy chng trnh. Nhp vi dng vn bn vo TextBox v nhp nt Lu. Mi khi vn bn c lu, ta nhp nt Trc khi in xem ti liu trc khi. Khi vn bn c hin th, nhp nt Kim li. Sau th nhp nt Tr gip xem phn gip ca Office. Cui cng nhp nt Thot thot khi Word.

II. BI TP T LM
1) Thit k chng trnh nh ng dng Notepad ca Windows. o Thit k giao din

Trang 52

TT. Visual Basic

Hnh III.5: Giao din Notepad

o X l cc s kin Mi khi Form thay i kch thc, TextBox cng thay i theo cho ph hp vi Form New Open, Save, Save As: m hp thoi Common Dialog cho php chn tp tin m hay lu. S dng i tng FileSystemObject thao tc vi tp tin vn bn. Exit Font Setting: M ra hp thoi chn Font, thit lp Font ca TextBox chnh l Font c chn trong hp thoi. o X l m rng: Khi ngi dng lu tp tin ri, ln th hai bm vo Save th khng m hp thoi Common Dialog na m s lu vi tn tp tin chn trong ln Save u tin. Mi khi ngi dng thay i ni dung ca mt tp tin, sau h chn Exit ng ng dng li; mt hp thng ip (Message Box) s m ra hi c lu tp tin hay khng? 2) i l Minh Thnh ca cng ty Unilever Vit Nam ti Cn Th cn qun l thng tin v cc mt hng m i l nhn t cng ty. Cc thng tin cn qun l gm: M mt hng, tn mt hng, n v tnh, gi ca mt hng . Cc thng tin ny c m t nh sau: Trang 53

TT. Visual Basic Type HangHoa MaHang As String*5 TenHang As String*40 DVTinh As String*15 Gia As Double End Type Da vo thng tin m t trn, Anh (Ch) hy: a. To d n mi v vit cc khai bo thch hp. b. Thit k Form chnh nh sau:

Hnh III.6: Giao din chnh c. Khi ngi dng chn mc Thot, ri nhp chn Thc hin, chng trnh chm dt. Vit m lnh x l i vi trng hp ny. d. Khi ngi dng nhp chn Nhp liu, ri Thc hin, mt Form s m ra cho php nhp thng tin hng ha vo. Hy thit k Form ny vi cc chc nng nh hnh di:

Hnh III.7: Form nhp liu e. Mi khi ngi dng nhp thng tin vo cc TextBox, ri chn nt nhn Nhp, nhng thng tin s c lu ln li hin th. Khi chn Ghi tp tin, mt hp thoi (Common Dialog) lu tp tin hin ra cho php chn ng dn Trang 54

TT. Visual Basic v tn tp tin, sau ghi nhng thng tin trn li vo tp tin chn (vi cu trc tp tin c m t phn u). Nt nhn Thot s ng Form ny li, tr v Form chnh ban u. Vit cc on x l thch hp. f. Form chnh ban u (hnh III.6), khi ngi dng chn Hin th thng tin hng ha, mt hp thoi m tp tin (CommonDialog) hin ra cho php chn tn tp tin cha d liu v hng ha c to ra cu e. Sau c d liu t tp tin ri hin thi trn li:

Hnh III.8: c t tp tin Hy thit k Form v vit m lnh x l cc s kin thch hp.

Trang 55

TT. Visual Basic C S D LIU S DNG Cc chng k tip l phn lp trnh Visual Basic truy xut c s d liu (CSDL). Trong cc bi tp trn CSDL, ta c s dng CSDL HangHoa.MDB ca Access. C s d liu ny c sn, sinh vin c th lin h cn b ging dy ly v. Thng tin cc bng (Table) ca CSDL ny nh sau: TLOAIHANG(MaLoai, TenLoai): Mi loi hng ha c m loi v tn loi. THANGHOA(MaHang, TenHang, DVTinh, MaLoai). Mi hng ha c m hng ha, tn hng ha, n v tnh v ch thuc 1 loi hng ha no . TNHANVIEN(MaNV, HoTen, Phai, Diachi, Ngaysinh, Luong, Ghichu): Mi nhn vin c m nhn vin, h tn, phi, a ch nhn vin, ngy sinh, lng ca nhn vin l bao nhiu v c th c mt vi ghi ch v nhn vin . TPHATSINH(SOTT, Ngay, Loai, Fieu, Hten, Lydo, MaHang, Solg, Dgia, MaNV): Mi mt pht sinh c ghi nhn thnh mt chng t c SoTT, ngy pht sinh chng t, loi pht sinh l nhp (hay xut), s phiu, h tn khch hng, l do pht sinh ng vi hng ha no (m hng), s lng v n gi l bao nhiu, nhn vin ph trch pht sinh l g (MaNV). Bng quan h gia cc Table ny nh sau:

Cc mi quan h ca CSDL HangHoa.mdb

Trang 56

TT. Visual Basic

Chng 4 CC I TNG TRUY CP D LIU

Mc tiu: Chng ny gm cc bi tp nhm rn luyn sinh vin cch thc lp trnh c s d liu s dng th vin i tng Data Access Objects (DAO). y l cch thc lp trnh ph bin i vi cc ng dng chy trn my n. Hc xong chng ny, sinh vin phi nm bt c cc vn sau: - S dng iu khin d liu truy xut c s d liu. - S dng th vin i tng DAO lp trnh c s d liu. Kin thc c lin quan: - Gio trnh Visual Basic, chng 9. Ti liu tham kho: Visual Basic 6 Certification Exam Guide - Chapter 5, Page 139 - Dan Mezick & Scot Hillier - McGraw-Hill - 1998. http://www.vovisoft.com/VisualBasic/VB6Chapter14.htm http://www.vovisoft.com/VisualBasic/VB6Chapter15.htm

Trang 57

TT. Visual Basic

I. HNG DN
Bi tp 4-1

S DNG DATA CONTROL


Bc 1: To mt d n mi tn DataControl trong th mc Basic\Bt4-1. Bc 2: Nhp p ln Icon ca Control Data trong Toolbox. Mt Control Data tn Data1 s hin ra trn Form. Mun cho n nm bn di Form, hy t thuc tnh Align ca n trong Properties Window thnh 2 - Align Bottom. Nhp bn phi hng property DatabaseName, k click ln nt la chn c ba chm chn mt file c s d liu Access t hp thoi cho Data1. y ta chn E:\Program Files\Microsoft Visual Studio\VB98\BIBLIO.MDB (ty my tnh c th l C hay a D)

Hnh IV.1: Xc lp thuc tnh cho Data Control

Bc 3: Trong chng trnh ny ta lm vic vi table Titles ca c s d liu BIBLIO.MDB, xem v sa i cc records. thuc tnh DefaultType ca Data1 c tr s 2- UseJet, tc l dng k thut DAO, thay v dng k thut ODBC.

Hnh IV.2: Recordset Type

Trang 58

TT. Visual Basic Khi ta nhp chut ln thuc tnh Recordsource ca Data1, ri nhp ln tam gic nh bn phi, mt ComboBox s m ra cho ta thy danh sch cc tables trong c s d liu, chn Titles. thuc tnh RecordsetType ca Data1 c tr s l 0 - Table: Bc 4: Mt t mi m ta s dng thng xuyn khi truy cp d liu trong VB6 l Recordset (b records). Recordset l mt Set of records, n c th cha mt s records hay khng c record no c. Mt record trong Recordset c th l mt record ly t mt Table. Trong trng hp y c th ta ly v tt c records trong table hay ch nhng records tha ng mt iu kin, th d nh ta ch mun ly cc records ca nhng sch xut bn trc nm 1990 (Year Published < 1990). To Form c dng nh sau:

Hnh IV.3: Giao din ban u 4 labels vi caption ca chng: Title, Year Published, ISBN v Publisher ID. K cho thm 4 textboxes tng ng v t tn chng l txtTitle, txtYearPublished, txtISBN v txtPublisherID. Bc 5: Chn textbox txtTitle, ri t thuc tnh Datasource ca n trong Properties Window thnh Data1. Khi click ln property Datafield ca txtTitle v m ComboBox ra ta s thy lit k tn cc trng trong table Titles. l v Data1 c coi nh trung gian ly table Titles t c s d liu. y ta s chn ct Title. Tng t cho 3 textboxes cn li, v chn cc ct Year Published (nm xut bn), ISBN (s l lch trong th vin quc t), v PubID (s l lch nh xut bn) lm Datafield cho chng. Bc 6: Lu d n v chy chng trnh. Ta s thy giao din nh sau:

Trang 59

TT. Visual Basic

Hnh IV.4: Kt qu thc thi ng dng

Nhn xt: Ta c th bm cc nt di chuyn Navigator Buttons i n cc record u (first), trc (previous), k (next) v cui (last). Mi ln ta di chuyn n mt record mi l chi tit ca record y s hin th. Nu khng dng cc Navigator Buttons, ta cng c th vit on m lm cng tc tng ng bng cch gi cc hm trn Recordset l MoveFirst, MovePrevious, MoveNext v MoveLast. Khi record cui ca Recordset ang hin th, nu ta gi hm MoveLast th thuc tnh EOF (End-Of-File) ca Recordset tr thnh True. Tng t nh vy, khi record th nht ca Recordset ang hin th, nu ta gi hm MovePrevious th thuc tnh BOF (Begin-Of-File) ca Recordset tr thnh True. Nu mt Recordset khng c cha mt record no c th c hai thuc tnh EOF v BOF u l True. Khi record u tin ang hin th, nu ta sa Year Published i t 1985 thnh 1983 ri nhp Navigator button Next hin th record th nh, k click Navigator button Previous hin th li record u tin th ta s thy l trng Year Published ca record u tin tht s c thay i (updated) thnh 1983. iu ny c ngha rng khi di chuyn t record ny n record khc th nu record ny c s thay i do ngi s dng, n lu tr s thay i trc khi di chuyn. Cha chc l ta mun iu ny, do , nu ta khng mun ngi s dng tnh c sa i mt record th ta c th t thuc tnh Locked ca cc textboxes y thnh True ngi s dng khng th sa i cc textboxes nh trong hnh di y:

Trang 60

TT. Visual Basic

Hnh IV.5: Kha (lock) Textbox

CH NH V TR C S D LIU LC CHY CHNG TRNH Bc 7: Cch ch nh tn c s d liu trong giai on thit k (at design time) ta dng trc y tuy tin li nhng hi nguy him, v khi ta ci chng trnh ny ln my tnh khc, cha chc tp tin c s d liu y nm trong mt th mc c cng tn. V d trn my tnh ny th c s d liu nm trong th mc E:\Program Files\Microsoft Visual Studio\VB98, nhng trn my tnh khc th c s d liu nm trong th mc D:\Basic\Bt4-1 chng hn. Do , khi chng trnh khi ng ta nn xc nh li v tr ca c s d liu. Chng hn ta mun c s d liu trong cng mt th mc vi chng trnh ang chy, ta c th dng thuc tnh Path ca Application Object App. Khai bo mt bin tn duongdan trong phn [General]\[Declaration] ca Form1: Dim duongdan As String Bc 8: Ta x l s kin Form_Load nh sau: Private Sub Form_Load() duongdan = App.Path If Right(duongdan, 1) <> "\" Then duongdan = duongdan & "\" Data1.DatabaseName = duongdan & "BIBLIO.MDB" End Sub THM BT CC RECORDS Bc 9: Chng trnh n y tm n, nhng n khng cho ta cng c thm (add), bt (delete) cc records. By gi hy t vo Form 5 buttons tn: cmdEdit, cmdNew, cmdDelete, cmdUpdate v cmdCancel.

Trang 61

TT. Visual Basic Bc 10: Lc chng trnh mi khi ng, ngi s dng ang xem thng tin cc records th hai buttons Update v Cancel khng cn phi lm vic. Do ta s Lock (kha) cc textboxes v disable hai buttons ny v khng cn dng chng. Bc 11: Trong Sub SetControls di y, ta dng mt tham s gi l Editing vi tr s False hay True ty theo ngi dng ang xem (browse) hay sa i (Edit), ta gi l Browse mode v Edit mode. Trong Edit mode, cc Textboxes c unlocked (m kha) v cc nt cmdNew, cmdDelete v cmdEdit tr nn v hiu lc: Sub SetControls(ByVal Editing As Boolean) ' Lock/Unlock textboxes txtTitle.Locked = Not Editing txtYearPublished.Locked = Not Editing txtISBN.Locked = Not Editing txtPublisherID.Locked = Not Editing ' Enable/Disable buttons CmdUpdate.Enabled = Editing CmdCancel.Enabled = Editing CmdDelete.Enabled = Not Editing cmdNew.Enabled = Not Editing CmdEdit.Enabled = Not Editing End Sub Trong Browse mode, Form c dng nh sau:

Hnh IV.7: Kt qu thc thi

Bc 12: Th tc SetControls c gi trong Sub Form_Load khi chng trnh khi ng v s kin CmdEdit_Click c x l nh sau: Private Sub Form_Load() duongdan = App.Path If Right(duongdan, 1) <> "\" Then duongdan = duongdan & "\" Data1.DatabaseName = duongdan & "BIBLIO.MDB" SetControls (False) End Sub Private Sub CmdEdit_Click() Trang 62

TT. Visual Basic SetControls (True) End Sub Bc 13: Khi ta xa mt record trong recordset, v tr ca record hin ti (current record) vn khng thay i. Do , sau khi xa mt record ta phi MoveNext. Tuy nhin, nu ta va xa record cui ca Recordset th sau khi MoveNext, thuc tnh EOF ca Recordset s thnh True. Thnh ra ta phi kim tra iu , nu ng vy th li phi MoveLast hin th record cui ca Recordset nh trong on m ca Sub cmdDelete_Click di y: Private Sub CmdDelete_Click() On Error GoTo DeleteErr With Data1.Recordset ' Xoa record .Delete ' Nhay den record ke .MoveNext If .EOF Then .MoveLast Exit Sub End With DeleteErr: MsgBox Err.Description Exit Sub End Sub Bc 14: Ta c th Update (cp nht) mt record trong Recordset bng hm Update. Nhng ta ch c th gi hm Update ca mt Recordset khi Recordset ang trong Edit hay AddNew mode. Ta t mt Recordset vo Edit mode bng cch gi hm Edit ca Recordset, th d nh Data1.Recordset.Edit. Tng t nh vy, ta t mt Recordset vo AddNew mode bng cch gi hm AddNew ca Recordset, th d nh Data1.Recordset.AddNew. Private Sub cmdNew_Click() Data1.Recordset.AddNew SetControls (True) End Sub Private Sub cmdUpdate_Click() Data1.Recordset.Edit Data1.Recordset.Update SetControls (False) End Sub Bc 15: Lu d n v chy chng trnh.

Trang 63

TT. Visual Basic

Bi tp 4-2
CC I TNG C BN CA DAO Bc 1: To th mc Basic\Bt4-2. To giao din cho chng trnh nh sau:

Hnh IV.8: Giao din ban u Cc tn ca thnh phn menu ln lt l: mnuFile, mnuOpen, mnuExit. Sau vo Project\References, nh du vo Microsoft DAO 3.51 Object Library; chn OK. Bc 2: Thm mt Common Dialog vo Form1, tn l dlgDatabase. Bc 3: Thm mt DBGrid vo form bng cch chn: Project\Components, nh du Microsoft Data Bound Grid Control 5.0 (SP3); ri chn DBGrid trn ToolBox. Sau thm mt TextBox v mt Data Control vo form1. Ta c cc tn ca iu khin l: DBGrid1, Text1, Data1 vi cc thuc tnh nh sau: Item 1: TextBox Name: Text1 Multiline: True ScrollBars = 3 Item 2: DBGrid Name: DBGrid1 DataSource = Data1 Ta c hnh dng ca form1 nh sau:

Trang 64

TT. Visual Basic

Hnh IV.9: Giao din y

Sau , thm on m sau trong th tc x l s kin mnuOpen_Click: CommonDialog1.FileName = "*.mdb" CommonDialog1.Filter = "Access DBs (*.mdb)|*.mdb" CommonDialog1.ShowOpen Data1.DatabaseName = CommonDialog1.FileName Bc 4: Thm mt nt nhn (Button) nh hnh trn, Caption l Run query. Nt ny c mc ch l thc thi cu lnh SQL m ngi dng nhp vo Text1. thc thi c lnh SQL ny, ta phi gn thuc tnh Recordsource ca Data Control Data1 nh trong th tc x l s kin Command1_Click: Private Sub Command1_Click() Data1.RecordSource = Text1.Text Data1.Refresh End Sub Bc 5: Trong hm x l s kin mnuExit_Click thm dng m sau: End Chy chng trnh, trong mc File\Open ca menu chn tp tin C:\Program Files\Microsoft Visual Studio\VB98\Biblio.mdb. Sau ta g cu lnh SQL sau vo Text Box: Select * from Publishers Nhp chut vo nt nhn Run query. Quan st kt qu hin th. Ta to mt chng trnh cho php ngi s dng m mt CSDL v chy cu SQL trn CSDL . By gi, i vi CSDL c m trn, tm xem cc bng ca n l g nhm mc ch xy dng cc cu truy vn cho ph hp. Bc 6: Thm on m sau vo phn khai bo ca Form1: Private db As DAO.Database Private td As DAO.TableDef Private qd As DAO.QueryDef Private fld As DAO.Field

Trang 65

TT. Visual Basic Bc 7: Trong hm x l s kin mnuOpen_Click ta cn kim tra xem tp tin c chn c phi l tp tin CSDL ca Access hay khng (*.mdb)? Sau dng cc bin c khai bo trn thao tc Sa th tc mnuOpen_Click nh di y: Private Sub mnuOpen_Click() CommonDialog1.FileName = "*.mdb" CommonDialog1.Filter = "Access DBs (*.mdb)|*.mdb" CommonDialog1.ShowOpen If UCase(Right(CommonDialog1.FileName, 3)) <> "MDB" Then MsgBox "Khong phai la tap tin cua Microsoft Access" Else On Error Resume Next db.Close On Error GoTo 0 Screen.MousePointer = vbHourglass ' Mo CSDL Set db = _ DBEngine.Workspaces(0).OpenDatabase(CommonDialog1.FileN ame) Form1.Caption = "Cau SQL: Chon " & CommonDialog1.FileName Screen.MousePointer = vbDefault Data1.DatabaseName = CommonDialog1.FileName End If End Sub Bc 8: Ta m c CSDL, by gi ta dng mt List Box hin th tt c cc bng ca CSDL c m trn. Thm mt ListBox vo Form tn List1, trong hm x l s kin mnuOpen, thm on m sau trc lnh End If: ' Them vao ListBox List1.Clear For Each td In db.TableDefs List1.AddItem td.Name Next Chy chng trnh, ListBox s hin th tt c cc bng ca CSDL trn. Bc 9: Thm mt ListBox na vo Form, tn List2. Thm on m sau trong hm x l s kin List1_Click: Private Sub List1_Click() ' Tim bang duoc chon trong CSDL Set td = New TableDef For Each td In db.TableDefs If td.Name = Me.List1.List(Me.List1.ListIndex) Then Exit For End If Next Trang 66

TT. Visual Basic ' Hien thi cac truong cua bang duoc chon For Each fld In td.Fields List2.AddItem fld.Name Next End Sub Bc 10: Chy chng trnh, chn File\Open chn tp tin CSDL, lc List1 s hin th cc bng ca CSDL. Nhp chn mt bng trong List1, List2 s hin th tn cc trng ca bng . By gi ta tin thm mt bc na l hin th tt c cc cu truy vn (SQL) c lu trong CSDL trn bng cch: Thm mt ListBox na vo Form1 tn l List3, sau thm vo on m sau trong hm x l s kin mnuOpen trc lnh End If: List2.Clear List3.Clear Text1.Text = "" For Each qd In db.QueryDefs List3.AddItem qd.Name Next Bc 11: Chy chng trnh, kim tra xem iu g xy ra trn List3. ng chng trnh li, thm on m sau trong hm x l s kin List3_Click: Private Sub List3_Click() For Each qd In db.QueryDefs If qd.Name = List3.List(List3.ListIndex) Then Text1.Text = qd.SQL End If Next End Sub Chy chng trnh, m BIBLIO.MDB, nhp vo List3. Quan st kt qu. Bc 12: Chng ta lu cu SQL nhp t bn phm vo trong CSDL trn vi mt tn cho trc. tng chnh l ta kim tra cu SQL c nhp , nu n khng c li ta s lu vo CSDL. Thm mt nt nhn (Button) vo Form1 vi Name: Command2, Caption: Save Query. Sau x l s kin Command2_Click nh sau: Private Sub Command2_Click() ' Luu cau SQL Set qd = New QueryDef qd.SQL = Trim$(Text1.Text) MsgBox "Cau SQL duoc luu la: " & qd.SQL ' Nhap ten cua cau SQL qd.Name = InputBox("Nhap ten cau SQL: ") db.QueryDefs.Append qd End Sub

Trang 67

TT. Visual Basic Bc 13: Chy chng trnh, m BIBLIO.MDB, chn cu mt query, chy n (Run query); sau nhp vo nt Save Query lu li vi tn ta phi nhp vo t bn phm. kim tra, hy m li tp tin trn (File\Open): cu query trn c hin th trong List3. Hnh bn di hin th kt qu khi thc thi chng trnh.

Hnh IV.10: Kt qu thc thi ng dng

Trang 68

TT. Visual Basic

Bi tp 4-3
M HNH DAO

Bc 1: Trong bi ny ta s tm hiu nhng cch lp trnh cn bn vi c s d liu MS Access qua k thut DAO m khng cn dng n Control Data nh bi tp 4-1. Ta s cn n cc i tng (Object) trong th vin DAO, do nu bn m mt d n VB mi th hy dng Menu Command Project | References... chn Microsoft DAO 3.51 Object Library bng cch click checkbox bn tri nh trong hnh di y.

Hnh IV.11: Tham chiu n th vin DAO

Bc 2: Sau trong ca s son tho m lnh ca Form chnh ta s khai bo bin myDatabase kiu DAO database v bin myRS cho mt DAO recordset. y ta ni r Database v Recordset l thuc loi DAO phn bit vi Database v Recordset thuc loi ADO (ActiveX Data Object) sau ny.

Hnh IV.12: Khai bo bin Trang 69

TT. Visual Basic Bc 3: By gi hy t ln Form chnh, tn frmDAO, 4 labels vi captions: Title, Year Published, ISBN v Publisher ID. K cho thm 4 textboxes tng ng v t tn chng l txtTitle, txtYearPublished, txtISBN v txtPublisherID. iu ta mun lm l khi Form mi c thc thi, n s ly v t c s d liu mt Recordset cha tt c records trong table Titles theo th t abc ca field (trng) Title v hin th record u tin. DNG T KHA SET Bc 4: Trc ht l m mt c s d liu da vo tn tp tin ca Access database: Set myDB = OpenDatabase(AppFolder & "BIBLIO.MDB") t kha Set trong on m trn. l v myDB l mt Pointer (con tr) ch n mt Object (i tng). Mc d t y v sau ta s dng myDB nh mt Database (c s d liu) theo cch ging nh bt c mt bin thuc kiu d liu no khc, nhng khi ch nh ln u l n t u n th ta dng ch Set, ni rng tht ra myDB khng phi l Object Database, nhng l Pointer n Object Database. Nguyn nhn l VB dnh ra mt phn trong b nh (memory) cha i tng Database khi ta nhn c n khi hm OpenDatabase thc thi. D v tr ch cha i tng Database trong b nh khng nht nh, nhng v ta nm cn ch n v tr y nn ta vn c th lm vic vi n mt cch bnh thng. Ci cn y l tr s ca bin myDB. V tr s ny khng phi l Object (i tng), nhng n cha memory address (a ch trong b nh) ch n (point to) i tng Database, nn ta gi n l Pointer (con tr). Tng t nh vy, v Recordset l mt Pointer ch n mt i tng, ta cng dng Set khi ch nh mt DAO Recordset ly v t hm OpenRecordset ca database myDB. Set myRS = myDB.OpenRecordset("Select * from Titles ORDER BY Title") Tham s kiu String ta dng cho hm OpenRecordset l mt cu lnh SQL. N ch nh cho c s d liu ly tt c mi trng ca mi mu tin t Table Titles lm mt Recordset v sp xp cc mu tin trong Recordset y theo th t abc ca trng Title (ORDER BY Title). l Recordset ny cng ging nh thuc tnh Recordset ca mt Data Control m ta dng trong bi 7-1. By gi c Recordset ri, ta c th hin th chi tit ca record u tin nu Recordset y c t nht mt record. Ta kim tra iu y da vo thuc tnh RecordCount ca Recordset nh trong on m di y ca s kin Form_Load: Private Sub Form_Load() AppFolder = App.Path If Right(AppFolder, 1) <> "\" Then AppFolder = AppFolder & "\" Set myDB = OpenDatabase(AppFolder & "BIBLIO.MDB") Set myRS = myDB.OpenRecordset("Select * from Titles ORDER BY Title") If myRS.RecordCount > 0 Then myRS.MoveFirst Displayrecord End If End Sub Trang 70

TT. Visual Basic Bc 5: Sau khi dng hm MoveFirst ca Recordset nh v mu tin hin thi l mu tin u tin, ta hin th tr s cc trng ca mu tin bng cch gn chng vo cc textboxes ca Form nh sau: Private Sub Displayrecord() With myRS txtTitle.Text = .Fields("Title") txtYearPublished.Text = .Fields("[Year Published]") txtISBN.Text = .Fields("ISBN") txtPublisherID.Text = .Fields("PubID") End With End Sub v trng Year Published gm c hai t nn ta phi t tn ca trng y gia hai du ngoc vung ([]). trnh b phin phc nh trong trng hp ny, khi t tn cc trng tca table trong lc thit k c s d liu hy dn dnh cc ch li vi nhau, ng ri ra. Th d nh dng YearPublished thay v Year Published. CC NT DI CHUYN Bc 6: Mun c cc nt Navigators ging nh ca mt Control Data, ta hy t ln Form 4 buttons mang tn CmdFirst, CmdPrevious, CmNext v CmdLast vi captions: <<, <, >, >>. Bc 7: M lnh cho cc nt ny cng n gin, nhng ta phi coi chng khi ngi dng mun di chuyn qu mu tin cui cng hay mu tin u tin. Ta phi kim tra xem EOF c tr thnh True khi ngi dng nhp CmdNext, hay BOF c tr thnh True khi ngi dng nhp CmdPrevious. Cc s kin ny c x l nh sau: Private Sub CmdNext_Click() myRS.MoveNext If Not myRS.EOF Then Displayrecord Else myRS.MoveLast End If End Sub Private Sub CmdPrevious_Click() myRS.MovePrevious If Not myRS.BOF Then Displayrecord Else myRS.MoveFirst End If End Sub Private Sub CmdFirst_Click() myRS.MoveFirst Displayrecord End Sub Trang 71

TT. Visual Basic Private Sub CmdLast_Click() myRS.MoveLast Displayrecord End Sub Bc 7: Chy chng trnh. Khi chy chng trnh ta s thy n hin th chi tit ca mu tin u tin khc vi cc bi trc y v cc mu tin c sp xp. Ta hy th dng cc nt di chuyn <, <<, >, >> xem chng lm vic c ng khng. Ti y, ta nhn thy rng d ngi dng c v tnh sa i mt chi tit no trong cc textboxes, khng c mu tin no b cp nht ha trong c s d liu khi ngi dng di chuyn t mu tin ny n mu tin khc. L do l cc Texboxes khng c rng buc d liu (Data Bound) vi cc trng ca Recordset. THM BT CC RECORDS Bc 8: Ging nh chng trnh trong bi ri, ta s thm cng c thm (add), bt (delete) cc mu tin. Hy thm vo Form 5 buttons tn: cmdEdit, cmdNew, cmdDelete, cmdUpdate v cmdCancel. Bc 9: Ch no trong chng trnh 4-1 ta dng Data1.Recordset th by gi ta dng myRS. Ta s dng li Sub SetControls vi tham s Editing c tr s False hay True ty theo ngi dng ang xem (Browse) hay sa i (Edit). Trong Browse mode, cc Textboxes b Locked (kha) v cc nt cmdUpdate v cmdCancel b v hiu lc. Trong Edit mode, cc Textboxes c unlocked (m kha) v cc nt cmdNew, cmdDelete v cmdEdit b v hiu lc. Do ta ch cn nh l khi ngi dng ang sa i mt mu tin hin hnh hay thm mt mu tin mi. Ta cha tr s Boolean y trong bin AddNewRecord. Nu user sp thm mt record mi th AddNewRecord = True, nu User sp Edit mt record hin hu th AddNewRecord = False. Ngoi ra, khi ngi dng sp thm mt mu tin mi bng cch nhp nt New th ta phi t xa ht cc textboxes bng cch gn chui rng cho cc TextBox . Ta c cc on m sau: Dim AddNewRecord As Boolean Private Sub ClearAllFields() txtTitle.Text = "" txtYearPublished.Text = "" txtISBN.Text = "" txtPublisherID.Text = "" End Sub Private Sub cmdNew_Click() Trang 72

TT. Visual Basic AddNewRecord = True ClearAllFields SetControls (True) End Sub Private Sub CmdEdit_Click() SetControls (True) AddNewRecord = False End Sub Bc 10: Khi ngi dng nhp Cancel trong khi ang sa i cc textboxes, ta khng cn gi hm v Recordset cha b t vo AddNew hay Edit mode. y ta ch cn hin th li chi tit ca mu tin hin hnh, tc l hy b nhng g ngi dng ang nh vo: Private Sub CmdCancel_Click() SetControls (False) Displayrecord End Sub Bc 11: Lc ngi dng nhp Update, ta s kim tra d liu xem c trng no b b trng (nht l kha chnh ISBN bt buc phi c tr s) hay c g khng hp l bng cch gi hm GoodData. Nu GoodData tr li mt tr s False th ta khng xc tin vi vic Update. Nu GoodData tr v tr s True th ta t Recordset vo AddNew hay Edit mode ty theo tr s ca bin AddNewRecord l True hay False. Ging nh khi hin th chi tit ca mt Record ta phi gn tng trng vo textbox, th by gi khi Update ta phi lm ngc li, tc l gn ni dung ca tng textbox vo cc trng tng ng. Sau cng ta gi hm Update ca recordset v cho cc iu khin tr li Browse mode: Private Function GoodData() As Boolean GoodData = True End Function Private Sub CmdUpdate_Click() If Not GoodData Then Exit Sub With myRS If AddNewRecord Then .AddNew Else .Edit End If .Fields("Title") = txtTitle.Text .Fields("[Year Published]") = txtYearPublished.Text .Fields("ISBN") = txtISBN.Text .Fields("PubID") = txtPublisherID.Text .Update End With SetControls (False) Trang 73

TT. Visual Basic End Sub TM MT RECORD Bc 11: Tip theo y, ta mun lit k cc sch c tiu cha mt ch hay cu no , th d nh ch "Guide". K ngi dng c th chn mt sch bng cch chn tiu sch y v nhp nt Go. Chng trnh s locate (tm ra) record ca sch y v hin th chi tit ca n. By gi bn hy cho vo Form mt textbox tn txtSearch v mt Image tn ImgSearch. K t mt frame tn fraSearch vo Form. ln frame ny mt listbox tn List1 ta cc sch. Ta s cho ImgSearch hin th hnh mt ng nhm nn bn hy click vo bn phi property Picture trong Properties Window chn Icon BINOCULR.ICO t folder E:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Misc. Khi ngi dng nhp vo ImgSearch, chng trnh s t ng tm kim cc sch c ta c ngi dng nh vo trong TextBox. S kin ImgSearch c x l nh sau: Private Sub ImgSearch_Click() fraSearch.Visible = True Dim SrchRS As DAO.Recordset Dim SQLCommand As String SQLCommand = "Select * from Titles where Title LIKE '" & "*" & txtSearch & "*" & "' ORDER BY Title" Set SrchRS = myDB.OpenRecordset(SQLCommand) If SrchRS.RecordCount > 0 Then List1.Clear With SrchRS Do While Not SrchRS.EOF List1.AddItem .Fields("Title") .MoveNext Loop End With End If End Sub Trong cu SELECT trn ta dng ton t LIKE, ni dung ca TextBox, c du * hai bn. Du * l ch c (hay khng c) ch g cng c. Bc 12: Lu d n v chy chng trnh. Kim tra kt qu.

Trang 74

TT. Visual Basic

Bi tp 4-4 TH D V S DNG DAO


Bi tp ny nhm mc ch gii thiu v cch thc s dng iu khin d liu v th vin DAO trong vic thit k mt Form nhp liu hon chnh cho bng THangHoa trong CSDL HangHoa.mdb. Giao din cng vi m lnh ch mang tnh cht gi ; sinh vin c th thc hin theo ring ca mnh. Bc 1: Thit k form nh sau:

Hnh IV.13: S dng Data Control

* Vi *: DataControl: iu khin d liu DatabaseName: HangHoa.MDB RecordSource: THangHoa Name: datHH Bc 2: Thit lp cc thuc tnh cho cc TextBox & ComboBox. DataSource: DatHH DataField: Bc 3: t iu khin li ln Form (+) sau khi tham chiu n n (Project\Components\Microsoft Data Bound Grid Control 5.0 SP3). DataSource: datHH Chy chng trnh, ta c kt qu nh trn. Trang 75

TT. Visual Basic Bc 4: S kin cmdThem_Click Private Sub cmdThem_Click() datHH.Recordset.AddNew DoiTThai False End Sub Trong : Private Sub DoiTThai(ByVal TThai As Boolean) cmdThem.Enabled = TThai cmdSua.Enabled = TThai cmdXoa.Enabled = TThai cmdHuy.Enabled = Not TThai cmdLuu.Enabled = Not TThai End Sub Bc 4: S kin cmdSua_Click & s kin cmdXoa_Click: Private Sub cmdSua_Click() datHH.Recordset.Edit DoiTThai False End Sub Private Sub cmdXoa_Click() On Error GoTo Xuly datHH.Recordset.Delete Exit Sub Xuly: MsgBox Err.Description, vbCritical + vbSystemModal, "Loi" End Sub Bc 5: S kin cmdLuu_Click & cmdHuy_Click Private Sub cmdHuy_Click() 'dathh.Database = datHH.Recordset.CancelUpdate DoiTThai True End Sub Private Sub cmdLuu_Click() datHH.Recordset.Update DoiTThai True End Sub Bc 6: S kin Form_Load: Private Sub Form_Load() DoiTThai True End Sub Trang 76

TT. Visual Basic - C nhn xt g nu khi chy chng trnh, ta thm mi mt mu tin c kha l Mahang trng vi mt MaHang c. gii quyt ta lm th no?

II. BI TP T LM
S dng CSDL HangHoa.mdb, anh (ch) hy: 1) Ci tin Form nhp bi 4-4, sao cho trng MaLoai phi c ly t cc MaLoai ca bng TLoaiHang. Hn na thay v hin th MaLoai, ta hin th TenLoai cho d theo di; nhng khi thm vo bng THangHoa, ta li thm vo MaLoai ca TenLoai . 2) Bng cch s dng DAO (tng t 4-3), anh (ch) hy: a. Thit k Form nhp liu cho bng THANGHOA. b. Thit k Form nhp liu cho bng TNHANVIEN.

Trang 77

TT. Visual Basic

Chng 5 I TNG D LIU T XA


Mc tiu: Chng ny nhm gii thiu cho sinh vin cch thc s dng th vin i tng RDO truy cp d liu, cch thc truy cp d liu trc y i vi c s d liu my t xa. Hc xong chng ny, sinh vin phi nm c cc vn sau: - Thit lp tn ngun d liu (Data Source Name) trn Windows. - S dng Remote Data Control truy cp d liu. - i tng UserConnection cng nh th vin i tng RDO. Kin thc c lin quan: Gio trnh Visual Basic, Chng 10. Ti liu tham kho: - Visual Basic 6 Certification Exam Guide - Chapter 11, Page 309 Dan Mezick & Scot Hillier - McGraw-Hill - 1998. - Microsoft Visual Basic 6.0 & Lp trnh c s d liu Chng 23, trang 735 - Nguyn Th Ngc Mai (ch bin) - Nh xut bn Gio dc 2000. - T hc Lp trnh c s d liu vi Visual Basic 6 trong 21 ngy (T2) - Chng 17, trang 227 - Nguyn nh T (ch bin), Nh xut bn Gio dc - 2001.

Trang 78

TT. Visual Basic

I. HNG DN
Bi tp 5-1 I TNG USER CONNECTION
THIT LP NGUN D LIU ODBC Bc 1: Trong bi tp ny, ta s thao tc vi CSDL Access BIBLIO.MDB thng qua VB. Trc tin ta phi thit lp ngun d liu nh tin ch ODBC Administrator ca Windows. Chn ODBC Administrator trong Control Panel (icon tn l ODBC). Nhp p vo icon ny khi ng ODBC Administrator. Bc 2: Mt hp thoi hin ra hin th tt c cc ngun d liu ODBC hin thi trn my tnh. to mt ngun d liu mi, ta chn mc System DSN. Nhp vo nt Add. Hp thoi cho php to ngun d liu mi vi tt c cc iu khin (drivers) ODBC c sn trn my. y, ta chn Microsoft Access ODBC driver trong danh sch v chn Finish. Bc 3: Hp thoi ci t ODBC xut hin. Trong hp thoi ny, nh ngha mt ngun d liu mi. Nhng trc tin ta phi xc nh tn ca ngun d liu. Ta c th t vi bt c mt tn no, chng hn BIBLIO. Sau , nhp nt Select tm n CSDL BIBLIO.MDB trong my tnh, chn tp tin ny; nhp OK. Lc ny ngun d liu c nh ngha xong. TO GIAO DIN CHNG TRNH Bc 4: To mt d n mi trong th mc Basic\Bt5-1. To giao din chng trnh nh hnh di:

1 2 3 4 5 6 7 8 9

Hnh V.1: Giao din

1: TextBox Name: txtTitle 2: TextBox Name: txtAuthor 3: TextBox Trang 79

TT. Visual Basic Name: txtName 4: TextBox Name: txtYear 5: TextBox Name: txtISBN 6: CommandButton Name: cmdDau Caption: u 7: CommandButton Name: cmdCuoi Caption: Cui 8: CommandButton Name: cmdSau Caption: Sau 9: CommandButton Name: cmdTruoc Caption: Trc I TNG USER CONNECTION Bc 5: y, ta s dng i tng User Connection truy xut RDO. Chn Project\Components trn menu; sau chn mc Designers. Trong mc ny, nh du check vo Microsoft UserConnection. Sau ta thm UserConnection vo d n bng cch chn Project\More ActiveX Designers\Microsoft UserConnection trn menu. Bc 6: i tng UserConnection cung cp cho ta giao din ha truy xut n ni kt kiu RDO v lm tin li hn khi xc nh ni kt ODBC, nht l truy xut n cc cu truy vn hay cc th tc lu tr sn trong CSDL m khng cn n mt on m no. Bc 7: Trong ca s thuc tnh ca UserConnection, lin kt vi ngun d liu BIBLIO ODBC va nh ngha trn. Khi ni kt c thit lp, ng ca s Properties li. Bc 8: Nhp chut phi vo icon UserConnection, mt menu hin ra, chn Insert Query trn menu thm mt cu truy vn vo UserConnection. Hp thoi to truy vn mi xut hin cho php nh ngha cu truy vn mi. t tn cho cu truy vn ny l AllTiles. Chn ty chn Base on User-Defined SQL v thm cu SQL sau vo ca s son tho: SELECT Titles.Title, Titles.ISBN, Authors.Author, Titles.[Year Published], Publishers.[Company Name] FROM Publishers, Titles, Authors, [title author] WHERE ((((Authors.Au_ID = [title author].Au_ID) AND ([title author].ISBN = Titles.ISBN)) AND (Titles.PubID = Publishers.PubID))) Trang 80

TT. Visual Basic ORDER BY Titles.Title Bc 9: ng ca s thit k cu truy vn lu vo UserConnection. VIT M LNH CHO NG DNG Bc 10: M ca s Code ca Form1, trong phn [General]\[Declarations], nh ngha cc bin sau cho i tng ni kt RDO v ResultSet. Private m_noiket As UserConnection1 Private m_ketqua As RDO.rdoResultset Bc 11: Ta s to ni kt trong s kin Form_Load, sau khi ni kt c to, ta chy cu SQL va nh ngha trong UserConnection. Thm on m sau vo s kin Form_Load truy xut n ngun d liu: Set m_noiket = New UserConnection1 m_noiket.EstablishConnection ' Lay ket qua Set m_ketqua = _ m_noiket.rdoQueries("AllTitles").OpenResultSet(rdOpenDynamic) ' Dien vao Form Call Hienthi Th tc Hienthi dng hin th thng tin ca cc trng tng ng ca mi mu tin ln TextBox, th tc ny c vit nh sau: Public Sub Hienthi() txtTitle.Text = m_ketqua!Title txtAuthor.Text = m_ketqua!Author txtName.Text = m_ketqua![Company Name] txtYear.Text = m_ketqua![Year Published] txtISBN.Text = m_ketqua!ISBN End Sub Bc 12: Phn cn li ca chng trnh ca ta l thm phn x l s kin Click cho cc nt nhn. M lnh cho cc s kin ny nh sau: Private Sub cmdCuoi_Click() m_ketqua.MoveLast Call Hienthi End Sub

Trang 81

TT. Visual Basic Private Sub cmdDau_Click() m_ketqua.MoveFirst Call Hienthi End Sub Private Sub cmdSau_Click() m_ketqua.MoveNext If m_ketqua.EOF Then Beep m_ketqua.MoveLast Else Call Hienthi End If End Sub Private Sub cmdTruoc_Click() m_ketqua.MovePrevious If m_ketqua.BOF Then Beep m_ketqua.MoveFirst Else Call Hienthi End If End Sub Bc 13: Lu d n v chy chng trnh.

Trang 82

TT. Visual Basic

Bi 5-2 S DNG REMOTE DATA CONTROL


Bc 1: To d n mi trong th mc Basic\Bt5-2. ng k mt DSN vi tn l DBHH. Bc 2: Trong bi tp ny ta s dng Remote Data Control v li hin th d liu, do ta tham chiu n cc thnh phn ny bng cch chn Project\Components, thit lp tham chiu n Microsoft Remote Data Control v Microsoft Data Bound Grid Control. Nhp OK. Bc 3: Thit k Form c dng sau:

1 Hnh V.2: S dng RDC 1: RemoteDataControl. Name: rdcHangHoa 2: DBGrid. Name: dbgHangHoa. Bc 4: t thuc tnh DataSourceName ca iu khin rdcHangHoa l DBHH (DSN to trc y). Bc 5: nh thuc tnh SQL ca iu khin rdcHangHoa l: Select * From THANGHOA Bc 6: Ch nh thuc tnh DataSource ca iu khin dbgHangHoa l rdcHangHoa. Bc 7: Thc thi chng trnh. Trang 83

TT. Visual Basic

Bi 5-3 ODBC DIRECT


Bc 1: To d n mi lu trong Basic\Bt5-3. Bc 2: Tham chiu n iu khin li Microsoft Data Bound Grid Control trong mc Project\Components. Bc 3: To Form c dng sau:

2 Hnh V.3: S dng ODBC Direct 1: DBGrid. Name: DbGrid1. 2: Data Control. Name: Data1. Bc 4: i thuc tnh DefaultType ca DataControl l 1 - Use ODBC. Bc 5: Thuc tnh Connect ca Data1 l: ODBC;DSN=DBHH. Bc 6: t thuc tnh Record Source ca Data Control: Select * From THANGHOA. Bc 7: t thuc tnh Data Source ca DBGrid1 l: Data1. Bc 8: Lu d n v thc thi chng trnh.

II. BI TP T LM
S dng CSDL HangHoa.mdb v th vin i tng RDO, anh (ch) hy: 1) Thit k Form nhp liu cho bng THANGHOA. 2) Thit k Form nhp liu cho bng TNHANVIEN. Trang 84

TT. Visual Basic

Chng 6 I TNG D LIU ACTIVEX


Mc tiu: Chng ny gm cc bi tp nhn rn luyn cho sinh vin cch thc lp trnh c s d liu bng cch s dng th vin i tng ADO, giao din lp trnh ph bin hin nay. Hc xong chng ny, sinh vin phi nm bt c cc vn sau: Cc thnh phn trong m hnh i tng ADO gm c: - i tng Connection. - i tng Recordset. - i tng Command. - i tng Field. Cch thc s dng cc i tng ny trong ng dng vit bng VB. Kin thc c lin quan: - Gio trnh Visual Basic - Chng 11 Ti liu tham kho: Visual Basic 6 Certification Exam Guide - Dan Mezick & Scot Hillier - Chapter 12, Page 345 - McGraw-Hill - 1998. http://www.vovisoft.com/VisualBasic/VB6Chapter16.htm

Trang 85

TT. Visual Basic

I. HNG DN
Bi tp 6-1 S DNG ADO DATA CONTROL
Bc 1: Khi ng mt d n VB6 mi, thm iu khin Data ADO vo hp ToolBox nh chn Menu Command Project | Components..., ri Microsoft ADO Data Control 6.0 (OLEDB) nh di y:

Hnh VI.1: Tham chiu th vin ADO Bc 2: t tn d n l ADODataControl. Sa thuc tnh Name ca form chnh thnh frmADO, Caption: ADO DataControl Demo. t mt Control Data ADO tn Adodc1 ln Form. Mun cho n nm bn di Form, thit lp thuc tnh Align ca n trong ca s Properties thnh 2 - vbAlignBottom. Bc 3: Nhp bn phi hng property (Custom), k click ln nt browse c ba chm hp thoi Property Pages hin ra. Trong hp thoi ny, trn Tab General chn Radio (Option) Button Use Connection String ri nhp nt Build.... Trong hp thoi Data Link Properties, Tab Provider, chn Microsoft Jet 3.51 OLE DB Provider, ri click nt Next >> hay Tab Connection. Trang 86

TT. Visual Basic

Hnh VI.2: Thit lp Connection Mc Select or enter a database name ta chn E:\Program Files\Microsoft Visual Studio\VB98\BIBLIO.MDB, trn my tnh khc c th nm trn C hay D. Trang 87

TT. Visual Basic Sau , click nt Test Connection pha di th xem connection c c thit lp tt khng.

Hnh VI.3: La chn CSDL Bc 4: Lp connection xong ri, ta ch nh mun ly g v lm Recordset bng cch chn thuc tnh Recordsource ca Adodc1. Trong giao din Property Pages ca n chn 2-adCmdTable lm Command Type, k m Combo box cho Table or Stored Procedure Name chn table Titles.

Hnh VI.4: RecordSource Chn tr s 2-adOpenDynamic cho thuc tnh Cursor Type ca Adodc1: Trang 88

TT. Visual Basic

Hnh VI.5: CursorType

Bc 5: By gi t ln Form 4 iu khin nhn vi captions: Title, Year Published, ISBN v Publisher ID. K cho thm 4 textboxes tng ng v t tn chng l txtTitle, txtYearPublished, txtISBN v txtPublisherID. thc hin Data Binding, chn textbox txtYearPublished (nm xut bn), ri thit lp thuc tnh Datasource ca n thnh Adodc1. Khi chn thuc tnh DataField ca txtYearPublished v m ComboBox ra ta s thy lit k tn cc Fields trong table Titles. l v Adodc1 c coi nh trung gian ly table Titles t database. y ta s chn ct Year Published. Lp li cng vic ny cho 3 textboxes kia, v chn cc ct Title (Tiu ), ISBN (s l lch trong th vin quc t), v PubID (s l lch nh xut bn) lm DataField cho chng.

Hnh VI.6: Xc lp DataField

Trang 89

TT. Visual Basic n y, mc d cha vit mt dng lnh no, bn c th chy chng trnh v n s hin th nh di y:

Hnh VI.7: Kt qu ng dng

Bi tp 6-2 TO TP TIN LIN KT D LIU (DATALINK FILE)


Tp tin lin kt d liu l tp tin Windows dng cha cc thng tin v chui kt ni n mt CSDL no . Chng ta s s dng tp tin ny trong vic thit lp i tng kt ni (Connection) n CSDL. Bc 1: DataLink File c to trong ca s Windows Explorer. Do khi ng Windows Explorer, vo th mc \Program Files\Common Files\System\Ole DB\Data Links. y l ni thng cha cc tp tin DataLink. Bc 2: Chn New\Microsoft Data Link t Windows Explorer. Bc 3: i tn tp tin ny thnh Biblio.UDL. Bc 4: Nhp chut phi ln tp tin mi ny v chn PROPERTIES t menu. Bc 5: Nhp chut chn mc PROVIDER & chn Microsoft JET 3.51 OLEDB Provider. Nhp Next. Bc 6: Chn ng dn n tp tin BIBLIO.MDB (C:\Program Files\Microsoft Visual Studic\VB98\Biblio.mdb) trong mc Select or Enter Database Name. Bc 7: Nhp mc Test Connection kim tra kt ni c thnh cng hay khng? Bc 8: Chn OK lu li kt ni d liu ny.

Bi tp 6-3 I TNG ADO RECORDSET


Bc 1: Trc khi bt u, cn kim tra tp tin DataLink ca bi 6-2 c c to ra hay l khng? Bc 2: To mt d n mi trong VB th mc Basic\Bt6-3. Trang 90

TT. Visual Basic Bc 3: Tham chiu n th vin ADO bng cch chn Project\References\ActiveX Data Object 2.0 Library. Chn OK. Bc 4: t mt iu khin ListBox ln Form (Name: lstName) Bc 4: X l s kin Form_Load nh sau: Set m_Connection = New ADODB.Connection m_Connection.ConnectionString = _ "File Name=C:\Program Files\Common Files\System\Ole DB\Biblio.udl" m_Connection.Open Set m_RecordSet = New ADODB.Recordset m_RecordSet.Open "Select Name FROM Publishers", m_Connection Do While Not m_RecordSet.EOF lstName.AddItem m_RecordSet!Name m_RecordSet.MoveNext Loop Bc 5: Chy chng trnh, iu g xy ra? on m trn l mt v d in hnh v vic s dng phng thc Open nhn v mt tp hp cc Records t c s d liu. Bc 6: Thay v khi to i tng Connection nh t thuc tnh ConnectionString nh trn (dng tp tin DataLink), hy khi to i tng ny nh trong phn m t l thuyt (s dng thuc tnh Provider & ConnectionString). Sau chy chng trnh. Nhn xt.

Bi tp 6-4 LU RECORSET RA TP TIN


Bc 1: Trc khi bt u, cn kim tra tp tin DataLink ca bi 6-2 c c to ra hay l khng? Bc 2: To mt d n mi trong VB th mc Basic\Bt6-4. Bc 3: Tham chiu n th vin ADO bng cch chn Project\References\ActiveX Data Object 2.0 Library. Chn OK. Bc 4: Thm mt iu khin m rng vo hp cng c Toolbox nh chn Project\Components. Chn Microsoft Common Dialog Control 6.0 v Microsoft DataGrid Control 6.0. Chn OK. Bc 5: To giao din nh sau:

Trang 91

TT. Visual Basic

1 2 3 5 4 1: TextBox: Name: txtSQL; MultiLine: True. 2: CommandButton: Name: cmdTT; Caption: Thc thi. 3: CommandButton: Name: cmdLuu; Caption: Lu tp tin 4: CommandButton: Name: cmdMo; Caption: M tp tin 5: DataGrid: Name: grdResult Ngoi ra, chng trnh cn c s dng hp thoi m & lu tp tin; do , ta thm vo mt Common Dialog vo ng dng vi thuc tnh Name: dlgFile. Bc 6: Khi chng trnh thc thi, mi khi ngi dng nhp vo mt cu lnh SQL vo TextBox ri nhp chn Thc thi, cu SQL ny s thc thi v hin th kt qu li bn phi. Do s kin cmdTT_Click dc x l nh sau: Private Sub cmdTT_Click() Dim m_RecordSet As ADODB.Recordset Set m_RecordSet = New ADODB.Recordset m_RecordSet.CursorLocation = adUseClient m_RecordSet.CursorType = adOpenStatic m_RecordSet.Open txtSQL.Text, _ "File Name=C:\Program Files\Common Files\System\OLE DB\Biblio.udl" Set grdResult.DataSource = m_RecordSet End Sub Bc 7: Lu RecordSet vo tp tin s c thc hin nh hm Save. y, ta s dng hp thoi CommonDialog m v lu tp tin. S kin cmdLuu_Click c x l: Private Sub cmdLuu_Click() On Error GoTo xuly Dim m_RecordSet As ADODB.Recordset Set m_RecordSet = grdResult.DataSource Trang 92 Hnh VI.8: Lu Recordset ra tp tin

TT. Visual Basic Set grdResult.DataSource = Nothing Dim strFileName As String dlgFile.Filter = "Record Set Files (*.dat)|*.dat" dlgFile.ShowSave strFileName = dlgFile.FileName ' Luu cac mau tin m_RecordSet.Save strFileName Exit Sub xuly: MsgBox Err.Description, vbCritical + vbSystemModal, "Loi" End Sub Bc 8: Mi khi tp hp mu tin c lu ln tp tin, chng s khng ph thuc vo vo cc ni kt vi ngun d liu. m d liu c lu, s dng hm Open vi tn tp tin l i s. S kin cmdOpen_Click c x l: Private Sub cmdMo_Click() On Error GoTo xuly Dim strFileName As String dlgFile.Filter = "Record Set Files (*.dat)|*.dat" dlgFile.ShowOpen strFileName = dlgFile.FileName Dim m_RecordSet As ADODB.Recordset Set m_RecordSet = New ADODB.Recordset m_RecordSet.Open strFileName Set grdResult.DataSource = m_RecordSet Exit Sub xuly: MsgBox Err.Description, vbCritical + vbSystemModal, "Loi" End Sub Bc 9: Chy chng trnh, nhp cu lnh SQL vo TextBox, nhp Thc thi. Sau lu tp mu tin ny ln a. Mi khi mun m li tp tin no , s dng M tp tin.

II. BI TP T LM
1) S dng ADO, thit k Form nhp liu cho bng THangHoa (hnh di). y thay v hin th MaLoai, ta li hin th TenLoai:

Trang 93

TT. Visual Basic

Hnh VI.9: Form nhp liu 2) S dng ADO, thit k Form nhp liu cho bng TNhanVien. 3) S dng ADO, thit k Form cho php nhp (sa, xa) thng tin v mt pht sinh v mt mt hng no trong ngy. Lu : Trng STT l kiu AutoNumber (Access), Ngay: ly ngy h thng (hm Now).

Trang 94

TT. Visual Basic

Chng 7

MI TRNG D LIU

Mc tiu: Chng ny gm cc bi tp nhm rn luyn cho sinh vin cch thc s dng mi trng d liu (Data Environment) ca VB lp trnh CSDL. Hc xong chng ny, sinh vin phi nm bt c cc vn sau: S dng thnh tho mi trng d liu gm: - To i tng Connection. - To i tng Command. - Vit m lnh thao tc vi mi trng d liu. Kin thc c lin quan: - Gio trnh Visual Basic, Chng 12. Ti liu tham kho: - Visual Basic 6 Certification Exam Guide Chapter 10, Page 277 Dan Mezick & Scot Hillier - McGraw-Hill - 1998. - T hc Lp trnh c s d liu vi Visual Basic 6.0 trong 21 ngy (T1) - Chng 9, trang 395 - Nguyn nh T (ch bin) Nh xut bn Gio dc - 2001.

Trang 95

TT. Visual Basic

I. HNG DN
Bi 7-1
DATA ENVIRONMENT Data Environment cho php chng ta to ng dng c s d liu vi OLEDB mt cch nhanh chng v hiu qu. Trong bi tp ny, ta s tm hiu v Data Environment v Report Designer ca VB. Bc 1: To th mc Basic\Bt7-1. To mt d n kiu Stardard EXE lu vo trong th mc . Bc 2: Nu mc Data Environment khng c sn trong Project Explorer, ta chn Project\Components, nh du vo mc Data Environment trong ty chn Designers, nhp OK. Chn Project\More ActiveX Designers thm Data Environment vo mi trng son tho. Bc 3: Trong Data Environment, nhp chut phi vo i tng Connection1, chn Properties, chn Microsoft Jet 3.51 OLE DB Provider. Bc 4: Trong mc chn Connection, chn c s d liu mnh mun thao tc trong mc Select or Enter a Database Name Box; y ta chn CSDL BIBLIO.MDB (thng ng dn C:\Program Files\Microsoft Visual Studio\VB98\BIBLIO.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 5: Trong Data Environment, nhp chut phi vo i tng Connection1 v chn RENAME i tn thnh BIBLIO. Bc 6: Nhp chut phi vo BIBLIO 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 RENAME i tn thnh Publishers. Bc 7: Nhp chut phi vo Publishers v chn mc Properties, mt hp thoi quy nh cc thuc tnh cho i tng Publishers c m ra. Trong mc chn General, chn Source Data l SQL Statement v ta nhp cu SQL sau vo khung nhp: SELECT PubID, Name FROM Publishers WHERE Name LIKE ? Cu SQL trn phi nhn vo mt tham s t chng trnh gi n (du chm hi). Ngha l cu SQL ny thc thi c, ta cn cung cp mt tham s u vo cho n. Bc 8: nh ngha tham s, ta chuyn sang mc chn Parameters, ta thy c mt tham s c nh ngha tn l Param1. Mc nhin ca tham s ny l kiu s, tuy nhin ta s i chng thnh kiu chui vi cc thuc tnh nh sau: Data Type adVarChar Host Data Type String Size 255 Bc 9: To mt recordset con cho i tng Publishers command bng cch nhp chut phi vo vo i tng ny v chn ADD CHILD COMMAND trn menu. Cc Trang 96

TT. Visual Basic cu truy vn ny dng tm thng tin v cc sch da vo nh xut bn no . Khi mt command con c thm vo, n c tn l COMMAND1. Bc 10: Trong command con ny, n cn phi c mt cu SQL truy xut thng tin. Cu truy vn ny c nhim v kt ni thng tin t cc bng Title v Author i vi tng loi nh xut bn. Bc 11: M ca s Data View bng cch chn View\Data View Window trn menu. Trong Data View, xc nh th mc Data Environment Connections. i tng connection BIBLIO c hin th trong th mc ny. M i tng connection v xc nh th mc Tables. Trong th mc ny, chn bng Titles. Nhp p vo bng Titles ny hin th ni dung ca bng. Bc 12: Khi hin th ni dung ca bng, ta m Data Tools bng cch chn VIEW\SHOW PANES trn menu. Chn tt c cc mc trong phn ny (Diagram, Grid, SQL, Results). Bc 13: Khi tt c cc mc ca Data Tool c chn, ta ko cc bng Title Author v Authors vo khung diagram ca Data Tools. Sau ta phi kim tra cc lin kt ca cc bng: bng Titles c lin kt vi bng Title Author bi trng ISBN khng? Bng Title Author c lin kt vi bng Authors bi trng Au_ID khng? Nu khng c cc mi lin kt ny ta phi chn ng trng trong bng Title Author v ko chng vo trng tng ng trong 2 bng Titles v Authors. Bc 14: to ra cu truy vn, ta nh du chn vo trng PubID, Title trong bng Titles; trng Author trong bng Authors. K tip, kim tra khung Grid ta thy c mt dng c du * (nh hnh di) biu th l ta chn tt c cc trng ca tt c cc bng. Ta khng cn chn tt c thng tin, do ta nhp vo dng c du * v bm phm Delete xa chng. Lc trong khung SQL ta thy c cu SQL sau: SELECT Titles.PubID AS Expr1, Titles.Title AS Expr2, Authors.Author AS Expr3 FROM Titles, `Title Author`, Authors WHERE Titles.ISBN = `Title Author`.ISBN AND `Title Author`.Au_ID = Authors.Au_ID

Trang 97

TT. Visual Basic Hnh VII.1: SQL Builder Bc 15: Chn cu SQL hin th bn trn ri nhp Edit\Copy. Bc 16: Nhp p tr li vo Data Environment, nhp chut phi vo command con c v chn PROPERTIES trn menu. Sau i tn ca command trong mc General thnh Titles. Chn Source Data l SQL Command; sau dn ni dung cu SQL copy trn vo khung nhp cu SQL (chn Edit\Paste). Bc 17: Chn mc RELATION , ta thy trng PubID ca c hai bng Publishers v Titles c hin th. Nhp nt ADD xc nh lin kt gia cu command cha v command con. Bc 18: ng cc ca s v lu d n li. XY DNG GIAO DIN CHNG TRNH Bc 19: Thm vo mt iu khin vo d n bng cch chn Project\Components trn menu; tm n mc Microsoft Hierachial Flexgrid Control 6.0 (OLEDB). nh du ty chn ny v nhp OK. Bc 20: M Form1, to giao din cho chng trnh nh dng sau (hnh bn di): Item 1: Label Name: lblCompany Caption: Company Name Item 2: TextBox Name: txtCompany Text: micro Item 3: CommandButton Name: cmdGO Caption: GO Default: TRUE Item 4: Hierarchial FlexGrid Name: grdTitles AllowUserResizing: 1-flexResizeColumns DataSource: DataEnvironment1 DataMember: Publishers FixedCols: 0

Hnh VII.2: Giao din ng dng

Trang 98

TT. Visual Basic Bc 21: Nhp chut vo phi vo Hierarachical FlexGrid trn Form1, hp thoi thuc tnh ca Hierarachical c m ra. Chn mc BANDS trong hp thoi ny. Chn Band0 (Publishers) sau khng nh du vo trng PubID (vi tn l Expr1) n khng hin th khi thc hin cu SQL. Cng vy, khng nh du vo trng PubID ca Band1 (hnh di):

Hnh VII.3: Chn trng hin th trn li Bc 22: i tn ca cc ct trong Band1 t Expr2, Expr3 thnh Title v Author bng cch: Nhp chut 2 ln vo mc cn i tn trong Column Caption, nhp tn mi vo; sau chn OK. Bc 23: Mc ch ca chng trnh ny l: Khi chng trnh thc thi, trong TextBox c mt t l micro, t c ngh tm kim. Khi nhp chut vo nt nhn; on vn bn trong TextBox c dng thc thi cu SQL Publishers; cu SQL ny s truy tm tt c cc cng ty m tn ca chng cha chui c nhp vo trong TextBox; kt qu tr v c hin th trn li. Do , ta s x l s kin cmdGO_Click bng on m sau: MousePointer = vbHourglass With DataEnvironment1 .rsPublishers.Close .Publishers "%" & txtCompany.Text & "%" End With ' Thiet lap tren luoi Set grdTitles.DataSource = DataEnvironment1 grdTitles.CollapseAll MousePointer = vbDefault Bc 24: Lu d n v chy chng trnh. S dng micro tm kim (ta c th th vi t khc nh: hill hay mill) TO BO CO (REPORT) Trang 99

TT. Visual Basic Bc 25: Nu Data Report Designer khng hin th di menu PROJECT, m hp thoi COMPONENTS, chn Data Report Designer trong mc chn Designers. Sau ta thm Data Report Designer vo d n bng cch chn PROJECT\ADD DATA REPORT trn menu. Bc 26: Lin kt Data Report Designer vi Data Environment nh vic thit lp thuc tnh DataSource ca Data Report l DataEnvirronment1 v thuc tnh DataMember l Publishers. Bc 27: Nhp chut phi trn Data Report Designer v chn RETRIEVE STRUCTURE trn menu. Mt hp thoi xc nhn hin ln v ta chn YES. Bc 28: Ta nhn thy trn report gm cc phn: report header, page header, publisher information, title information, page footer, v report footer. Bc 29: Chn phn Report Header, trong phn ny, thm mt Report Label vo, t Caption l Book Report; ta c th i Font ch v kch thc Font tng ng. Bc 30: Chn Group header, trong phn ny thm mt Report TextBox vo; t thuc tnh DataMember l Publishers v DataField l Name. Bc 31: Chn phn Detail ca Report. Trong phn ny, thm 2 Report TextBox vo, t 2 iu khin ny cnh nhau trong phn Detail; chn TextBox th nht v t thuc tnh DataMember l Titles v DataField l Expr2, i vi TextBox th hai: DataMember: Titles, DataField: Expr3. Bc 32: Lu d n li. Bc 33: Chn Form1 trong mi trng son tho; to mt menu trong Form1 bng cch chn Tools\Menu Editor; trong Menu Editor, to mt Report menu vi cc phn t l Preview v Print vi cc thuc tnh sau: Item 1 Menu Name: mnuReport Caption: Report Item 2 Menu Name: mnuPreview Caption: Preview Item 3 Menu Name: mnuPrint Caption: Print Bc 34: Ta c th xem bo co trc khi in nh hm Show ca i tng Report. Trong hm x l s kin mnuPreview, thm on m sau: DataReport1.Show Bc 35: In bo co c thc hin nh hm PrintReport ca i tng Report. Trong hm x l s kin mnuPrint, thm on m sau: DataReport1.PrintReport Bc 36: Lu v chy chng trnh. Th hin th v in report.

Trang 100

TT. Visual Basic

Bi 7-2 BIU MU NHP LIU VI DATA ENVIRONMENT


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?

Hnh VII.4: To Connection 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. Trang 101

TT. Visual Basic o Tr li giao din DED, ta c:

Hnh VII.5: i tng Command

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

Hnh VII.6: Kt qu thc thi ng dng Trang 102

TT. Visual Basic 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:

Hnh VII.7: Giao din y 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 Trang 103

TT. Visual Basic End With Me.Refresh 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.

II. BI TP T LM
1) S dng DataEnviroment, thit k Form nhp liu cho bng THangHoa (hnh di). y thay v hin th MaLoai, ta li hin th TenLoai:

Hnh VII.8: Form nhp liu 2) S dng DataEnviroment, thit k Form nhp liu cho bng TNhanVien. 3) S dng DataEnviroment, thit k Form cho php nhp (sa, xa) thng tin v mt pht sinh v mt mt hng no trong ngy. Lu : Trng STT l kiu AutoNumber (Access), Ngay: ly ngy h thng (hm Now).

Trang 104

TT. Visual Basic

Chng 8

THIT LP BO CO V XUT THNG TIN

Mc tiu: Chng ny nhm gii thiu cho sinh vin cch thc to bo biu, thnh phn khng th thiu trong cc ng dng c s d liu. Hc xong chng ny, sinh vin phi nm bt c cc vn sau: S dng Data Report to cc loi bo biu sau: - Bo co dng bnh thng. - Bo co c phn nhm d liu. - Bo co dng phn cp. Kin thc c lin quan: - Gio trnh Visual Basic, chng 13. Ti liu tham kho: - Visual Basic 6.0 v Lp trnh c s d liu - Chng 21, trang 636 - Nguyn Ngc Mai (ch bin) Nh xut bn Gio dc - 2000. - T hc Lp trnh c s d liu vi Visual Basic 6.0 trong 21 ngy (T1) - Chng 5, trang 183 - Nguyn nh T (ch bin) - Nh xut bn Gio dc - 2001.

Trang 105

TT. Visual Basic

I. HNG DN
TO KT NI VI C S D LIU

Bc 1: To mt d n trong th mc Basic\Bt8-1. Bc 2: to mt report, ta phi xc nh d liu no s s dng trong report, l nhim v ca Data Environment. Ta chn mt Data Environment vo d n nh vic chn Project\More ActiveX Designer\Data Environment. Ta s dng Data Environment lu tr cc tp d liu s dng trong report. Bc 3: Nhp p vo trnh thit k Data Environmenr trong ca s Project Explorer m trnh thit k. Sau nhp vo Connection1 v thay i thuc tnh Name ca n thnh cnHangHoa; nhp chut phi vo cnHangHoa v chn mc Properties, hp thoi Properties hin ra:

Hnh VIII.1: To ni kt n CSDL Bc 4: Ta s to kt ni n c s d liu DBHH.MDB c sn trn my. Do ta nhp nt Next sau khi chn Microsoft OLEDB Provider for ODBC. Trong ty chn ny ta chn mc Use data source name; ri chn ngun d liu DBHH to ra t trc . Bc 5: Nhp nt Test Connection kim tra xem ni kt c thnh cng hay khng? TO I TNG COMMAND Bc 6: Sau khi xc nh Data Environment Connection, ta c th xc nh Command, Command lu kt ni ti bng d liu v nhng trng s c dng trong Trang 106

TT. Visual Basic report. Nhp nt phi chut vo Command trong ca s thit k Data Environment v chn mc Add Command, mt hp thoi xut hin nh hnh bn di. Bc 7: Thit lp thuc tnh Name ca Command l comHangHoa, chn Connection l cnHangHoa. Trong phn DataBase Object chn kiu ly d liu l Table; sau trong ComboBox Object Name chn Table THANGHOA.

Hnh VIII.2: i tng Command XY DNG MT BO CO (REPORT) N GIN Bc 8: By gi ta s to mt bo co hin th d liu xc nh trong Data Environment. lm iu ny, nhp phi chut vo Project trong ca s Project Explorer; ri chn Add\Data Report; sau t tn ca report ny li l drHangHoa, DataSource: DataEnvironment1, DataMember: cnHangHoa (trong ca s Properties). Bc k tip ta ng tt c cc ca s ngoi tr 2 ca s DataEnvironment v drHangHoa. Bc 9: Bc ny ch n gin l nhp chn v ko cc trng t Data Environment, mc command comHangHoa vo Data Report. i vi report ny, nhp chn v ko cc trng tn MaHang, TenHang, DVTinh, MaLoai. Khi thc hin xong, mn hnh tng t nh hnh di:

Trang 107

TT. Visual Basic

Hnh VIII.3: Thit k Report y, ta ch ko chn cc trng vo mc Detail ca report, cn cc tiu ct (tng ng vi cc trng); ta t chng trong phn Page Header ca report. C mt ghi nhn rng, khi ta ko th cc trng vo trong phn Detail ca report, mt report Label cha tn trng v mt report TextBox cho php nhp liu xut hin trong phn Detail. Do , trong phn Detail ta ch gi li TextBox, cn report Label ta chuyn chng ln phn Page Header. V vy coi nh ta thit lp xong phn hin th ca report. Vn cn li ch l trang tr sao cho t yu cu v mt thm m. CHN CC TIU U TRANG V CUI TRANG Bc 10: Tt c cc report hon chnh u phi c mt s c im no ; nht l report phi c mt tn, s trang ca report c hin th r rng. Cc mc ny t tt nht l trong phn Report Header v Report Footer. Ta cn phi thm Report Header v Report Footer vo trong report ca mnh; n gin ch cn nhp chut phi vo report v chn Show Report Header | Footer. Hai phn mi ny s c to ra. Bc 11: Thm mt report Label vo phn Header ca report; sau thay i thuc tnh Caption ca n thnh Chi tit hng ha cc loi. y c th chn Font ch vi kch thc ln (VD: 20) tiu ca report c hin th ln.

Trang 108

TT. Visual Basic Bc 12: Nhp chut phi vo mc report Footer v chn ty chn Insert Control | Current Page Number chn s trang vo; tip n chn Insert Control | Total Number of Pages chn tng s trang ca report. Bc 13: n y, phn thit k report coi nh hon tt; ta lu report li. Bc 14: To giao din cho chng trnh nh sau:

Hnh VIII.4: Giao din chnh

Bc 15: Khi chn Chi tit hng ha, report va thc hin s c hin th; do ta x l s kin ny nh sau: Private Sub mnuChiTiet_Click() drHangHoa.Show End Sub Bc 16: Lu d n v chy chng trnh. TO REPORT BNG CU LNH SQL Bc 17: Data Report cho php ta to cc report bng cch s dng cc cu lnh SQL nh l nn tng ca i tng Command. Trong phn ny ta s s dng cu lnh SELECT ly d liu t cc bng TPHATSINH, THANGHOA, TLOAIHANG v chn nhng trng sau: PhatSinh.SOTT, TPhatSinh.NGAY, TPhatSinh.LOAI, TPhatSinh.FIEU, TPhatSinh.HTEN, TPhatSinh.SOLG, TPhatSinh.DGIA, THangHoa.TENHANG, TLoaiHang.TENLOAI. Bc 18: Chn mc Data Enviroment1 trong Project Explorer, sau nhp chut phi vo i tng cnHangHoa, chn Add Command. Ta in vo cc thuc tnh nh hnh di:

Trang 109

TT. Visual Basic

Hnh VIII.5: Command l SQL Bc 19: Trong mc Source of Data, thay v chn DatabaseObject nh bi trc, y ta chn SQL Statement v nhp cu SQL tng ng vo, ri chn OK. Bc 20: Thm mt DataReport vo d n vi Name: drHHPS, DataSource: DataEnvironment, DataMember: comHHPS. Sau ko th cc trng tng ng vo report ri trang tr li chng. Bc 21: Lu report li. Ta s gi thc thi report ny trong phn x l tnh hung khi chn mc Hng Ha Pht Sinh ca menu. Private Sub mnuHHPS_Click() drHHPS.Show End Sub Bc 22: Lu d n v chy chng trnh. NHM D LIU Bc 23: Ta c th nhm d liu li theo mt ni dung no . y, trong DataEnvironment1, thm vo mt i tng Command mi tn comHHNgay. Trong phn ny ta s ly d liu t cc bng TPhatSinh, ThangHoa, TLoaiHang v ly ra cc trng TPhatSinh.SOTT, TPhatSinh.NGAY, TPhatSinh.LOAI, TPhatSinh.FIEU, TPhatSinh.HTEN, TPhatSinh.SOLG, TPhatSinh.DGIA, THangHoa.TENHANG, TLoaiHang.TENLOAI. Bc 24: Ta s nhm d liu trn li theo tng ngy, do ta lm theo cc bc nh trong hnh di: Trang 110

TT. Visual Basic

Hnh VIII.6: Nhm d liu Chn Grouping, chn trng nhm li l Ngay; sau nhp OK. Bc 25: Trong phn Aggregates, ta in thng tin nh hnh:

Hnh VIII.8: Hm thao tc trn nhm

y ta s dng cc hm tp hp tnh tng s lng bn c trong ngy. Do ta chn mc Aggregate, chn mc thch hp v nhp Add thm vo mt hm tnh trn nhm. Bc 25: Chn mt DataReport mi vo tn drHHNgay, DataSource: DataEnvironment1, DataMember: comHHNgay_Grouping. Sau nhp chut phi vo Report v chn mc Show Group Header | Footer. Bc 26: Ta ko trng ngy trong phn Sumary Fields in comHHNgay_Grouping vo phn Group Header. Trong phn Detail ta ko th cc trng khc. Cn phn Group_Header, ta li ko TongSolg v t vo. Trang 111

TT. Visual Basic

Hnh VIII.9: Thit k Report Bc 27: Lu report li. Ta s gi report hin th khi nhp vo mc Phat sinh theo ngay trn menu: Private Sub mnuPsngay_Click() drHHNgay.Show End Sub Bc 28: Lu d n li, chy chng trnh, ta c th in th ra giy. Bc 29: Cn mt report na ta s thc hin vi iu kin l tm cc pht sinh hng ha theo tng nhn vin (tng t nh report trn) v ta s gi thc thi mc menu cn li. Bc 30: X l s kin mnu_Thoat: Private Sub mnuThoat_Click() End End Sub

Trang 112

TT. Visual Basic

II. BI TP T LM
1)

To bo co (Report) cho php in ra giy thng tin ca cc hng ha, cc thng tin ny bao gm: M hng ha, tn hng ha, n v tnh, tn loi hng tng ng. To bo co (Report) cho php in ra giy thng tin chi tit v cc pht sinh theo tng ngy, cc thng tin ny bao gm: Ngy lp, loi, Fieu, h tn khch hng, l do, s lng, n gi, thnh tin (vi Thnh tin = S lng * n gi), tn hng ha v h tn nhn vin tng ng. (Hnh VIII.10)

2)

Hnh VIII.10: Pht sinh theo ngy


3)

To bo co (Report) cho php in ra giy thng tin chi tit v cc pht sinh theo tng nhn vin, cc thng tin ny bao gm: Ngy lp, loi, Fieu, h tn khch hng, l do, thnh tin (vi Thnh tin = S lng * n gi), tn hng ha v loi hng tng ng. (Hnh di)

Trang 113

TT. Visual Basic

Hnh VIII.11: Pht sinh theo nhn vin

LI KT
Chng Thit lp bo co cng l chng kt thc ca gio trnh TT. 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 114

You might also like