Read CHNG 1 text version

Visual Basic

CHNG 1 TNG QUAN V VISUAL BASIC 6.0

Mc tiêu: Chng này gii thiu v môi trng phát trin tích hp (IDE) Microsoft Visual Basic 6.0; cng nh giúp sinh viên có cái nhìn tng quan v Visual Basic. Hc xong chng này, sinh viên phi nm bt c các vn sau: - S dng môi trng phát trin tích hp VB 6.0 phát trin ng dng. - Cách to d án mi (New Project) trong VB 6.0. Kin thc có liên quan: - S dng h iu hành Windows. Tài liu tham kho: - Visual Basic 6 Certification Exam Guide - Chapter 1, Page 1 - Dan Mezick & Scot Hillier - McGraw-Hill - 1998.

Trang 1

Visual Basic

I. Gii thiu v Visual Basic 6.0

Visual Basic 6.0 (VB6) là mt phiên bn ca b công c lp trình Visual Basic (VB), cho phép ngi dùng tip cn nhanh cách thc lp trình trên môi trng Windows. Nhng ai ã tng quen thuc vi VB thì tìm thy VB6 nhng tính nng tr giúp mi và các công c lp trình hiu qu. Ngi dùng mi làm quen vi VB cng có th làm ch VB6 mt cách d dàng. Vi VB6, chúng ta có th : Khai thác th mnh ca các iu khin m rng. Làm vic vi các iu khin mi (ngày tháng vi iu khin MonthView và DataTimePicker, các thanh công c có th di chuyn c CoolBar, s dng ha vi ImageCombo, thanh cun FlatScrollBar,...). Làm vic vi các tính nng ngôn ng mi. Làm vic vi DHTML. Làm vic vi c s d liu. Các b sung v lp trình hng i tng.

II. Cài t Visual Basic 6.0

S dng chng trình Setup, ngi dùng có th cài t VB6 lên máy tính ca mình. Chng trình Setup này còn cài t các tp tin cn thit xem tài liu trên a CD MSDN (Microsoft Developer Network). Nu cn, ngi dùng có th cài t riêng phn tài liu và ví d mu ca Visual Basic lên máy tính. cài t VB6, ngi dùng nên kim tra máy tính ca mình m bo c cu hình ti thiu. Các yêu cu h thng ti thiu : - Microsoft Windows 95 tr lên hoc là Microsoft Windows NT Workstation 4.0 tr lên. - Tc CPU 66 MHz tr lên. - Màn hình VGA hoc màn hình có phân gii cao c h tr bi Microsoft Windows. - 16 MB RAM cho Microsoft Windows 95 hoc 32MB RAM cho Microsoft Windows NT Workstation.

III. Làm quen vi VB6

III.1 Bt u mt d án mi vi VB6

T menu Start chn Programs, Microsoft Visual Basic 6.0. Khi ó bn s thy màn hình u tiên nh hình I.1 di ây.

Trang 2

Visual Basic

Hình I.1 Ca s khi kích hot VB6 Chn ây, ngi dùng có th chn to mi mt d án thc thi c bng cách chn Standard EXE ri nhp Open (Hình I.2). Tip theo là ca s làm vic chính ca VB6, gi tt là IDE (Integrated Development Environment) s c gii thiu chi tit trong phn sau.

III.2 Tìm hiu các thành phn ca IDE

IDE là tên tt ca môi trng phát trin tích hp (Integrated Development Environment), ây là ni to ra các chng trình Visual Basic. IDE ca Visual Basic là ni tp trung các menu, thanh công c và ca s to ra chng trình. Mi mt thành phn ca IDE có các tính nng nh hng n các hot ng lp trình khác nhau.

Trang 3

Visual Basic

Hình I.3 Ca s IDE ca VB6

Thanh menu cho phép bn tác ng cng nh qun lý trc tip trên toàn b ng dng. Bên cnh ó thanh công c cho phép truy cp các chc nng ca thanh menu thông qua các nút trên thanh công c. Các biu mu (Form) - khi xây dng chng trình chính ca VB - xut hin trong ca s Form. Hp công c thêm các iu khin vào các biu mu ca án. Ca s Project Explorer hin th các án khác nhau mà ngi dùng ang làm cng nh các phn ca án. Ngi dùng duyt và cài t các thuc tính ca iu khin, biu mu và module trong ca s Properties. Sau cùng, ngi dùng s xem xét và b trí mt hoc nhiu biu mu trên màn hình thông qua ca s Form Layout.

III.3 S dng thanh công c trong IDE ca VB

Thanh công c là tp hp các nút bm mang biu tng thng t di thanh menu. Các nút này m nhn các chc nng thông dng ca thanh menu (New, Open, Save ...).

Hình I.4 Thanh công c dng standard

Trang 4

Visual Basic

Hình I.5 Popup menu thêm, xóa công c

Hn na, ngi dùng có th kéo rê thanh công c trên IDE n v trí bt k nào ó thun tin cho vic s dng. Ngi dùng có th thêm hay xóa thanh công c trên IDE: * Chn Toolbars t menu View hoc n chut phi vào im bt k nào trên thanh menu, mt popup menu bt ra. * Chn loi thanh công c mà ta mun thêm vào hoc xóa i. Nu có ánh du check bên trái thì loi công c ó ang c chn. S dng thanh công c g ri (debug) Vi thanh công c g ri, ngi dùng có th thc thi, tm ngng hoc dng mt án. Vi thanh công c Debug, ngi dùng có th kim tra chng trình và gii quyt các li có th xy ra. Khi g ri chng trình, ngi dùng có th chy tng dòng lnh, kim tra giá tr các bin, dng chng trình ti mt im nào ó hoc vi mt iu kin nào ó.

Hình I.6 Thanh công c g ri

S dng thanh công c Edit Thanh công c Edit c dùng vit chng trình trong ca s Code, thanh công c Edit có y các tính nng ca menu Edit. Ngoài ra ngi s dng có th s dng chc nng vit chng trình t ng nh là Hình I.7 Thanh công c Edit Quick Info. Thanh công c Edit ca VB6 có tính nng lý thú ó là t hoàn tt các t khóa. Tính nng này rt hu dng giúp cho ngi dùng tránh các li mc phi do gõ sai t khóa. S dng thanh công c Form Editor

Hình I.8 Thanh công c thit k biu mu

Thanh công c Form Editor có chc nng ging nh menu Format dùng di chuyn và sp xp các iu khin trên biu mu.

Trang 5

Visual Basic

Trong quá trình thit k biu mu, ôi khi chúng ta phi s dng thuc tính ZOrder cho phép mt iu khin có th thay th mt iu khin khác hay không hoc là xut hin bên trên mt iu khin khác hay không. S dng hp công c (Toolbox) Hp công c là ni cha các iu khin c dùng trong quá trình thit k biu mu. Các iu khin c chia làm hai loi: iu khin có sn trong VB và các iu khin c cha trong tp tin vi phn m rng là .OCX. i vi các iu khin có sn trong VB thì ta không th g b khi hp công c, trong khi ó i vi iu khin nm ngoài ta có thêm hoc xóa b khi hp công c. Mt iu khin có th c a vào biu mu bng cách chn iu khin ó và a vào biu mu. Chúng ta s tr li phn này trong chng tip theo khi thit k các biu mu. Hình I.9 Hp công c ca Visual Basic

III.4 Qun lý ng dng vi Project Explorer

Project Explorer trong VB6 giúp qun lý và nh hng nhiu án.VB cho phép nhóm nhiu án trong cùng mt nhóm. Ngi dùng có th lu tp hp các án trong VB thành mt tp tin nhóm án vi phn m rng .vbp. Project Explorer có cu trúc cây phân cp nh cây th mc trong ca s Explorer ca h iu hành. Các án có th c coi là gc ca cây, các thành phn ca án nh biu mu, module ... là các nút ca cây. Khi mun làm vic vi thành phn nào thì ta có th nhn úp lên thành phn ó trên ca s Project Explorer vào ca s vit code cho thành phn ó. Hình I.10 Ca s Project Explorer Khi làm vic vi mt d án ln, chúng ta s thy Project Explorer cc k hu ích cho vic t chc và qun lý mt d án ln.

III.5 Ca s Properties

Mi mt thành phn, iu khin iu có nhiu thuc tính. Mi mt thuc tính li có mt hoc nhiu giá tr. Ca s Properties cho phép ngi dùng xem, sa i giá tr các thuc tính ca iu khin nhm giúp iu khin hot ng theo úng ý ca ngi s dng.

Trang 6

Visual Basic

III.6 Ca s Form Layout

ây chính là ca s trình bày biu mu cho phép nh v trí ca mt hoc nhiu biu mu trên màn hình khi chng trình ng dng c thi hành. Ta ñònh vò moät bieåu maãu treân maøn hình baèng caùch duøng chuoät di chuyeån bieåu maãu trong cöûa soå Form Layout. S dng ca s Form Layout không n gin nh các ca s khác vì nó không c kích hot sn, ngi dùng cn phi chy ng dng sau ó mi có th b trí c các biu mu thông qua Form Layout. Nu ta không nh v các biu mu thì v trí ca biu mu trên màn hình lúc thit k cng là v trí khi ng ca biu mu khi thc thi.

Hình I.12 Ca s Form III.7 Biên dch án thành tp tin thc thi L Sau khi án ã hoàn thành, ngi dùng có th biên dch thành tp tin thc thi t

c. Cách tin hành nh sau: - Trc tiên ta cn ch cho VB6 bit phn chng trình nào s c thc thi trc bng cách chn Project Properties t menu Project. Chn tab General, chú ý phn Startup Object, ây là ni quy nh im khi u ca chng trình sau khi biên dch kt thúc. - T menu File, chn Make ... EXE... Mt hp thoi xut hin cho phép bn nhp vào tên ca tp tin thc thi. Bn ch cn gõ tên tp tin, VB s t ng thêm phn m rng .EXE. - Nhn vào nút Options m hp thoi Project Properties và in tên ca ng dng vào ô Title, ta có th ghi chú thông tin cho tng phiên bn trong phn Version Information. Ta có th chn Auto Increment VB t ng tng s Revision mi ln ta to li tp tin EXE cho d án. - Cui cùng, nhn OK tr v hp thoi Make Project.

Trang 7

Visual Basic

CHNG 2 BIU MU VÀ MT S IU KHIN THÔNG DNG

Mc tiêu: Chng này gii thiu v mt s iu khin c bn to nên giao din cho các ng dng cng nh mt s khái nim trong lp trình vi VB; nhng yêu cu ti thiu cn có trong vic "lp trình s kin" vi VB. Hc xong chng này, sinh viên phi nm bt c các vn sau: - Khái nim v iu khin, thuc tính, phng thc, s kin. - Quy tc t tên danh biu trong VB. - S dng biu mu trong thit k giao din. - S dng iu khin ô nhp liu, nút nhn, nhãn, khung. Kin thc có liên quan: - Cách thc s dng môi trng phát trin VB. Tài liu tham kho:

- Microsoft Visual Basic 6.0 và Lp trình C s d liu - Chng 2, trang 26; Chng 3, trang 29 - Nguyn Th Ngc Mai (ch biên), Nhà xut bn Giáo dc - 2000.

Trang 8

Visual Basic

I. Các khái nim

iu khin: Các thành phn có sn ngi lp trình to giao din tng tác vi ngi dùng. Mi iu khin thc cht là mt i tng, do vy nó s có mt s im c trng cho i tng, chng hn nh các thuc tính, các phng thc & các s kin. Thuc tính: Các c trng ca mt iu khin to nên dáng v ca iu khin ó. Phng thc: Các iu khin có th thc thi mt s tác v nào ó, các tác v này c nh ngha sn bên trong các phng thc (còn gi là chng trình con: hàm & th tc), ngi lp trình có th gi thc thi các phng thc này nu cn. S kin: là hành ng ca ngi dùng tác ng lên ng dng ang thc thi. Thí d: - Nhn phím bt k trên bàn phím. - Nhp chut. Các thành phn giao din có kh nng áp ng li s kin. Chng hn khi chúng ta nhp chut vào button, lúc ó button nhn bit c s kin này; hay nh textbox nhn bit c s kin bàn phím tác ng lên nó. Mt ng dng trên Windows thng c thc hin nh vào vic áp ng li các s kin ca ngi dùng. Lp trình s kin: Các thành phn giao din có kh nng nhn bit c các s kin t phía ngi dùng. Tuy nhiên kh nng áp ng li các s kin c thc hin bi ngi lp trình. Khi mt thành phn giao din c s dng, ngi lp trình phi xác nh chính xác hành ng ca thành phn giao din ó áp ng li mt s kin c th. Lúc ó ngi lp trình phi vit on mã lnh mà on mã lnh này s c thc thi khi s kin xy ra. Chng hn, trong ng dng Paint ca Windows; khi ngi s dng nhp chut vào nút v hình elip sau ó dùng chut v nó trên ca s v, mt hình elip c v ra. Trong lp trình s kin, mt ng dng c xây dng là mt chui các áp ng li s kin. Tt c các hành ng ca ng dng là áp ng li các s kin. Do vy ngi lp trình cn phi xác nh các hành ng cn thit ca ng dng; phân loi chúng; sau ó vit các on mã lnh tng ng. Thí d v áp ng li s kin: Mã lnh

- Mã lnh cho s kin Click ca Ghi a. --------------------------------------------------------------------------------------------------- Mã lnh cho s kin Click ca In giy ---------------------------------------------------------------------------------------------------

Hình II.1: Thí d v áp ng s kin Trang 9

Visual Basic

- Khi ngi dùng không tác ng vào ng dng, ng dng không làm gì c. - Khi ngi dùng nhp d liu vào các ô nhp H và tên, a ch; s kin bàn phím xy ra trên các ô nhp. Tuy nhiên, ng dng vn không làm gì c vì không có on mã lnh nào áp ng các s kin này. - Khi ngi dùng nhp nút chn Ghi a, ng dng tìm kim trong mã lnh ca mình thy có on mã lnh áp ng li s kin này; lúc ó on mã lnh c thc thi. - Tng t nh vy i vi nút chn In giy. Cách xác lp các thuc tính & các phng thc trong chng trình <Thuc tính Name ca iu khin>.<Tên thuc tính> <Thuc tính Name ca iu khin>.<Tên phng thc>[(<Các tham s>)] Tên iu khin (thuc tính Name) ây là thuc tính xác nh tên ca iu khin trong ng dng. Tên này c t theo quy tc: o Tên có th dài t 1 - 40 ký t. o Tên phi bt u vi ký t ch, có th ch hoa hay thng. o Sau ký t u tiên, tên có th cha ký t, s hay du gch di. Ví d: Num, StudentCode, Class12A2 là nhng tên hp l. 345, 7yu là nhg tên không hp l.

II. Biu mu (Form)

II.1. Khái nim:

Chng trình ng dng giao tip vi ngi dùng thông qua các biu mu (hay còn gi là ca s, xut phát t ch Form hay Windows); các iu khin (Control) c t lên bên trên giúp cho biu mu thc hin c công vic ó. Biu mu là các ca s c lp trình nhm hin th d liu và nhn thông tin t phía ngi dùng.

II.2. Thuc tính

o Name: thuc tính này nh là mt nh danh nhm xác nh tên ca biu mu là gì? Ta s s dng thuc tính này truy xut n các thuc tính khác cùng vi phng thc có th thao tác c trên biu mu. o Caption: chui hin th trên thanh tiêu ca biu mu.

o Icon: hình icon c dùng trong thanh tiêu ca biu mu, nht là khi biu mu thu nh li.

o WindowState: xác nh biu mu s có kích thc bình thng (Normal=0), hay Minimized (=1), Maximized =(2).

Trang 10

Visual Basic

nm trên nó tha k. Tc là khi ta t mt iu khin lên biu mu, thuc tính Font ca iu khin y s t ng tr nên ging y ca biu mu.

o Font: xác lp Font cho biu mu. Thuc tính này s c các iu khin

o BorderStyle: xác nh dng ca biu mu.

II.3. Phng thc

o Move: di chuyn biu mu n ta X,Y: Move X, Y.

II.4. S kin

to ra th hin u tiên ca biu mu. Ta dùng s kin Form_Initialize thc hin nhng gì cn phi làm chung cho tt c các th hin ca biu mu này. Nu ta ch dùng mt th hin duy nht ca mt biu mu trong chng trình thì Form_Load coi nh tng ng vi Form_Initialize.

o Form_Initialize: S kin này xy ra trc nht và ch mt ln thôi khi ta

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

Ta dùng s kin Form_Load khi to các bin, iu khin cho các th hin ca biu mu này. kin Activate phát sinh. Ta thng dùng s kin này cp nht li giá tr các iu khin trên biu mu. Form_QueryUnload: Khi ngi s dng chng trình nhp chut vào nút X phía trên bên phi óng biu mu thì mt s kin QueryUnload c sinh ra. on chng trình con di ây mô t th tc x lý s kin QueryUnload.

Private Sub Form_QueryUnload(Cancel As Integer, _ UnloadMode As Integer) End Sub

o Form_Activate: Mi ln mt biu mu c kích hot (active) thì mt s

o

S kin này cho ta kh nng hy b hành ng óng biu mu bng cách t li Cancel là 1.

o

Form_Resize: S kin này xy ra mi khi biu mu thay i kích thc.

III. Nhãn (Label)

III.1. Khái nim:

Nhãn là iu khin dng ha cho phép ngi s dng hin th chui ký t trên biu mu nhng h không th thay i chui ký t ó mt cách trc tip. Biu tng (shortcut) trên hp công c:

III.2. Thuc tính:

o Name: ây là mt tên xác nh mt nh danh, ngi lp trình có th thay i tên này theo cách ca mình tin s dng.

Trang 11

Visual Basic

o Caption: Thuc tính quy nh chui ký t hin th khi ta to mt iu khin nhãn. Khi ta to mi mt iu khin thì thuc tính Caption có giá tr mc nhiên là "Label...". Ví d: Ta mun to mt nhãn là "Chào mng bn n vi Visual Basic", ta thay i giá tr ca thuc tính Caption thành "Chào mng bn n vi Visual Basic". Ta có th thay i giá tr ca thuôc tính Caption ti thi im ng dng ang chy nh vào on mã lnh n gin nh sau: L1.Caption = "ã i giá tr Caption" vi L1 là tên ca iu khin nhãn mà ta mun i. o Font, Fore Color: Quy nh kiu ch, kích thc, màu hin th. o BackStyle, BackColor: BackStyle quy nh là nhãn trong sut hay không. BackColor quy nh màu nn ca nhãn trong trng hp không trong sut.

III.3. Phng thc:

o Move: di chuyn nhãn n ta X,Y: Move X, Y.

III.4. S kin:

o Change: Xy ra mi khi nhãn thay i giá tr. o Click: Mi khi nhãn c chut nhp lên, s kin này xy ra. o DblClick: Xy ra khi ngi s dng nhp úp chut lên iu khin nhãn.

IV. Khung (Frame)

IV.1. Khái nim:

Khung là mt iu khin dùng trong vic b trí giao din ca biu mu mt cách trong sáng và rõ nét. Thông thng các iu khin cùng phc v cho mt công vic nào ó s c t trong mt khung nhm làm ni bt vai trò ca chúng. Biu tng (shortcut) trên hp công c: Khi chúng ta to mi mt khung cha các iu khin khác, ta có hai cách thc hin: - To khung cha trc, sau ó a các iu khin vào trong khung cha. ây là cách n gin nht. - To khung cha sau khi ã to mi các iu khin, khi ó khung cha s che mt các iu khin, vì vy ta cn phi a khung cha ra sau các iu khin bng cách nhp chut phi và chn Send to Back. Nhng i vi cách này, các iu khin khác không nm trên khung cha. Do vy ta có th gii quyt bng cách ct (Cut) các iu khin này i, sau ó dán (Paste) vào trong khung cha.

Trang 12

Visual Basic

Hình II.2 Ví d v khung cha (Frame)

IV.2. Thuc tính:

Khung cng có các thuc tính thông dng nh ca iu khin nhãn chng hn nh: Name, Caption,...

IV.3. Phng thc:

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

IV.4. S kin:

o Click, DblClick: xy ra khi khung nhn c mt thao tác nhp (nhp úp) chut.

V. Nút lnh (Command Button)

V.1. Khái nim:

Nút lnh là mt iu khin dùng bt u, ngt hoc kt thúc mt quá trình. Khi nút lnh c chn thì nó trông nh c nhn xung, do ó nút lnh còn c gi là nút nhn (Push Button). Ngi s dng luôn có th chn mt nút lnh nào ó bng cách nhn chut trên nút lnh ó. Biu tng (shortcut) trên hp công c:

V.2. Thuc tính:

o Name: s dng nh mt nh danh nhm xác nh tên ca nút lnh. o Caption: Dùng hin th mt chui nào ó trên nút lnh. o Default: Nu giá tr ca thuc tính này là True thì ta có th chn nút lnh bng cách nhn phím Enter. o Cancel: Nu giá tr ca thuc tính này là True thì ta có th chn nút lnh nào ó bng cách nhn phím ESC. o Enabled: Trong mt biu mu, có th có nhiu nút lnh thc hin nhiu công vic khác nhau và ti mt thi im nào ó ta ch c phép thc hin mt s công vic. Nu giá tr thuc tính Enabled là False thì nút lnh ó không có tác dng. Giá tr mc nh ca thuc tính này là True. Ta có th thay i giá tr ca thuc tính ti thi im chy ng dng. Trang 13

Visual Basic

o ToolTipText: cho phép hin th mt on vn bn chú thích công dng ca nút lnh khi ngi s dng dùng chut rê trên nút nhn. o Font, Fore Color: Quy nh kiu ch, kích thc, màu hin th.

V.3. Phng thc

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

V.4. Phng thc

o Click: ây là s kin thng xy ra vi nút lnh. Mi khi mt nút lnh c chn, s kin này c kích hot. Do ó, ngi s dng s vit mã các lnh áp ng li s kin này. Ví d: To mt biu mu có mt ô nhp liu vi nhãn là h tên và mt nút lnh cho phép a ra câu chào ngi dùng ó.

Private Sub Command1_Click() MsgBox "Chao mung ban " & Text1.Text & _ " lam quen voi Visual Basic" End Sub

Click here Hình II.3 S dng nút lnh

VI. Ô nhp liu (TextBox)

VI.1. Khái nim:

Ô nhp liu là mt iu khin cho phép nhn thông tin do ngi dùng nhp vào. i vi ô nhp liu ta cng có th dùng hin th thông tin, thông tin này c a vào ti thi im thit k hay thm chí thi im thc thi ng dng. Còn thao tác nhn thông tin do ngi dùng nhp vào d nhiên là c thc hin ti thi im chy ng dng. Biu tng (shortcut) trên hp công c

VI.2. Thuc tính:

o Name: ây là tên ca ô nhp liu, c s dng nh mt nh danh. o MaxLength: Thuc tính quy nh s ký t ti a có th nhp vào ô nhp liu. Nu s ký t nhp vào vt quá s ký t ti a thì ch có úng s ký t ti a c ghi nhn vào trong thuc tính Text. Trang 14

Visual Basic

o Text: Dùng nhp vào thông tin cn hin th trong Textbox ti thi im thit k hoc nhn giá tr do ngi dùng nhp vào ti thi im chy ng dng. Ví d:

MsgBox Text1.Text

on mã này vit trong s kin Click ca nút lnh OK. Cho phép hp thông báo hin th ni dung do ngi dùng nhp vào ô nhp liu.

Hình II.3 Ví d v iu khin ô nhp liu

o Locked: Thuc tính cho phép ngi dùng thay i ni dung ca ô nhp liu c hay không? Thuc tính này có th nhn 2 giá tr True hoc False. Nu False thì ngi dùng có th thay i ni dung ca ô nhp liu & mc nh thì thuc tính này có giá tr là False. o PasswordChar: Thuc tính này quy nh cách hin th thông tin do ngi dùng nhp vào. Chng hn, nu ta nhp vào giá tr thuc tính này là * thì các ký t nhp vào iu hin th bi du * . Thuc tính này thng c dùng trong trng hp thông tin nhp vào cn c che giu (Ví d mt khu ng nhp mt chng trình ng dng nào ó mà trong ó các ngi dùng khác nhau thì có các quyn khác nhau). o Multiline: Thuc tính quy nh ô nhp liu có c hin th thông tin di dng nhiu hàng hay không, nu là TRUE thì ô nhp liu cho phép nhiu hàng. o Font, Fore Color: Quy nh kiu ch, kích thc, màu hin th. o SelLength:Cho phép tr v hoc t trc s lng ký t c chn trong ô nhp liu. o SelStart: Tr v hoc xác nh im bt u ca chui c chn. ây là v trí bt u chèn mt chui mi trong trng hp không có ánh du chn chui. o SelText: Tr v hoc xác nh chui ký t c ánh du chn, chi tr v s là rng nu nh không ánh du chn chui nào. Ba thuc tính SelLength, SelStart, SelText ch có tác dng ti thi im chy ng dng.

VI.3. Phng thc

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

Trang 15

Visual Basic

o SetFocus: Phng thc này nhm mc ích thit lp cho iu khin ô nhp liu nhn c Focus, ngha là nó sn sàng c tng tác bi ngi s dng.

VI.4. S kin:

o KeyPress: xy ra khi ngi s dng chng trình nhn mt phím. i vi iu khin TextBox, ta thng dùng nó lc (filter out) các phím không chp nhn. S kin KeyPress cho ta mt mã Ascii, mt s có giá tr t 0 n 255, ca phím va nhn. Trong ví d di ây, TextBox Text1 s ch nhn bit các phím là s (0 - 9), không nhn bit các phím khác:

Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii < 48 Or KeyAscii > 57 Then ` Mã Ascii ca 0 là 48, ca 9 là 57 KeyAscii = 0 End If End Sub

o KeyDown, KeyUp: mi s kin KeyPress li cho ta mt cp s kin KeyDown/KeyUp. S kin KeyDown/KeyUp có 2 tham s là KeyCode và Shift. S kin này cho phép ta nhn bit c các phím c bit trên bàn phím. Trong ví d di ây, ta hin th tên các phím chc nng mà ngi s dng chng trình nhn vào:

Private Sub Text3_KeyDown(KeyCode As Integer, Shift As Integer) If (KeyCode >= 112) And (KeyCode <= 123) Then MsgBox "Ban vua nhan phim chuc nang: F" & _ Trim(Str(KeyCode - 111)) End If End Sub

CHNG 3: LP TRÌNH CU TRÚC TRONG VISUAL BASIC

Mc tiêu: Chng này gii thiu v các cu trúc lp trình trong VB; ây là các cu trúc ct lõi xây dng nên mt chng trình VB. Hc xong chng này, sinh viên phi nm bt c các vn sau: - S dng môi trng lp trình VB vit mã lnh. - Các kiu d liu trong VB. - Cách khai báo hng, bin trong VB. - Biu thc trong VB. - Các câu lnh n cng nh các câu lnh có cu trúc. - Chng trình con trong VB. - By li trong VB. Kin thc có liên quan: - Cách s dng môi trng phát trin ca VB. Trang 16

Visual Basic

Tài liu tham kho:

- Microsoft Visual Basic 6.0 và Lp trình C s d liu - Chng 4, trang 49 - Nguyn Th Ngc Mai (ch biên), Nhà xut bn Giáo dc - 2000.

Trang 17

Visual Basic

I. Môi trng lp trình

I.1. Son tho chng trình:

Trong Visual Basic IDE, ca s mã lnh (Code) cho phép son tho chng trình. Ca s này có mt s chc nng ni bt: o ánh du (Bookmarks): Chc nng này cho phép ánh du các dòng lnh ca chng trình trong ca s mã lnh d dàng xem li v sau này. bt tt kh nng này, chn Bookmarks t menu Edit, hoc chn t thanh công c Edit. o Các phím tt trong ca s mã lnh: Chöùc naêng Xem ca s Code Xem ca s Object Browser Tìm kim Thay th Tìm tip Tìm ngc Chuyn n th tc k tip Chuyn n th tc trc ó Xem nh ngha Cun xung mt màn hình Cun lên mt màn hình Nhy v v trí trc ó Tr v u ca mô-un n cui mô-un Phím taét F7 F2 CTRL+F CTRL+H SHIFT+F4 SHIFT+F3 CTRL+DOWN ARROW CTRL+UP ARROW SHIFT+F2 CTRL+PAGE DOWN CTRL+PAGE UP CTRL+SHIFT+F2 CTRL+HOME CTRL+END

I.2. Các chc nng t ng:

o T ng kim tra cú pháp (Auto Syntax Check) Nu chc nng này không c bt thì khi ta vit mt dòng mã có cha li, VB ch hin th dòng chng trình sai vi màu nhng không kèm theo chú thích gì và tt nhiên ta có th vit tip các dòng lnh khác. Còn khi chc nng này c bt, VB s cho ta bit mt s thông tin v li và hin th con tr ngay dòng chng trình li ch ta sa. o Yêu cu khai báo bin (Require Variable Declaration) VB s thông báo li khi mt bin c dùng mà không khai báo và s ch ra v trí ca bin ó.

Trang 18

Visual Basic

Hình III.1: Ca s Options o Gi nh mã lnh (Code): Kh nng Auto List Members: T ng hin th danh sách các thuc tính và phng thc ca 1 iu khin hay mt i tng khi ta gõ vào tên ca chúng. Chn thuc tính hay phng thc cn thao tác và nhn phím Tab hoc Space a nó vào chng trình.

Hình III.2 Ca s Code vi kh nng gi nh Code

II. Kiu d liu

II.1. Khái nim

Kiu d liu là mt tp hp các giá tr mà mt bin ca kiu có th nhn và mt tp hp các phép toán có th áp dng trên các giá tr ó. Trang 19

Visual Basic

II.2. Các kiu d liu c s trong Visual Basic

Kiu d liu Boolean Byte Integer Long Single Double

Mô t Gm 2 giá tr: TRUE & FALSE. Các giá tr s nguyên t 0 ­ 255 Các giá tr s nguyên t -32768 ­ 32767 Các giá tr s nguyên t -2147483648 ­ 2147483647. Kiu d liu này thng c gi là s nguyên dài. Các giá tr s thc t -3.402823E+38 ­ 3.402823E+38. Kiu d liu này còn c gi là chính xác n. Các giá tr s thc t -1.79769313486232E+308 1.79769313486232E+308. Kiu d liu này c gi là chính xác kép. D liu tin t cha các giá tr s t -922.337.203.685.477,5808 922.337.203.685.477,5807. Chui d liu t 0 n 65.500 ký t hay ký s, thm chí là các giá tr c bit nh ^%@. Giá tr kiu chui c t gia 2 du ngoc kép (""). D liu kiu ngày tháng, giá tr c t gia cp du ##. Vic nh dng hin th tùy thuc vào vic thit lp trong Control Panel. Cha mi giá tr ca các kiu d liu khác, k c mng.

Currency String

Date

Variant

III. Hng s

III.1. Khái nim

Hng s (Constant) là giá tr d liu không thay i.

III.2. Khai báo hng

[Public|Private] Const <tên hng> [As <kiu d liu>] = <biu thc> Trong ó, tên hng c t ging theo quy tc t tên ca iu khin. Ví d: Const g = 9.8 Const Num As Integer = 4*5 Ta có th dùng ca s Object Browser xem danh sách các hng có sn ca VB và VBA (Visual Basic for Application). Trng hp trùng tên hng trong nhng th vin khác nhau, ta có th ch rõ tham chiu hng. Trang 20

Visual Basic

[<Libname>.][<tên mô-un>.] <tên hng>

III) Bin

III.1. Khái nim

Bin (Variable) là vùng lu tr c t tên cha d liu tm thi trong quá trình tính toán, so sánh và các công vic khác. Bin có 2 c im: o Mi bin có mt tên. o Mi bin có th cha duy nht mt loi d liu.

III.2. Khai báo

[Public|Private|Static|Dim] <tên bin> [ As <kiu d liu> ] Trong ó, tên bin: là mt tên c t ging quy tc t tên iu khin. Nu cn khai báo nhiu bin trên mt dòng thì mi khai báo cách nhau du phy (,). Nu khai báo bin không xác nh kiu d liu thì bin ó có kiu Variant. Khai báo ngm: ây là hình thc không cn phi khai báo mt bin trc khi s dng. Cách dùng này có v thun tin nhng s gây mt s sai sót, chng hn khi ta ánh nhm tên bin, VB s hiu ó là mt bin mi dn n kt qu chng trình sai mà rt khó phát hin. Ví d: Dim Num As Long, a As Single Dim Age As Integer Khai báo tng minh: tránh rc ri nh ã nêu trên, ta nên quy nh rng VB s báo li khi gp bin cha c khai báo bng dòng lnh: Option Explicit trong phn Declaration (khai báo) ca mô-un. Option Explicit ch có tác dng trên tng mô-un do ó ta phi t dòng lnh này trong tng mô-un ca biu mu, mô-un lp hay mô-un chun.

IV. Biu thc

IV.1. Khái nim

Toán t hay phép toán (Operator): là t hay ký hiu nhm thc hin phép tính và x lý d liu. Toán hng: là giá tr d liu (bin, hng...). Biu thc: là tp hp các toán hng và các toán t kt hp li vi nhau theo quy tc nht nh tính toán ra mt giá tr nào ó.

IV.2. Các loi phép toán

a. Các phép toán s hc: Thao tác trên các giá tr có kiu d liu s.

Trang 21

Visual Basic

Phép Ý ngha Kiu ca i s Kiu ca kt qu toán Phép ly s i Kiu s (Integer, Single...) Nh kiu i s + Phép cng hai s Kiu s (Integer, Single...) Nh kiu i s Phép tr hai s Kiu s (Integer, Single...) Nh kiu i s * Phép nhân hai s Kiu s (Integer, Single...) Nh kiu i s / Phép chia hai s Kiu s (Integer, Single...) Single hay Double \ Phép chia ly phn nguyên Integer, Long Integer, Long Mod Phép chia ly phn d Integer, Long Integer, Long ^ Tính ly tha Kiu s (Integer, Single...) Nh kiu i s b. Các phép toán quan h ây là các phép toán mà giá tr tr v ca chúng là mt giá tr kiu Boolean (TRUE hay FALSE). Phép toán Ý ngha So sánh bng nhau = <> So sánh khác nhau > So sánh ln hn < So sánh nh hn >= So sánh ln hn hoc bng <= So sánh nh hn hoc bng c. Các phép toán Logic: là các phép toán tác ng trên kiu Boolean và cho kt qu là kiu Boolean. Các phép toán này bao gm AND (và), OR (hoc), NOT (ph nh). Sau ây là bng giá tr ca các phép toán: X Y X AND Y X OR Y NOT X TRUE TRUE TRUE TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE FALSE TRUE TRUE FALSE FALSE FALSE FALSE TRUE

V. Câu lnh

Mt câu lnh (statement) xác nh mt công vic mà chng trình phi thc hin x lý d liu ã c mô t và khai báo. Các câu lnh c ngn cách vi nhau bi ký t xung dòng. Ký t xung dòng báo hiu kt thúc mt câu lnh.

V.1. Lnh gán

Cú pháp: <Tên bin> = <Biu thc> Ví d: Gi s ta có khai báo sau:

Dim TodayTemp As Single, MinAge As Integer Dim Sales As Single, NewSales As Single, FullName As String

Các lnh sau gán giá tr cho các bin trên: Trang 22

Visual Basic

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

Gi s ngi dùng cn nhp h và tên vào ô nhp liu TextBox có thuc tính Name là txtName, câu lnh di ây s lu giá tr ca ô nhp liu vào trong bin FullName:

FullName = txtName.Text

Lu ý: Kiu d liu ca biu thc (v phi ca lnh gán) phi phù hp vi bin ta cn gán tr.

V.2. Lnh r nhánh If

o Mt dòng lnh: If <iu kin> Then <dòng lnh> o Nhiu dòng lnh: If <iu kin> Then Các dòng lnh End If Lu cú pháp:

K

Sai

úng

Các dòng lnh

Trong ó, <iu kin>: biu thc mà kt qu tr v kiu Boolean. Ý ngha câu lnh: Các dòng lnh hay dòng lnh s c thi hành nu nh iu kin là úng. Còn nu nh iu kin là sai thì câu lnh tip theo sau cu trúc If ... Then c thi hành. o Dng y : If ... Then ... Else If <iu kin 1> Then [Khi lnh 1] ElseIf <iu kin 2> Then [Khi lnh 2]... [Else [Khi lnh n]] End If

Trang 23

Visual Basic

VB s kim tra các iu kin, nu iu kin nào úng thì khi lnh tng ng s c thi hành. Ngc li nu không có iu kin nào úng thì khi lnh sau t khóa Else s c thi hành. Ví d:

If (TheColorYouLike = vbRed) Then MsgBox "You are a lucky person" ElseIf (TheColorYouLike = vbGreen) Then MsgBox "You are a hopeful person" ElseIf (TheColorYouLike = vbBlue) Then MsgBox "You are a brave person" ElseIf (TheColorYouLike = vbMagenta) Then MsgBox "You are a sad person" Else MsgBox "You are an average person" End If

V.3. Lnh la chn Select Case

Trong trng hp có quá nhiu các iu kin cn phi kim tra, nu ta dùng cu trúc r nhánh If...Then thì on lnh không c trong sáng, khó kim tra, sa i khi có sai sót. Ngc li vi cu trúc Select...Case, biu thc iu kin s c tính toán mt ln vào u cu trúc, sau ó VB s so sánh kt qu vi tng trng hp (Case). Nu bng nó thi hành khi lnh trong trng hp (Case) ó. Select Case <biu thc kim tra> Case <Danh sách kt qu biu thc 1> [Khi lnh 1] Case <Danh sách kt qu biu thc 2> [Khi lnh 2] . . . [Case Else [Khi lnh n]] End Select Mi danh sách kt qu biu thc s cha mt hoc nhiu giá tr. Trong trng hp có nhiu giá tr thì mi giá tr cách nhau bi du phy (,). Nu có nhiu Case cùng tha iu kin thì khi lnh ca Case u tiên s c thc hin. Ví d ca lnh r nhánh If...Then trên có th vit nh sau:

Select Case TheColorYouLike Case vbRed MsgBox "You are a lucky person" Case vbGreen MsgBox "You are a hopeful person" Case vbBlue MsgBox "You are a brave person" Case vbMagenta MsgBox "You are a sad person" Case Else

Trang 24

Visual Basic

MsgBox "You are an average person" End Select

Toán t Is & To Toán t Is: c dùng so sánh <Biu thc kim tra> vi mt biu thc nào ó. Toán t To: Dùng xác lp min giá tr ca <Biu thc kim tra>. Ví d:

Select Case Tuoi Case Is <18 MsgBox "Vi thanh nien" Case 18 To 30 MsgBox "Ban da truong thanh, lo lap than di" Case 31 To 60 MsgBox "Ban dang o lua tuoi trung nien" Case Else MsgBox "Ban da lon tuoi, nghi huu duoc roi day!" End Select

Lu ý: Trong ví d trên không th vit Case Tuoi < 18.

V.4. Cu trúc lp

Các cu trúc lp cho phép thi hành mt khi lnh nào ó nhiu ln. a. Lp không bit trc s ln lp Do ... Loop: ây là cu trúc lp không xác nh trc s ln lp, trong ó, s ln lp s c quyt nh bi mt biu thc iu kin. Biu thc iu kin phi có kt qu là True hoc False. Cu trúc này có 4 kiu: Kiu 1: Do While <iu kin> <khi lnh> kin Loop úng Sai Khi lnh Khi lnh s c thi hành n khi nào iu kin không còn úng na. Do biu thc iu kin c kim tra trc khi thi hành khi lnh, do ó có th khi lnh s không c thc hin mt ln nào c. Kiu 2: Do <khi lnh> Loop While <iu kin>

Trang 25

Visual Basic

Khi lnh s c thc hin, sau ó biu thc iu kin c kim tra, nu iu kin còn úng thì, khi lnh s c thc hin tip tc. Do biu thc iu kin c kim tra sau, do ó khi lnh s c thc hin ít nht mt ln. Kiu 3: Do Until <iu kin> <khi lnh> Loop Cng tng t nh cu trúc Do While ... Loop nhng khác bit ch là khi lnh s c thi hành khi iu kin còn sai. Kiu 4: Do <khi lnh> Loop Until <iu kin> Khi lnh c thi hành trong khi iu kin còn sai và có ít nht là mt ln lp. Ví d: on lnh di ây cho phép kim tra mt s nguyên N có phi là s nguyên t hay không?

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

Trong ó, hàm Sqr: hàm tính cn bc hai ca mt s b. Lp bit trc s ln lp For ... Next ây là cu trúc bit trc s ln lp, ta dùng bin m tng dn hoc gim dn xác nh s ln lp. For <bin m> = <im u> To <im cui> [Step <bc nhy>] [khi lnh] Next Bin m, im u, im cui, bc nhy là nhng giá tr s (Integer, Single,...). Bc nhy có th là âm hoc dng. Nu bc nhy là s âm thì im u phi ln hn im cui, nu không khi lnh s không c thi hành. Khi Step không c ch ra, VB s dùng bc nhy mc nh là mt. Ví d: on lnh sau ây s hin th các kiu ch hin có ca máy bn.

Private Sub Dim i Form_Click( ) As Integer

Trang 26

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

End

Ví d: Tính N! o Bc 1: Thit k chng trình có giao din:

TextBox: Name:txtNum

Label: Name: lblKQ

o Bc 2: S kin Command1_Click c x lý:

Private Sub Command1_Click() Dim i As Integer, n As Integer, Kq As Long n = Val(txtNum.Text) Kq = 1 For i = 1 To n Kq = Kq * i Next lblKQ.Caption = Str(Kq) End Sub

o Lu d án và chy chng trình ta c kt qu nh hình di:

For Each ... Next Tng t vòng lp For ... Next, nhng nó lp khi lnh theo s phn t ca mt tp các i tng hay mt mng thay vì theo s ln lp xác nh. Vòng lp này tin li khi ta không bit chính xác bao nhiêu phn t trong tp hp. For Each <phn t> In <nhóm> <khi lnh> Next <phn t> Lu ý: - Phn t trong tp hp ch có th là bin Variant, bin Object, hoc mt i tng trong Object Browser. - Phn t trong mng ch có th là bin Variant. Trang 27

Visual Basic

- Không dùng For Each ... Next vi mng cha kiu t nh ngha vì Variant không cha kiu t nh ngha.

VI. Chng trình con

VI.1. Khái nim

Trong nhng chng trình ln, có th có nhng on chng trình vit lp i lp li nhiu ln, tránh rm rà và mt thi gian khi vit chng trình ngi ta thng phân chia chng trình thành nhiu module, mi module gii quyt mt công vic nào ó. Các module nh vy gi là các chng trình con. Mt tin li khác ca vic s dng chng trình con là ta có th d dàng kim tra xác nh tính úng n ca nó trc khi ráp ni vào chng trình chính và do ó vic xác nh sai sót tin hành hiu ính trong chng trình chính s thun li hn. Trong Visual Basic, chng trình con có hai dng là hàm (Function) và th tc (Sub). Hàm khác th tc ch hàm tr v cho lnh gi mt giá tr thông qua tên ca nó còn th tc thì không. Do vy ta ch dùng hàm khi và ch khi tho mãn ng thi các yêu cu sau ây: o Ta mun nhn li mt kt qu (ch mt mà thôi) khi gi chng trình con. o Ta cn dùng tên chng trình con (có cha kt qu) vit trong các biu thc. Nu không tha mãn hai iu kin y thì dùng th tc.

VI.2. Th tc

a. Khái nim: Th tc là mt chng trình con thc hin mt hay mt s tác v nào ó. Th tc có th có hay không có tham s. b. Khai báo th tc [Private | Public] [Static] Sub <tên th tc> [(<tham s>[As <Kiu tham s>])] <Các dòng lnh> hay <Các khai báo> End Sub Trong ó: - <Tên th tc>: ây là mt tên c t ging quy tc tên bin, hng,... - <tham s>[: <Kiu tham s>]: có th có hay không? Nu có nhiu tham s thì mi tham s phân cách nhau du phy. Nu không xác nh kiu tham s thì tham s có kiu Variant. gi th tc thc thi, ta có 2 cách: o <Tên th tc> [<Các tham s thc t>] o Call <Tên th tc> ([<Các tham s thc t>])

Trang 28

Visual Basic

Ví d: Thit k chng trình kim tra xem s nguyên N có phi là s nguyên t hay không? o Bc 1: Thit k chng trình có giao din

TextBox: Name:txtNum

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

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

o Bc 3: X lý s kin Command1_Click; trong th tc x lý s kin này ta có gi th tc KtraNgTo nh sau:

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

o Bc 4: Lu d án và chy chng trình. Ta c kt qu sau:

Trong ví d trên thay vì gi th tc bng li gi:

KTraNgTo Val(txtNum.Text)

Ta có th s dng cách khác:

Call KtraNgTo(Val(txtNum.Text))

Trang 29

Visual Basic

VI.3. Hàm

a. Khái nim Hàm (Function) là mt chng trình con có nhim v tính toán và cho ta mt kt qu. Kt qu này c tr v trong tên hàm cho li gi nó. b. Khai báo hàm [Private | Public | Static] Function <Tên hàm> [(<tham s>[As <Kiu tham s>])] _ [As <KIU D LIU>] <Các dòng lnh> hay <Các khai báo> End Function Trong ó: - <Tên hàm>: ây là mt tên c t ging quy tc tên bin, hng,... - <tham s>[: <Kiu tham s>]: có th có hay không? Nu có nhiu tham s thì mi tham s phân cách nhau du phy. Nu không xác nh kiu tham s thì tham s có kiu Variant. - <KIU D LIU>: Kt qu tr v ca hàm, trong trng hp không khai báo As <kiu d liu>, mc nh, VB hiu kiu tr v kiu Variant. Khi gi hàm thc thi ta nhn c mt kt qu. Cn chú ý khi gi hàm thc thi ta nhn c mt kt qu có kiu chính là kiu tr v ca hàm (hay là kiu Variant nu ta không ch rõ kiu tr v trong nh ngha hàm). Do ó li gi hàm phi là thành phn ca mt biu thc. Cú pháp gi hàm thc thi: <Tên hàm>[(tham s)]. Ví d: Tính N! o Bc 1: Thit k chng trình có giao din: TextBox: Name:txtNum

Label: Name: lblKQ

o Bc 2: Thêm mt hàm vào ca s mã lnh ca Form Function Giaithua(N As Integer) As Long Dim i As Integer, Kq As Long Kq = 1 For i = 1 To n Kq = Kq * i Next Giaithua = Kq End Function Private Sub Command1_Click()

Trang 30

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

Lu d án và chy chng trình ta c kt qu nh hình di:

Lu ý: Do khi gi hàm ta nhn c mt kt qu nên bên trong phn nh ngha hàm, trc khi kt thúc ta phi gán kt qu tr v ca hàm thông qua tên hàm (trong ví d trên là dòng lnh Giaithua = Kq)

VII. Truy xut d liu trong Visual Basic

VII.1. Các khái nim

o Module: - Mt ng dng n gin có th ch có mt biu mu, lúc ó tt c mã lnh ca ng dng ó c t trong ca s mã lnh ca biu mu ó (gi là Form Module). Khi ng dng c phát trin ln lên, chúng ta có th có thêm mt s biu mu na và lúc này kh nng lp i lp li nhiu ln ca mt on mã lnh trong nhiu biu mu khác nhau là rt ln. - tránh vic lp i lp li trên, ta to ra mt Module riêng r cha các chng trình con c dùng chung. Visual Basic cho phép 3 loi Module: Module biu mu (Form module): i kèm vi mi mt biu mu là mt module ca biu mu ó cha mã lnh ca biu mu này. Vi mi iu khin trên biu mu, module biu mu cha các chng trình con và chúng sn sàng c thc thi áp ng li các s kin mà ngi s dng ng dng tác ng trên iu khin. Module biu mu c lu trong máy tính di dng các tp tin có uôi là *.frm. Module chun (Standard module): Mã lnh không thuc v bt c mt biu mu hay mt iu khin nào s c t trong mt module c bit gi là module chun (c lu vi uôi *.bas). Các chng trình con c lp i lp li áp ng các s kin khác nhau ca các iu khin khác nhau thng c t trong module chun. Module lp (Class module): c s dng to các iu khin c gi thc thi trong mt ng dng c th. Mt module chun ch cha mã lnh nhng module lp cha c mã lnh và d liu, chúng có th c coi là các iu khin do ngi lp trình to ra (c lu vi uôi *.cls). Trang 31

Visual Basic

o Phm vi (scope): xác nh s lng chng trình có th truy xut mt bin. Mt bin s thuc mt trong 3 loi phm vi: Phm vi bin cc b. Phm vi bin module. Phm vi bin toàn cc.

VII.2. Bin toàn cc o Khái nim: Bin toàn cc là bin có phm vi hot ng trong toàn b ng dng. o Khai báo:

Global <Tên bin> [As <Kiu d liu>]

VII.3. Bin cc b

chúng c nh ngha. o Khai báo: Dim <Tên bin> [As <Kiu d liu>] o Lu ý: Bin cc b c nh ngha bng t khóa Dim s kt thúc ngay khi vic thi hành th tc kt thúc.

o Khái nim: Bin cc b là bin ch có hiu lc trong nhng chng trình mà

VII.4. Bin Module

o Khái nim: Bin Module là bin c nh ngha trong phn khai báo (General|Declaration) ca Module và mc nhiên phm vi hot ng ca nó là toàn b Module y. o Khai báo: - Bin Module c khai báo bng t khóa Dim hay Private & t trong phn khai báo ca Module. Ví d:

Private Num As Integer

- Tuy nhiên, các bin Module này có th c s dng bi các chng trình con trong các Module khác. Mun th chúng phi c khai báo là Public trong phân Khai báo (General|Declaration) ca Module. Ví d:

Public Num As Integer

Lu ý: Không th khai báo bin vi t khóa là Public trong chng trình con.

VII.5. Truyn tham s cho chng trình con

o Khái nim Mt chng trình con ôi lúc cn thêm mt vài thông tin v trng thái ca on mã lnh mà nó nh ngha thc thi. Nhng thông tin này là các bin c truyn vào khi gi chng trình con, các bin này gi là tham s ca chng trình con. Trang 32

Visual Basic

Có hai cách truyn tham s cho chng trình con: Truyn bng giá tr & truyn bng a ch. o Truyn tham s bng giá tr Vi cách truyn tham s theo cách này, mi khi mt tham s c truyn vào, mt bn sao ca bin ó c to ra. Nu chng trình con có thay i giá tr, nhng thay i này ch tác ng lên bn sao ca bin. Trong VB, t khóa ByVal c dùng xác nh tham s c truyn bng giá tr. Ví d:

Sub Twice (ByVal Num As Integer) Num = Num * 2 Print Num End Sub Private Sub Form_Click() Dim A As Integer A = 4 Print A Twice A Print A End Sub

Kt qu thc hin ca on chng trình trên: 4 8 4 o Truyn tham s bng a ch Truyn tham s theo a ch cho phép chng trình con truy cp vào giá tr gc ca bin trong b nh. Vì th, giá tr ca bin có th s b thay i bi on mã lnh trong chng trình con. Mc nhiên, trong VB6 các tham s c truyn theo a ch; tuy nhiên ta có th ch nh mt cách tng minh nh vào t khóa ByRef. Ví d:

Sub Twice (Num As Integer) Num = Num * 2 Print Num End Sub Private Sub Form_Click() Dim A As Integer A = 4 Print A Twice A Print A End Sub

Kt qu thc hin ca on chng trình trên: 4 8 Trang 33

Visual Basic

8

VIII. By li trong Visual Basic

Các thao tác by các li thc thi ca chng trình là cn thit i vi các ngôn ng lp trình. Ngi lp trình khó kim soát ht các tình hung có th gây ra li. Chng hn ngi ta khó có th kim tra cht ch vic ngi dùng ang chép d liu t a mm (hay CD) khi chúng không có trong a. Nu có các thao tác by li ây thì tin cho ngi lp trình rt nhiu. Visual Basic cng cung cp cho ta mt s cu trúc by các li ang thc thi. Cú pháp: Dng 1: On Error GoTo <Tên nhãn> <Các câu lnh có th gây ra li> <Tên nhãn>: <Các câu lnh x lý li> Ý ngha: - <Tên nhãn>: là mt tên c t theo quy tc ca mt danh biu. - Nu mt lnh trong <Các câu lnh có th gây ra li> thì khi chng trình thc thi n câu lnh ó, chng trình s t ng nhy n on chng trình nh ngha bên di <Tên nhãn> thc thi. Dng 2: On Error Resume Next <Các câu lnh có th gây ra li> Ý ngha: - Nu mt lnh trong <Các câu lnh có th gây ra li> thì khi chng trình thc thi n câu lnh ó, chng trình s t ng b qua câu lnh b li và thc thi câu lnh k tip.

Trang 34

Visual Basic

CHNG 4

CÁC KIU D LIU CÓ CU TRÚC

Mc tiêu: Chng này gii thiu v các cu trúc d liu trong VB. Vic nm bt c các vn này giúp cho vic t chc d liu khi vit chng trình VB c hp lý hn. Hc xong chng này, sinh viên phi nm bt c các vn sau: - S dng kiu d liu chui. - S dng kiu ngày tháng. - Kiu ng (Variant) - Kiu mng Kin thc có liên quan: - Các cu trúc lp trình trong VB. Tài liu tham kho: http://www.vovisoft.com/VisualBasic/VB6Chapter5.htm http://www.vovisoft.com/VisualBasic/VB6Chapter6.htm

Trang 35

Visual Basic

I. Kiu chui ký t (String)

I.1. Khai báo

Có hai c t chui ký t theo cú pháp nh sau: - String * <Chiu dài> Ch ra mt chui ký t có dài c nh là bao nhiêu ký t. Trong trng hp giá tr thc ca chui có dài ngn hn dài khai báo thì dài ca chui thì mt s khong trng c thêm vào cho dài thc. Trong trng hp giá tr thc ca chui có dài ln hn dài khai báo thì s ct bt các ký t d tha bên phi. Mt chui không có ký t nào ( dài bng 0) gi là chui rng. - String: Khi không ch ra chiu dài ti a ca chui thì mc nhiên chui có chiu dài ti a là 65.500 ký t. Ví d: Dim Name As String * 30, Class As String * 10 Dim A As String

I.2. Các hàm x lý chui

o Ghép chui: cho phép ghép 2 hay nhiu chui li vi nhau nh phép toán &. Ví d:

Dim FirstWord As String, SecondWord As String Dim Greeting As String FirstWord = "Hello" SecondWord = "World" Greeting = FirstWord & SecondWord ' Greeting bây gi là "HelloWorld"

o Len: tr v chiu dài mt chui c ch nh. Ví d:

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

o Left: Trích chui con t phn u chui gc Left (String, [length]). o Right: Trích chui con t phn uôi chui gc Right (String, [length]) o Mid: Trích chui con t gia chui gc

Mid(String, Start As Long, [length])

Ví d 1:

Dim Today As String, StrDay As String, StrMonth As String Dim StrYear As String, StrMonthYear As String Today = "24/05/2001" ' Ly ra 2 ký t t bên trái ca chui Today StrDay = Left(Today,2) ' StrDay bây gi bng "24" ' Ly ra 4 ký t t bên phi ca String Today StrYear = Right(Today,4) ' StrYear bây gi bng "2001" ' Ly ra 2 characters bt u t ký t th t ca chui ` Today, ký t u tiên t bên trái là th nht StrMonth = Mid(Today,4,2) ' StrMonth bây gi bng "05"

Trang 36

Visual Basic

' Ly ra phn còn li bt u t ký t 4 ca chui Today StrMonthYear = Mid(Today,4) ' StrMonthYear bng "05/2001"

Ví d 2:

Today = "24/05/2001" ' Thay th character th 3 ca Today bng Mid(Today,3,1) = "-" ' Thay th 2 ký t bt u t ký t 4 ca Mid(Today,4,2) = "10" ' Thay th character th 6 ca Today bng Mid(Today,6,1) = "-" ' Today bây gi bng "-" Today bng "10" "-" "24-10-2001"

o InStr: Tìm chui con trong chui gc. Nu hàm InStr tr v 0, ngha là không tìm thy. Cú pháp: InStr([start,] string1, string2 [, compare]) Trong ó: - Start: Xác nh v trí trong chui bt u vic tìm kim. Nu giá tr là Null thì s bt u t u chui. Nu nh tham s Compare có c t thì bt buc phi khai báo tham s Start. - String1: Biu thc chui so sánh. - String2: Chui cn tìm. - Compare: Xác nh kiu so sánh chui. Giá tr: vbTextCompare, vbBinaryCompare. Ví d 1:

Dim myString As String, Position As Integer myString = "The *rain in Spain mainly..." Position = Instr(myString,"*") ' Position s là 5

Nu trong myString không có du "*" thì Position s bng 0 Ví d 2:

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

o Replace: tìm và thay th chui. Cú pháp:

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

Trong ó: - Expression: Biu thc chui cha chui cn thay th. - find:Chui cn tìm. - replace: Chui thay th chui tìm c. - start: Tng t nh hàm InStr. - count: Xác nh s ln thay th. Mc nh là 1. - compare: Tng t nh hàm InStr. o LTrim (RTrim): ct tt c các khong trng bên trái (bên phi ca chui) LTrim(string) Cú pháp:

RTrim(string)

Trang 37

Visual Basic

o UCase: i chui sang chui gm các ký t là ch hoa. Cú pháp: UCase(string) o Asc: cho mã Ascii ca mt ký t. o Chr: tr v ký t ng vi mã Ascii c ch nh.

Dim ASCIINumberA As Integer, CharB As String * 1 Dim StrFive As String * 1 ASCIINumberA = Asc("A") ' ASCIINumberA bây gi bng 65 CharB = Chr(66) StrFive = Chr(Asc("0") + 5) ' ta có digit "5"

o InstrRev: tng t nh InStr nhng vic tìm kim c tin hành t phi sang. o Val: Hàm i chui sang s. o Str: Hàm i s sang chui.

II. Kiu ngày tháng (Date)

- Là kiu mà các bin ca nó cha giá tr ngày tháng. - cho VB bit d liu là kiu Date ta cn t gia hai du # (hoc cp ""). Ví d:

Dim D As Date D = #01/02/98# ` Hay "01/02/98"

Hình IV 1 Hp thoi xác lp

- Hàm Now: tr v ngày gi hin ti. Ví d: Dùng hàm Now & Format:

Nu hiu theo kiu ngi M, ây là ngày 2 tháng giêng nm 1998, còn nu theo kiu Anh thì ây là ngày 1 tháng hai nm 1998. Tuy nhiên, nh dng ngày tháng hin th ph thuc vào quy nh ca Windows. - Hp thoi hình IV.1 hin th khi ta chn Regional Setting trong ca s Control Panel ca Windows, nó cho phép quy nh kiu ngày tháng tùy thuc cách mà ngi dùng quy nh. VB x lý ngày tháng theo kiu M, nhng nu máy hin th theo kiu Anh thì nó vn hin th theo kiu Anh.

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

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

Trang 38

Visual Basic

III. Các loi s

o chuyn i mt chui ra s ta có các hàm Val, CInt, CSng. Ngc li chuyn i t s sang chui ta dùng CStr, Str. Ví d:

Dollars = "500" ExchangeRatePerDollar = "7000" tempValue= Val(Dollars) * Val(ExchangeRatePerDollar) VNDong = CStr(tempValue) MsgBox "Amount in VN Dong is " & VNDong

Ví d:

Dollars = "500.0" ExchangeRatePerDollar = "7000.0" 'Dùng hàm CSng i chui ra Single tempValue = CSng(Dollars) * CSng(ExchangeRatePerDollar) 'Dùng hàm Format có các du phy ngàn và triu ` và phi có 2 ch s sau du chm thp phân. VNDong = Format (tempValue, "#,###,###.00") MsgBox "Amount in VN Dong is " & VNDong

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

IV.Kiu Object

Bin kiu Object cha mt a ch 4 Byte tr n i tng trong ng dng hin hành hoc các ng dng khác. Dùng lnh Set ch ra i tng c th.

Dim Set ObjDb ObjDb As Object = OpenDatabase("d:\tqdinh\thu.mdb")

Khi khai báo bin i tng, ta nên ch ra tên lp tng minh, chng hn nh TextBox thay vì Control, ng dng ca ta s chy nhanh hn. Ta có th xem danh sách các lp có sn trong ca s Object Browser.

V. Kiu Variant

Bin kiu Variant có th cha mi kiu d liu k c kiu mng, kiu do ngi dùng nh ngha nhng ngoi tr kiu chui có dài c nh . Bin kiu Variant có th nhn các giá tr c bit nh Empty, Nothing, Error, Null. Ta có th xác nh kiu d liu ca bin Variant bng các s dng hàm VarType hoc hàm TypeName. Hàm VarType dùng kim tra kiu d liu

Hng vbEmpty vbNull vbInteger

Giá tr Din gii Không cha gì c 0 1 D liu không hp l 2 D liu kiu Integer chun Trang 39

Visual Basic

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

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

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

Mt s chú ý khi dùng bin kiu Variant: - Nu mun thi hành các hàm toán hc, Variant phi cha giá tr kiu s. - Nu mun ni chui, dùng toán t & thay vì toán t +. Giá tr Empty: - ây là giá tr c bit xut hin khi mt bin cha c gán tr. Ta dùng hàm IsEmpty kim tra giá tr Empty. - Giá tr Empty bin mt khi có mt giá tr bt k c gán cho bin Variant, tr v giá tr Empty, ta gán t khoá Empty cho bin Variant. Giá tr Null: Bin Variant cha giá tr Null trong trng hp nhng ng dng c s d liu th hin không có d liu hoc d liu không xác nh. Giá tr Error: Trong mt bin kiu Variant, Error là mt giá tr c bit cho bit ã có mt li ã xy ra bên trong th tc. Ví d:

Private Sub cmdShowDataTypes_Click() Dim sMess As String Dim vVariant As Variant vVariant = "Xin chao" 'String sMess = VarType(vVariant) & vbCrLf ' xung dòng & v u dòng vVariant = 25 ' Integer sMess = sMess & VarType(vVariant) & vbCrLf vVariant = True ' Boolean sMess = sMess & VarType(vVariant) & vbCrLf 'Date vVariant = #1/1/2001# 'trong cp du # sMess = sMess & VarType(vVariant) MsgBox sMess End Sub

Khi chy chng trình kt qu là:

Trang 40

Visual Basic

VI. Kiu Mng

VI.1. Khái nim

- Mng là tp hp các phn t có cùng mt kiu. - Dùng mng s làm cho chng trình n gin và gn hn vì ta có th s dng vòng lp. Mng s có biên trên và biên di, trong ó các thành phn ca mng là liên tip trong khong gia hai biên này. - Có hai loi bin mng: mng có chiu dài c nh và mng có chiu dài thay i lúc thi hành.

VI.2. Khai báo

o Mng có chiu dài c nh: Dim <Tên bin mng>(<Kích thc>) [As <Kiu>] Lúc này phn t u tiên có ch s là 0 & phn t cui cùng có ch s là <Kích thc>. Dim <Tên bin mng>(<Ch s u> To <Ch s cui>) [As <Kiu>] Ví d: ' Khai báo mt bin mng 15 phn t kiu Integer

Dim Counters(14)As Integer

' Khai báo mt bin mng 21 phn t kiu Double

Public Sums(20)As Double

' Khai báo mt bin mng 10 phn t kiu chui ký t

Dim List (1 To 10) As String * 12

- Hàm UBound tr v biên trên ca mt mng. Trang 41

Visual Basic

- Hàm LBound tr v biên di ca mt mng. Ví d: UBound(List) s tr v giá tr là 10. LBound(List) s tr v giá tr là 1. Lu ý: ta có th khai báo mt mng nhiu chiu nh sau

Dim Multi3D (3, 1 To 10, 9) As Double

Khai báo này to ra mt mng 3 chiu vi kích thc 4 x 10 x 10.

o Mng ng: - ây là mng có kích thc thay i, ó là mt trong nhng u im ca mng ng vì nó giúp ta tit kim tài nguyên h thng. Ta có th s dng mt mng có kích thc ln trong mt thi gian nào ó ri xoá b tr li vùng nh cho h thng. - Khai báo mt mng ng bng cách cho nó mt danh sách không theo chiu nào c. Cú pháp: Dim <Tên mng> () [As <Kiu>] Ví d:

Dim DynArray() As Integer

Sau ó ta có th cp phát s phn t tht s bng lnh ReDim. ReDim <Tên mng>(N) ' Trong ó N là mt biu thc kiu Integer. ReDim dùng xác nh hay thay i kích thc ca mt mng ng. Ta có th dùng ReDim thay i s phn t, s chiu ca mt mng nhiu ln nhng không th thay i kiu d liu ca mng ngoi tr kiu mng là kiu Variant. Mi ln gi ReDim tt c các giá tr cha trong mng s b mt. VB khi to li giá tr cho chúng (Empty i vi mng Variant, 0 cho mng kiu s, chui rng cho mng chui hoc Nothing cho mng các i tng). Nhng ôi khi ta mun tng kích c ca mng nhng không mun làm mt d liu, ta dùng ReDim i kèm vi t khoá Preserve. Ta xem ví d di ây:

ReDim Preserve DynArray (UBound(DynArray) +10)

Tuy nhiên ch có biên trên ca chiu cui cùng trong mng c thay i khi ta dùng Preserve. Nu ta c tình thay i chiu khác hoc biên di thì VB s báo li.

VI.3. Mt s thao tác trên mng

o Truy xut tng phn t trong mng: <Tên mng>(<V trí>) o Sao chép mng: i vi VB6, ta có th gán mt mng cho mt mng khác, hoc kt qu tr v ca mt hàm có th là mt mng. Ví d:

ByteCopy (old () As New = old End Sub Sub Byte, New () As Byte)

Tuy nhiên, cách này cng ch áp dng c cho mng khai báo ng mà thôi. Khi gán bin, có mt s quy lut mà ta cn lu ý: ó là quy lut v kiu d liu và quy lut v kích thc và s chiu ca mng. Trang 42

Visual Basic

Li khi gán mng có th xy ra lúc biên dch hoc khi thi hành. Ta có th thêm by li m bo rng hai mng là tng thích trc khi gán. o Mng là kt qu tr v ca hàm. Chng hn nh:

Public Function ArrayFunction (b As Byte) As Byte() Dim x(2) As Byte x(0) = b x(1) = b + 2 x(2) = b + b ArrayFunction = x End Function

Khi gi hàm tr v mng, bin gi giá tr tr v phi là mt mng và có kiu nh kiu ca hàm, nu không nó s báo li "không tng thích kiu".

VII. Kiu do ngi dùng nh ngha - Kiu mu tin

Cú pháp: Type <tên kiu> <Tên trng 1> : <Kiu trng 1> <Tên trng 2> : <Kiu trng 2> : <Tên trng n> : <Kiu trng n> End Type Ví d:

Type TEmployee Fullname As String Salary As Single Age As Integer Type

End

Chúng ta va nh ngha mt kiu d liu mi có tên là TEmployee. Kiu này có nét tng t nh mt lp. V mt chc nng, c hai là nh nhau, nhng mt lp có th cha trong DLL và sn sàng cho vic dùng chung vi các ng dng khác, trong khi ó kiu d liu do ngi dùng nh ngha phi c khai báo li trong tng d án. Do vy, kiu lp có nhiu mt tin li hn. Cách truy xut tng trng ca kiu mu tin: <Tên bin mu tin>.<Tên trng> Ví d: Gi s ta có khai báo bin sau:

Dim e As TEmployee

Ta có th gán:

e.Fullname = "Nguyen Van An" e.Salary = 300000.00 e.Age = 26

Câu lnh With: - c s dng vit gn hn khi thao tác vi d liu kiu mu tin. - Cú pháp: With <Tên bin mu tin> Trang 43

Visual Basic

[ Truy xut n tng trng ca mu tin theo dng: .<Tên trng> ] End With Ví d: Dim e As TEmployee Ta có th gán:

With e .Fullname = "Nguyen Van An" .Salary = 300000.00 .Age = 26 End With

Trang 44

Visual Basic

CHNG 5

THIT K BIU MU DÙNG CÁC IU KHIN

Mc tiêu: Chng này gii thiu v các iu khin dùng trong vic to giao din cho các ng dng chy trên Windows. Vic nm bt c các vn này làm cho công vic to giao din cho ng dng c nhanh chóng. Hc xong chng này, sinh viên phi nm bt c các vn sau:

- S dng các iu khin hp danh sách, hp la chn lu các danh sách. - S dng các iu khin hp ánh du, nút la chn nhn/hin th d liu dng Yes/No. - S dng các iu khin hp hình nh, iu khin nh hin th nh. - S dng iu khin thanh cun nhn/hin th d liu s. - S dng iu khin thi gian áp ng s trôi i ca thi gian.

- Mt s iu khin khác. Kin thc có liên quan: - Các cu trúc lp trình trong VB. - Cách thc x lý s kin. Tài liu tham kho:

- Microsoft Visual Basic 6.0 và Lp trình C s d liu - Chong 3, trang 29 - Nguyn Th Ngc Mai (ch biên), Nhà xut bn Giáo dc - 2000.

Trang 45

Visual Basic

I. Phân loi iu khin

Có 3 nhóm iu khin trong Visual Basic: Các iu khin ni ti (Intrinsic control). Các iu khin ni ti luôn cha sn trong hp công c (nhãn, khung, nút lnh, khung nh...). Ta không th g b các iu khin ni ti ra khi hp công c. Các iu khin ActiveX tn ti trong các tp tin c lp có phn m rng .OCX: ó là các iu khin có th có trong mi phiên bn ca VB hoc là các iu khin ch hin din trong n bn Professional và Enterprise. Mt khác còn có rt nhiu iu khin ActiveX do nhà cung cp th ba cung cp. Các i tng chèn c (Insertable Object): Các i tng này có th là Microsoft Equation 3.0 hoc bng tính (Worksheet) ca Microsoft Excel... Mt vài i tng kiu này cho phép ta lp trình vi các i tng sinh ra t các ng dng khác ngay trong ng dng VB.

II. S dng các iu khin

II.1 iu khin danh sách các la chn (List Box)

II.1.1. Khái nim: iu khin này hin th mt danh sách các mc mà ó ngi dùng có th chn la mt hoc nhiu mc Biu tng (Shortcut) trên hp công c iu khin này hin th mt danh sách các mc mà ó ngi dùng có th chn la mt hoc nhiu mc Trang 46

Visual Basic

List Box gii thiu vi ngi dùng mt danh sách các la chn. Mt cách mc nh, các la chn hin th theo chiu dc trên mt ct và bn có th thit lp là hin th theo nhiu ct. Nu s lng các la chn nhiu và không th hin th ht trong danh sách thì mt thanh trt s t ng xut hin trên iu khin. Di ây là mt ví d v danh sách các la chn n ct.

Hình V.1: Ví d v List Box

II.1.2. Thuc tính: o Name: ây là tên ca danh sách la chn, c s dng nh mt nh danh. o MultiSelect: Thuc tính này cho phép List Box có c phép có nhiu la chn khi thc thi hay không? o Sort: List Box có sp xp hay không? o Ngoài ra còn có mt s thuc tính thông dng khác nh: Font, Width, Height... o ListIndex: V trí ca phn t c la chn trong List Box. o Select(<Index>): cho bit phn t th <Index> trong List Box có c chn hay không? II.1.3. Phng thc: o AddItem: Thêm mt phn t vào List Box. Cú pháp: <Name>.AddIem(Item As String, [Index]) Tham s Name Item Index Din gii Tên ca List Box. Biu thc chui ( mc) cn thêm vào. Xác nh v trí mc mi c chèn vào, giá tr 0 xác nh cho v trí u tiên. Khi không ch nh rõ Index thì phn t thêm vào là mc cui cùng trong List Box mi.

Sau ây là on mã ví d to mt List Box có tên List1 vi các mc "Germany," "India," "France," và "USA" vào lúc biu mu c np (Load).

Private Sub Form_Load ()

Trang 47

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

Ngi dùng cng có th thêm vào mt mc mi mt cách t ng vào bt k thi im nào nhm áp li tác ng t phía ngi s dng ng dng. Di ây là hình nh minh ha cho List Box tng ng vi on mã trên.

Hình V.2 List box hin th các quc gia

Thêm mt mc mi ti v trí xác nh: thc hin công vic này ta ch cn ch ra v trí cn xen mc mi vào. Ví d: List1.AddItem "Japan", 0 Thêm mi mc ti thi im thit k: S dng thuc tính List ca iu khin List Box, ta có th thêm mi các mc và dùng t hp phím CTRL+ENTER bt u thêm vào mc mi trên dòng khác. Khi ã thêm xong danh sách các mc, ta có th sp xp li các mc bng cách s dng thuc tính Sorted và t giá tr ca thuc tính này là TRUE. o RemoveItem: Xóa mt phn t ra khi List Box. Cú pháp: <Name>.RemoveItem Index Tham s Name và Index ging nh trng hp thêm vào mt mc. o Clear: Xóa tt c các mc trong List Box. Cú pháp <Name>.Clear o Text: Nhn giá tr t List Box khi mt mc c chn. Chng hn on mã sau ây s cho bit dân s ca Canada khi ngi dùng chn Canada t List Box.

Private Sub List1_Click () If List1.Text = "Canada" Then Text1.Text = "Canada has 24 million people." End If End Sub

Trang 48

Visual Basic

Choün

Hình V.3 Ví d v List Box

o List: truy xut ni dung phn t bt k trong List Box. Thuc tính này cho phép truy xut tt c các mc ca iu khin List Box. Thuc tính này cha mt mng và mi mc là mt phn t ca mng. Mi mc c hin th di dng chui, tham chiu n mt mc trong danh sách, s dng cú pháp sau: <Name>.List(Index) Ví d: Text1.Text = List1.List(2) II.1.4. S kin: o Click & Double Click: Xy ra khi ngi s dng nhp chut (hay nhp úp) vào List Box. Thông thng ngi s dng s thit k mt nút lnh i kèm nhn v giá tr do ngi dùng chn. Khi ó công vic thc hin sau khi nút lnh c chn s ph thuc vào giá tr ngi dùng chn t List Box. Double Click lên mt mc trong danh sách cng có kt qu tng t nh vic chn mt mc trong danh sách ri n lên nút lnh. thc hin công vic nh trên trong s kin Double Click ca List Box ta s gi n s kin Click ca nút lnh.

Private Sub List1_DblClick () Command1_Click End Sub

Hoc ta có th thit t giá tr True cho thuc tính Value ca nút lnh.

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

Trang 49

Visual Basic

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

iu khin Combo Box có th c xem là tích hp gia hai iu khin Text Box và List Box. Ngi dùng có th chn mt mc bng cách ánh chui vn bn vào Combo Box hoc chn mt mc trong danh sách. im khác nhau c bn gia Combo Box và List Box là iu khin Combo ch gi ý (hay ngh) các la chn trong khi ó iu khin List thì gii hn các mc nhp vào tc là ngi dùng ch có th chn nhng mc có trong danh sách. iu khin Combo cha c ô nhp liu nên ngi dùng có th a vào mt mc không có sn trong danh sách. Biu tng short cut trên hp công c: Các dng ca iu khin Combo Box: Có tt c 3 dng ca iu khin Combo Box. Ta có th chn dng ca Combo ti thi im thit k bng cách dùng giá tr hoc hng chui ca VB. Kiu Drop-down Combo Box Simple Combo Box Drop-down List Box Giá tr 0 1 2 Hng VbComboDropDown VbComboSimple vbComboDropDownList

Drop-down combo box

Simple combo box

Drop-down list box

Hình V.4: Các dng combo box

- Drop-down Combo Box: ây là dng mc nhiên ca Combo. Ngi dùng có th nhp vào trc tip hoc chn t danh sách các mc. - Simple Combo Box: Ta có th hin th nhiu mc cùng mt lúc. hin th tt c các mc, bn cn thit k Combo ln. Mt thanh trt s xut hin khi còn mc cha c hin th ht. dng này, ngi dùng vn có th nhp mt chui vào trc tip hoc chn t danh sách các mc. - Drop down List Box: Dng này rt ging nh mt List box. Mt im khác bit ó là các mc s không hin th n khi nào ngi dùng Click lên mi tên phía phi ca iu khin. im khác bit vi dng th 2 ó là ngi dùng không th nhp vào trc tip mt chui không có trong danh sách. Các thuc tính cng nh các phng thc áp dng trên Combo Box ging nh trên List Box. Trang 50

Visual Basic

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

II.3.1. Khái nim: ây là iu khin hin th du nu nh c chn và du b xoá nu nh không chn. Dùng iu khin Check Box nhn thông tin t ngi dùng theo dng Yes/No hoc True/False. Ta cng có th dùng nhiu iu khin trong mt nhóm hin th nhiu kh nng la chn trong khi ch có mt c chn. Khi Check Box c chn, nó có giá tr 1 và ngc li có giá tr 0. Biu tng shortcut trên hp công c II.3.2. Thuc tính: o Name: thuc tính tên. o Value: Giá tr hin thi trên Check Box. Có th nhn các giá tr: vbChecked, vbUnchecked, vbGrayed. II.3.3. S kin: o Click: Xy ra khi ngi s dng nhp chut trên Check Box. II.3.4. Ví d: Thit k chng trình có giao din:

Hình V.5 Ví d v Check Box

Hình V.5 là hình minh ha cách dùng Check Box hin th chui di dng tô m và nghiêng. Private Sub chkBold_Click () If ChkBold.Value = vbChecked Then ' If checked. txtDisplay.Font.Bold = True Else ' If not checked. txtDisplay.Font.Bold = False End If End Sub Private Sub chkItalic_Click () If ChkItalic.Value = vbChecked Then txtDisplay.Font.Italic = True Else If not checked. Trang 51 ' If checked.

Visual Basic

txtDisplay.Font.Italic = False End If End Sub

II.4 iu khin nút la chn (Option Button)

II.4.1. Khái nim: Công dng ca iu khin Option button cng tng t nh iu khin Check Box. im khác nhau ch yu gia hai loi iu khin này ó là: Các Option Button ca cùng mt nhóm ti mi thi im ch có mt iu khin nht nh c chn. Biu tng Shortcut trên hp công cuï Cách s dng Option button cng tng t nh ca Check Box. To nhóm Option Button Tt c các Option button t trc tip trên biu mu (có ngha là không thuc vào Frame hoc Picture Box) s c xem nh là mt nhóm. Nu ngi dùng mun to mt nhóm các Option button khác thì bt buc phi t chúng bên trong phm vi ca mt Frame hoc Picture box.

Hình V.6 Nhóm các option button

II.4.2. Thuc tính: o Name: thuc tính tên ca iu khin Option Button. o Value: Giá tr hin thi trên Option Button. Có th nhn các giá tr: True &

False.

II.4.3. S kin: · Click: Xy ra khi ngi s dng nhp chut trên Option Button.

II.5 iu khin thanh cun ngang (HScrollBar)

II.5.1. Khái nim: Là iu khin có thanh trt cho phép cun ngang và ngi dùng có th s dng HScrollBar nh mt thit b nhp hoc mt thit b ch nh cho s lng hoc vn tc. Ví d ta thit k volume cho mt trò chi trên máy tính hoc din t có bao nhiêu thi gian trôi qua trong mt khong nh thi nht nh. Trang 52

Visual Basic

Biu tng Shortcut trên hp công cuï Khi ngi dùng s dng Scroll Bar nh mt thit b ch nh s lng thì ngi dùng cn xác nh giá tr cho hai thuc tính Max và Min a ra khong thay i thích hp. II.5.2. Thuc tính: o Name: Tên ca thanh cun. o Min: Là giá tr nh nht trên thanh cun. o Max:: Giá tr ln nht ca thanh cun. o Large change: Thuc tính này dùng xác nh khong thay i khi ngi dùng n chut lên Hscrollbar. o Small change: Thuc tính này dùng xác nh khong thay i khi ngi dùng n lên mi tên phía cui thanh cun. o Value: Thuc tính này tr v giá tr ti mt thi im ca thanh cun nm trong khong giá tr [Min, Max] mà ngi dùng ã xác nh. II.5.3. S kin: o Change: Xy ra mi khi HScrollBar thay i giá tr. o Scroll: Xy ra mi khi ta di chuyn con tr thanh cun. II.5.4. Ví d:

Hình V.7 Ví d v Hscrollbar

Hình V.7 minh ha vic s dng thanh cun thay i kích c ca ô Text h tên vi on mã n gin nh sau:

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

Trang 53

Visual Basic

II.6 iu khin thanh cun ng (VScrollBar)

Biu tng shortcut trên hp công cuï Các thuc tính và công dng ca VScrollBar cng tng t nh HScrollBar.

II.7 iu khin hp hình nh (Picture Box)

II.7.1. Khái nim: iu khin Picture Box cho phép ngi dùng hin th hình nh lên mt biu mu. Biu tng Shortcut trên hp công c II.7.2. Thuc tính: o Name: tên ca iu khin Picture Box. o Picture: ây là thuc tính cho phép xác nh hình nh nào s c hin th bên trong Picture box. Bao gm tên tp tin hình nh và c ng dn nu có. hin th hoc thay th mt hình nh ti thi im chy chng trình thì ngi dùng có th dùng phng thc LoadPicture t li giá tr ca thuc tính Picture vi cú pháp nh trong ví d di ây:

picMain.Picture = LoadPicture("NEW.JPG")

o Autosize: Khi giá tr ca thuc tính này là TRUE thì iu khin Picture box s t ng thay i kích thc cho phù hp vi hình nh c hin th. Ta nên cn thn khi s dng thuc tính này vì khi iu khin Picture Box thay i kích thc, nó không quan tâm n v trí ca các iu khin khác. II.7.3. S kin: chut. o Mouse Down: Xy ra khi ngi s dng chng trình nhn gi phím o Mouse Move: Xy ra khi ngi s dng chng trình di chuyn chut. o Mouse Up: Xy ra khi ngi s dng chng trình th phím chut. II.7.4. Ví d:

Trang 54

Visual Basic

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

II.7.5. Lu ý: o iu khin Picture Box có th c dùng nh mt vt cha các iu khin khác (tng t nh mt Frame). o Ngoài ra ngi dùng cng có th s dng Picture Box nh mt khung v hoc nh mt khung son tho và có th in c ni dung trên ó.

II.8 iu khin hình nh (Image)

II.8.1. Khái nim: iu khin Image dùng hin th mt hình nh. Các dng có th là Bitmap, Icon, Metafile, Jpeg, Gif. Tuy nhiên khác vi iu khin Picture Box iu khin Image s dng tài nguyên h thng ít và cng np nh nhanh hn; hn na s lng thuc tính và phng thc áp dng ít hn iu khin Picture box. Biu tng Shortcut trên hp công c II.8.2. Thuc tính: o Name: tên ca iu khin Image. o Picture: ây là thuc tính cho phép xác nh hình nh nào s c hin th bên trong iu khin Image. Bao gm tên tp tin hình nh và c ng dn nu có. hin th hoc thay th mt hình nh ti thi im chy chng trình thì ngi dùng có th dùng phng thc LoadPicture t li giá tr ca thuc tính Picture vi cú pháp nh trong ví d di ây: imgMain.Picture = LoadPicture("NEW.JPG") o Stretch: Khi giá tr ca thuc tính này là TRUE thì iu khin Image s t ng thay i kích thc cho phù hp vi hình nh c hin th. II.8.3. S kin: chut. o Mouse Down: Xy ra khi ngi s dng chng trình nhn gi phím o Mouse Move: Xy ra khi ngi s dng chng trình di chuyn chut. o Mouse Up: Xy ra khi ngi s dng chng trình th phím chut. Trang 55

Visual Basic

II.9 iu khin hình dng (Shape)

Biu tng Shortcut trên hp công cuï iu khin Shape dùng v các hình dng nh: hình ch nht, hình vuông, oval, hình tròn, hình ch nht góc tròn hoc hình vuông góc tròn. Thuc tính Shape cho phép ngi dùng chn 1 trong 6 dng nh ã nêu trên. Sau ây là bng giá tr ca thuc tính này Hình dng Rectangle Square Oval Circle Rounded Rectangle Rounded Square 0 1 2 3 4 5 Giá tr Hng vbShapeRectangle vbShapeSquare vbShapeOval vbShapeCircle vbShapeRoundedRectangle vbShapeRoundedSquare

Hình V.9 di ây minh ha cho các dng ca iu khin Shape

Hình V.9: 6 dng ca iu khin Shape

Ngi dùng có th s dng các thuc tính nh BorderColor, BorderStyle, BorderWidth xác nh màu, dng cng nh dày ca ng biên. Tng t vi các thuc tính FillColor, FillStyle xác nh màu và kiu tô nn.

II.10 iu khin thi gian (Timer)

II.10.1. Khái nim: iu khin Timer áp ng li s trôi i ca thi gian. Nó c lp vi ngi s dng và ta có th lp trình thc hin mt công vic nào ó c sau mt khong thi gian u nhau. Biu tng Shortcut trên hp công cuï Vic a mt iu khin Timer và trong mt biu mu cng tng t nh nhng iu khin khác. ây, ta ch có th quan sát c v trí ca iu khin Timer Trang 56

Visual Basic

ti giai on thit k, khi chy ng dng iu khin Timer coi nh không có th hin trên biu mu. II.10.2. Thuc tính: o Name: tên ca iu khin Timer. o Interval: ây là thuc tính ch rõ s ms gia hai s kin k tip nhau. Tr khi nó b vô hiu hóa, mi iu khin Timer s luôn nhn c mt s kin sau mt khong thi gian u nhau. Thuc tính Interval nhn giá tr trong khong 0...64.767 ms có ngha là khong thi gian dài nht gia hai s kin ch có th là khong mt phút (64.8 giây). o Enabled: nu giá tr là True ngha là iu khin Timer c kích hot và ngc li. II.10.3. S kin: o Timer: xy ra mi khi n thi gian mt s kin c thc hin (xác nh trong thuc tính Interval). II.10.4. S dng iu khin Timer: o Khi to mt iu khin Timer: Nu lp trình viên mun iu khin Timer hot ng ngay ti thi im biu mu cha nó c np thì t thuc tính Enable là TRUE hoc có th dùng mt s kin nào ó t bên ngoài kích hot iu khin Timer. o Lp trình áp ng s kin tr v t iu khin Timer: Ta s a mã lnh ca công viêc cn thc hin vào trong s kin Timer ca iu khin Timer. Sau ây là ví d khi to mt ng h s nh vào iu khin Timer.

Private Sub Timer1_Timer() If Label1.Caption <> CStr(Time) Then Label1.Caption = Time End If End Sub

Thuc tính Interval c thit lp là 500 (tc 0.5 giây). iu khin Timer còn hu ích trong vic tính toán thi gian cho mt công vic nào ó, n mt thi im nào ó thì ta s khi to mt công vic mi hoc ngng mt công vic không còn cn na.

II.11 iu khin danh sách a (DriveListbox), danh sách th mc (DirListbox), danh sách tp tin (FileListbox)

II.11.1. Khái nim: o iu khin DriveListbox trình bày nhng a ca h thng và cho phép ngi dùng chn mt trong nhng a ó. Biu tng shortcut (DriveListbox) trên hp công c o iu khin DirListbox cho phép trình bày nhng th mc và ng dn ti thi im chy ng dng. S dng iu khin này trình bày mt danh sách có th bc ca các th mc, có ngha là ngi dùng có th m mt tài liu t danh sách các tài liu ã có sn. Trang 57

Visual Basic

Biu tng shortcut (DirListbox) trên hp công c o iu khin FileListbox cho phép trình bày nhng tài liu có sn trong th mc hin hành. Bn có th dùng thuc tính Partten xác nh kiu tp tin nào c hin th trong danh sách. Biu tng shortcut (FileListbox) trên hp công cuï Thông thng các ng dng s s dng kt hp c ba loi iu khin trên là DriveListbox, DirListbox và FileListbox. II.11.2. Ví d: Các thuc tính c thit lp ti thi im thit k FileListbox: Partten = "*.doc" DriveListbox, DirListbox FileListbox: FontName = "Vncourier New". Tc là iu khin FileListbox ch hin th các tp tin ca Microsoft Word. on mã di ây c vit trong s kin Load ca biu mu

Private Sub Form_Load() Dir1.Path = "c:\" File1.Path = "c:\" End Sub

Hình V.10 : Ví d v các iu khin a, th mc và tp tin

Trang 58

Visual Basic

on mã trên cho phép xác nh ng dn hin hành ca iu khin DirListbox, FileListbox ti thi im np ng dng là "C:\". Khi chy ng dng ta c nh hình V.10. Khi ta thay i a thì các th mc s thay i theo ó là nhng th mc a hin hành, s thay i cng din ra tng t i vi danh sách các tp tin. Cn chú ý rng i vi a mm và CD thì cn thit phi có a mm hoc CD ti thi im chn a nu không s xy ra li ti thi im chy ng dng.

Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub

Bên trên là nhng on mã áp ng li vic ngi dùng chn vic thay i a và th mc. Trong danh sách các tp tin ta ch hin th nhng file *.doc.

Trang 59

Visual Basic

CHNG 6: LP TRÌNH X LÝ GIAO DIN & HA

Mc tiêu: Chng này gii thiu v cách to menu cng nh mt s hàm x lý ha, nhng thành phn quan trng trong các ng dng chy trên Windows. Hc xong chng này, sinh viên phi nm bt c các vn sau: - S dng menu trong thit k giao din. - S dng các hp thoi trong thit k ng dng. - S dng các phng thc ha cùng vi cách x lý mt s s kin to các ng dng ha. Kin thc có liên quan: - Các cu trúc lp trình trong VB. - Cách thc x lý s kin. Tài liu tham kho: - Microsoft Visual Basic 6.0 và Lp trình C s d liu - Chng 7, trang 99 - Nguyn Th Ngc Mai (ch biên), Nhà xut bn Giáo dc - 2000.

Trang 60

Visual Basic

I. Menu

I.1. Khái nim

Menu là mt loi iu khin trong ó ngi s dng có th la chn các mc t mt danh sách cho trc. Có 2 loi menu: - Menu th xung (Drop-Down Menu): là dng menu thông dng nht. - Menu bt ra (Pop-Up Menu): thng hin th khi ta n nút phi chut.

I.2. Các thuc tính ca Menu

Các thuc tính ca Menu không cha trong ca s Properties mà cha trong Menu Editor. - Caption: Là chui hin th trên menu. - Name: Phi duy nht và d nh. ây là tên nhn bit thành phn nào ca Menu c chn. - Shortcut: dùng thit lp các phím tt (Shortcut key). - WindowList: Dùng trong các ng dng MDI (Multipe Document Interface). ây là ng dng có mt biu mu chính và nhiu biu mu con. Thuc tính này ra lnh cho VB hin th tiêu ca các biu mu con trên menu. - Checked: Nu chn thuc tính này thì s có mt du hin th bên cnh trái, nhng thuc tính này không c áp dng cho nhng mc menu có cha menu con. - Enabled: Nu thuc tính này không c chn thì mc này s b xám i và ngi dùng không th chn. - Visible: Nu thuc tính này không c chn thì mc này s không c hin th. - NegotiatePosition: qun lý v trí gn menu trong trng hp s dng các i tng ActiveX.

I.3. Các s kin

- Click: Xy ra khi ngi s dng chng trình nhp chut vào mt mc nào ó ca Menu.

I.4. Cách to Menu

Menu cng là mt loi iu khin, nhng Windows s kim soát vic v menu. Lp trình viên ch qun lý vic iu hành các s kin mà thôi.

Trang 61

Visual Basic

Hình VI.1 Trình son tho Menu

Menu không cha trong hp công c mà c thit k t trình son tho menu. Trong Visual Basic 6.0 IDE, chn Tools, ri Menu Editor m chng trình này. Ví d: To mt Drop-Down Menu. - To mt án mi. - n Ctrl-E m Menu Editor - Ta s to mt Menu File vi Menu con là Open và Save As. - Trc tiên ta nhp vào &File trong ô Caption và nhp mt tên bt k vào ô Name (chng hn là mfile). Ký t & trc ch F cho bit ch F s là phím tt (n CtrlF) coi nh chn menu File. - Tip theo ta nhp &Open và &Save As. Open và Save As là Sub menu ca File, ta chn Open ri n mi tên sang trái. Tng t i vi Save As.

Hình VI.2 Ví d to Popup Menu

Trang 62

Visual Basic

Tách nhóm menu: Trong trng hp Menu có nhiu mc, ta s tách nhóm Menu tin theo dõi. Chng hn ta thêm vào Menu File mc Exit và tách riêng ra vi Open và Save As. Ta s xen vào gia hai mc Save As và Exit mt mc mi có Caption là "-". Ta có th theo dõi qua hình VI.3.

Hình VI.3 Ví d tách nhóm các

Ví d: To Pop-up menu - S dng li menu ã dùng ví d trc, nhng ta s tt thuc tính Visible ca menu File. - Sau ó, m ca s Code ca ng dng, dùng s kin MousUp, nhp vào on lnh sau:

Private Sub Form_MouseUp (Button As Integer, Shift As _ Integer, X As Single, Y As Single) If Button = vbRightButton Then PopupMenu mfile, vbPopupMenuLeftAlign End If End Sub

- Chy th ng dng, khi ta n chut phi, mt menu s bt ra. - Lnh PopupMenu cho bit tên menu cn bt ra, ó là tên mà ta ã t trong trình son tho MenuEditor, ây là mfile. - K n, ó là tham s xác nh cách hin th menu: vbPopupMenuLeftAlign, vbPopupMenuRightAlign, vbPopupMenuCenterAlign. Sau khi ã thit k xong menu, ta s vit các on mã VB s thi hành mt công vic nào ó tng ng vi mc c chn. Công vic thi hành s c vit bên trong s kin Click ca mc ó.

Trang 63

Visual Basic

II. Hp thoi

II.1. Khái nim

Hp thoi (Dialog Box) là mt trong nhng cách VB dùng giao tip vi ngi dùng. Có 4 loi hp thoi:

- Hp thông ip (Message Box). - Hp nhp (Input Box). - Các hp thoi thông dng (Common Dialog) - Hp thoi hiu chnh (Custom Dialog).

II.2. Hp thông ip

Hp thông ip cng có 2 loi: Loi ch xut thông báo, loi có tng tác vi ngi dùng. II.2.1 Loi ch xut thông báo - Lúc này ta dùng MsgBox nh là mt th tc. - Cú pháp: MsgBox Prompt, Button, Title. Trong ó: Prompt: Chui thông báo s hin th. Button: Các nút nhn s c hin th trên hp thông báo. Title: Chui hin th trên thanh tiêu ca hp thông báo. - Ví d:

Hình VI 4 Hp thông ip

Chng hn ta xây dng mt biu mu dùng hin th tên và im trung bình cui nm ca mt hc sinh khi lp 12. Do ó giá tr im trung bình cng nh h tên hc sinh là không th thay i. Do ó khi ngòi dùng Click vào mt ô Text nào ó, ta s xut thông báo rng giá tr này không th thay i. Trang 64

Visual Basic

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

Sau khi xut thông báo, VB s i ta n vào nút OK hoc Enter. Sau ó VB s thi hành dòng lnh ngay sau dòng lnh MsgBox. ôi khi dòng thông báo quá dài, VB s t ng ct a xung dòng khác, tuy nhiên có khi s không nh mong mun ca lp trình viên. Ta có th thc hin công vic này nh sau:

MsgBox "This is a multi-line " & chr$(10) & " message"

Tùy theo thông s truyn vào MsgBox mà có nhiu loi hp thoi thông ip khác nhau. Hng s vbOKOnly vbOKCancel vbAbortRetryIgnore vbYesNoCancel vbYesNo vbRetryCancel Giá tr 0 1 2 3 4 5 Din gii Ch hin th nút OK . Hin th 2 nút OK và Cancel. Hin th các nút Abort, Retry, và Ignore. Hin th các nút Yes, No, và Cancel. Hin th 2 nút Yes và No. Hin th 2 nút Retry và Cancel.

Các loi biu tng trên hp công c Hng s vbCritical vbQuestion vbExclamation vbInformation Din gii Dùng cho nhng thông báo li tht bi khi thi hành công vic nào ó. Dùng cho nhng câu hi yêu cu ngi dùng chn la. Dùng cho các thông báo ca chng trình. Dùng cho các thông báo cung cp thêm thông tin.

II.2.2 Loi tng tác vi ngi dùng Lúc này MsgBox c dùng nh mt hàm, khi mt nút nào ó trên hp thông báo c n, VB s tr v giá tr ca nút n ó. Cú pháp:

MsgBox (Prompt, Button, Title) As Integer Hng s Giá tr Nút

vbOK vbCancel vbAbort vbRetry vbIgnore vbYes

1 2 3 4 5 6 Trang 65

OK Cancel Abort Retry Ignore Yes

Visual Basic

vbNo

7

No

Vi nhng thông ip quan trng, ta mong mun ngi dùng phi chn la mt trong các xut mà ta a ra trc khi chuyn qua ng dng khác, ta s dùng thông s vbSystemModal.

Trang 66

Visual Basic

II.3. Hp nhp

ây là loi hp thông ip cho phép nhn thông tin t phía ngi s dng. Tuy nhiên trong các ng dng, hp nhp rt ít khi c dùng do: - Ta không có cách nào kim tra thông tin do ngi dùng nhp vào khi mà Enter cha c n. - Thông tin c nhp là rt ít. Sau ây là mt ví d v hp nhp:

Public Sub Main () Dim ReturnString As String ReturnString = InputBox("Nhap vao ten cua ban") End Sub

Giá tr tr v ca hp nhp làVI 5 chui.nhp tên Hình mt Hp

II.4. Các hp thoi thông dng

Có 6 loi hp thoi thông dng: - M tp tin - Lu tp tin - Chn màu - Chn Font - In n - Tr giúp Tuy có 6 loi, nhng khi thit k biu mu, ta ch thy mt công c duy nht ó là CommonDialog. Mun a Common Dialog vào d án, ta chn: Project/Components.../Controls/Microsoft Common Dialog Control 6.0. Sau ó, Common Dialog s xut hin trong hp công c ToolBox. II.4.1 Hp thoi m và lu tp tin Hai hp thoi này có chc nng và th hin nh nhau. C hai hp thoi u hin th danh sách các tp tin, ngi dùng có th duyt qua các a tìm các tp tin. Chúng ch khác nhau phn tiêu và nút nhn. Các thuc tính quan trng: o Name: tên ca Common Dialog. o Filter: ây là mt chui xác nh phn m rng ca tên các tp tin mà hp thoi có th m hay lu. Trang 67

Visual Basic

o FilterIndex: nu có nhiu phn m rng ca tên tp tin c mô t trong thuc tính Filter thì thuc tính này xác nh mc nh loi tp tin nào c chn (là mt s nguyên). o FileName: tr v tên tp tin sau khi ngi s dng hp thoi chn mt tp tin nào ó. o CancelError: nu TRUE thì tr v giá tr li khi ngi dùng chn nút Cancel, mc nhiên giá tr này là False. Phng thc: o ShowOpen: m ra hp thoi m tp tin. o ShowSave: m ra hp thoi lu tp tin. Ví d:

Private Sub Form_Load() On Error GoTo ErrHandler dlgFile.Filter = "All Files (*.*)|*.*|Text Files " & _ "(*.txt)|*.txt|Batch Files (*.bat)|*.bat" dlgFile.FilterIndex = 2 dlgFile.ShowOpen Exit Sub ErrHandler: MsgBox Err.Description End Sub

ví d trên, ta thit k mt hp thoi m tp tin, trong ó các tp tin c hin th theo 3 nhóm tp tin ó là: - All Files: (*.*) - Text Files: (*.txt) - Batch Files: (*.bat) Các nhóm tp tin c th hin trong thuc tính Filter. Mi nhóm tp tin cách nhau bi du phân cách |. Thuc tính FilterIndex = 2 tc là khi hp thoi Open c m lên, thì loi tp tin hin th mc nh là Text Files. Sau khi ã chn mt tp tin và nhn nút Open, ta s dng thuc tính FileName nhn v tên tp tin ã chn. Khi ta chn thuc tính CancelError là TRUE, thì khi ngi dùng n nút Cancel trên hp thoi, ta s nhn c mt li và s có cách x lý li này. Ta chn phng thc ShowOpen hin th hp thoi m tp tin.

Trang 68

Visual Basic

Hình VI.6 Hp thoi m tp tin

Các thuc tính cng tng t i vi hp thoi lu tp tin, ta ch cn thay i tiêu ca Dialog và dùng phng thc ShowSave. Di ây là minh ha cho hp thoi lu tp tin.

Hình VI.7 Hp thoi lu tp tin

Trang 69

Visual Basic

II.4.2 Hp thoi chn màu ây là hp thoi cho phép ngi dùng chn và hin th các màu có sn trong bng màu ca Windows cng nh thit lp thêm nhiu màu mi. Mt thuc tính quan trng i vi hp thoi chn màu ó là thuc tính Color, thuc tính này tr v giá tr ca màu ã c chn. Ta s dùng phng thc ShowColor hin th hp thoi chn màu.

Hình VI.8 Hp thoi chn màu

Trong mt s ng dng, ta s dùng hp thoi chn màu thay i giá tr màu ca các iu khin trong mt s trng hp nào ó. Ví d thay i màu nn ca iu khin TextBox trong ví d di ây:

Trang 70

Visual Basic

Hình VI.9 Ví d s dng hp thoi chn mu

Ta s thit k mt nút nhn nh bên cnh iu khin TextBox, nút nhn này cho phép ngi s dng chn màu nn ca TextBox. Ta có on mã lnh sau:

Private Sub Command2_Click() On Error GoTo ErrHandler CommonDialog1.ShowColor Text1.BackColor = CommonDialog1.Color ErrHandler: CommonDialog1.ShowColor End Sub

Trc khi chy chng trình cn xác nh thuc tính CancelError = TRUE. II.4.3 Hp thoi chn Font ch Cho phép ngi dùng chn Font màn hình, máy in hay c hai. Khi dùng hp thoi chn Font ta phi dùng thuc tính Flags quy nh loi Font nào s c hin th.

Hình VI.10 Hp thoi Font

Thuc tính Color FontBold Gii thích Lu gi giá tr ca màu c chn TRUE nu ngi dùng chn ch m (Bold) và FALSE nu Trang 71

Visual Basic

FontItalic FontStrikeThru FontUnderLine FontName Max Min FontSize

ngc li. TRUE nu ngi dùng chn ch nghiêng (Italic) và FALSE nu ngc li. TRUE nu chn ch gch ngang các ký t. TRUE nu chn ch gch di Tùy ý Kích c ln nht ca Font c hin th Kích c nh nht ca font c hin th Kích c ca Font c chn

Các giá tr ca thuc tính Flags: Hng cdlCFPrinterFonts cdlCFScreenFonts cdlCFBoth cdlCFScalableOnly Giá tr &H2 &H1 &H3 &H20000 Hiu qu Ch hin th font máy in Ch hin th font màn hình Ch hin th font màn hình và font máy in Hin th font t l nh là fonts TrueType

Nu mun chn màu cho Font, ta thêm 256 vào giá tr ca thuc tính Flags. Nu không có iu này, ta ch thy tên Font, kiu Font và kích c Font mà thôi. m hp thoi chn Font, ta s dng phng thc ShowFont. II.4.4 Hp thoi in n ây là hp thoi cho phép xác lp các thông tin v máy in chng hn nh bao nhiêu d liu c in, máy in s hot ng nh th nào... Hp thoi in n, nó tr v 3 thuc tính thông dng: Copies, FromPage và ToPage.

Hình VI.11 Hp thoi in n

Thuc tính Copies FromPage Max

Gii thích S bn in S th t ca trang bt u S bn in ti a cho phép Trang 72

Visual Basic

Min PrinterDefault

ToPage

S bn in ti thiu cho phép Nu gán thành TRUE, mi thay i mà ngi dùng thc hin s c ghi li thành các thay i trên h thng và có nh hng n các ng dng khác nu có s dng máy in. S th t ca trang in cui cùng

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

III. X lý các s kin chut và bàn phím

III.1 S kin chut

Biu mu hoc iu khin có th nhn bit s kin chut khi có con tr chut i ngang qua. Có 3 s kin chut ch yu, ó là S kin MouseDown MouseUp MouseMove Gii thích Xy ra khi ngi s dng n chut (chut trái hoc phi) Xy ra khi ngi s dng th mt nút chut bt k Xy ra khi con tr chut di chuyn n mt im mi trên màn hình.

Các tham s Tham s Button Shift X, Y Gii thích Cho bit phím chut nào c n Cho bit SHIFT hay CTRL hay ALT c n Xác nh v trí ca con tr chut i vi h ta ca iu khin

Ví d 1: S dng s kin MouseDown v các on thng ni tip nhau mi khi ta dùng chut chm mt im trên biu mu. Ta có th thc hin iu ó vi on mã lnh x lý s kin Form_MouseDown nh sau:

Private Sub Form_MouseDown(Button As Integer, & _ Shift As Integer, X As Single, Y As Single) Line -(X, Y) End Sub

Trang 73

Visual Basic

Ví d 2: S dng s kin MouseUp hin th mt thông ip cho bit nút chut nào va c th. S kin Form_MouseUp c x lý:

Private Sub Form_MouseUp (Button As Shift As Integer, X As Single, If Button = 1 Then Print "Ban vua tha End If If Button = 2 Then Print "Ban vua tha End If If Button = 4 Then Print "Ban vua tha End If End Sub Integer, & _ Y As Single) phim chuot trai" phim chuot phai" phim chuot giua"

Ví d 3: S dng s kin MouseMove v các ng tròn liên tc trên biu mu. S kin Form_MouseMove c x lý:

Private Sub Form_MouseMove(Button As Integer, & _ Shift As Integer, X As Single, Y As Single) Circle (X, Y), 50 End Sub

Trang 74

Visual Basic

Hình VI.13 Ví d v MouseMove

Vi ví d 3 ta nhn thy rng: s kin MouseMove không nht thit phi xy ra ng vi mi Pixel khi con tr chut i qua. Thc ra mi n v thi gian nào ó, h iu hành phát ra mt s thông ip. ây, ta v ng tròn ng vi s kin MouseMove, nu ngi dùng di chuyn chut chm, thì các ng tròn s c v sát nhau và ngc li nu chut c di chuyn nhanh. Hiu chnh con tr chut Ta có th dùng thuc tính MousePointer hin th mt biu tng, con tr màn hình hay con tr chut ã c hiu chnh. Di ây là các giá tr ca thuc tính MousePointer:

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

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

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

Visual Basic

ccCustom

99

Custom icon specified by the MouseIcon property.

III.2 S kin bàn phím

Bàn phím cng có 3 s kin, ó là s kin KeyPress (khi mt phím có mã ASCII bt k c n), KeyDown (khi mt phím bt k c n), KeyUp (khi mt phím bt k c th) Ch có iu khin ang có Focus mi bt s kin bàn phím. Còn i vi biu mu, nó ch bt c s kin bàn phím mi khi nó ã c kích hot và không có bt k iu khin nào trên nó có Focus. Tuy nhiên ta có kh khc phc iu này nu nh gán giá tr thuc tính KeyPreview ca biu mu là True, biu mu s nhn mi s kin bàn phím ca mi iu khin t trên nó, iu này hu ích khi ta mun thc hin cùng mt công vic nào ó cho mt phím c n mà không quan tâm rng Focus ang thuc iu khin nào. Các s kin KeyDown, KeyUp có th phát hin mt s tình hung mà s kin KeyPress không phát hin: - Khi ngi dùng bm mt t hp phím SHIFT, CTRL và ALT. - Phím nh hng. - PAGEUP và PAGEDOWN. - Phân bit c phím s bên phi bàn phím và phím s bên trái bàn phím. - áp ng khi th phím. - Phím chc nng không trùng vi menu. Các s kin bàn phím là không loi tr nhau. Tc là mt phím c n thì có th là c hai s kin KeyPress và KeyDown cùng c phát ra. Nhng nu là mt phím mà KeyPress không phát hin c thì ch có KeyDown và KeyUp xy ra. Thuc tính KeyPreview ôi khi ta mun tt c các iu khin trên Form nhn c s kin KeyPress ch không phi ch có iu khin ang nhn con tr (Focus), ta s phi s dng thuc tính KeyPreview. Khi chúng ta thit k mt Form, giá tr mc nh ca thuc tính này s là False, khi ó bt k mt s kin bàn phím nào cng u c gi n iu khin ang gi quyn iu khin. Tuy nhiên nu giá tr ca thuc tính là True thì Form s là ni nhn mi s kin bàn phím. Sau ây là ví d v iu này:

Private Sub Form_KeyPress (KeyAscii As Integer) ' Gi iu khin n textbox u tiên txtForward.SetFocus txtBackward.Text = Chr(KeyAscii) & txtBackward.Text txtAscii.Text = txtAscii.Text & CStr(KeyAscii) & "," End Sub

Trang 76

Visual Basic

Hình VI.15 Các s kin bàn phím

Trong ví d trên, nu nh giá tr ca thuc tính KeyPreview là False thì các TextBox Backward và Ascii không th nhn c giá tr.

IV. X lý ha và giao din

IV.1 Hin th hình nh

Bi vì h iu hành Windows là h iu hành s dng giao din ha, do ó mt phn quan trng trong ng dng ca ta là cách thc hin th hình nh trong ng dng ca mình. VB cung cp cho chúng ta 4 loi iu khin hin th và qun lý hình nh: Picture Box, Image, Shape và Line. IV.1.1 S dng Picture Box Cách dùng chính ca iu khin Picture Box là hin th hình nh. Hình nh mc nh mà Picture Box hin th có tên c xác nh bi thuc tính Picture (có th bao gm c ng dn). Ta cng cn chú ý mt iu ó là i tng Form cng có th hin th mt hình nh xem nh là nh nn thông qua thuc tính Picture. Thuc tính AutoSize ca iu khin Picture Box quy nh kích thc ca iu khin có th thay i mt cách t ng hay không? Nu giá tr ca thuc tính này là True, thì kích thc ca iu khin s thay i theo kích thc ca hình nh mà nó cha. Tuy nhiên s thay i này có th làm ng dng ca chúng ta tr nên xu i do s thay i kích thc ca iu khin Picture Box s không quan tâm n các v trí ca các iu khin khác cùng có trên biu mu. Tt hn ht là chúng ta nên th qua tt c các hình nh có th hin th ti thi im thit k quy nh kích thc ca iu khin cho hp lý. Trang 77

Visual Basic

Hn th na, có th thay i hình nh hin th bên trong Picture Box bng cách s dng phng thc LoadPicture thay i giá tr ca thuc tính Picture. Ngoài ra ta có th dùng Picture Box nh mt vt cha các iu khin khác. Cng nh iu khin Frame, ta có th t các iu khin khác bên trong Picture Box. Ta thng s dng Picture box cha các iu khin Label hin th các thông tin và trng thái ca ng dng. Mt cách dùng khác ca Picture box ó là xem nh mt khung v trng và ta dùng các phng thc Circle, Line, PSet hay Point v lên trên iu khin này. IV.1.2 S dng Image Control Image control cng nh iu khin Picture Box nhng ch dùng hin th hình nh. Nó không th dùng làm vt cha và cng không có mt s thuc tính nh iu khin Picture Box. Các phng thc dùng hin th, thay i hình nh cng nh iu khin Picture Box, tuy nhiên thuc tính quy nh vic kích thc thay i mt cách t ng là thuc tính Stretch. Mt trong nhng ng dng ch yu ca iu khin Image Control ó là s dng nh mt nút lnh, ây là mt cách thc tin li thit k nút lnh cha hình nh thay vì là các câu vn bn. Khi s dng Image Control nh mt nút lnh, ta nên nh rng iu khin này s không th có trng thái n xung khi c Click, vì th ta nên thay i hình nh hin th bi Image Control cho bit rng nút lnh ã c n.

IV.2 X lý ha

IV.2.1 Ta màn hình Góc trái trên ca màn hình có ta là (0,0) có ngha là X = 0 và Y = 0. Nh vy tc là khi di chuyn sang phi màn hình thì X tng lên cng nh di chuyn xung di thì Y tng lên. Tuy nhiên VB ch cho phép ta v trên biu mu hay hp hình (picture box). Khi ó h ta s c gn vi tng iu khin. Ta thng s dng 2 h ta ch yu sau: Twips và Pixel. Twips: ây là h ta mc nh dùng cho biu mu. Mi im s bng 1/567 cm. ây là h ta không b nh hng bi thit b, kt qu v s nh nhau trên màn hình VGA chun, trên máy in hay trên màn hình có phân gii cao khác. Pixel: ây là h ta ph bin nht, mi mt im trên màn hình s bng chính xác vi mt Pixel, nh vy khi s dng h ta này s giúp cho các ng dng ha thc hin c nhanh hn vì không phi thông qua quá trình i h ta . IV.2.2 Các phng thc ha Các iu khin c v lên biu mu lúc thit k nhng các phng thc ha cho phép v trc tip khi ng dng thi hành. Phng thc PaintPicture Phng thc PaintPicture cho phép sao chép nhanh các hình nh t biu mu, hp hình và máy in. Cú pháp: Trang 78

Visual Basic

object.PaintPicture picture, x1, y1, width1, height1, x2, y2, width2, height2, opcode Object Picture x1, y1 Width1 Height1 x2, y2 Width2 Height2 Opcode Object là i tng mà phng thc s làm vic, nó có th là biu mu, hp hình hay i tng máy in. Hình nh ngun s c v lên i tng phi c ch rõ bi thuc tính Picture ca biu mu hoc hp hình. Giá tr ch nh v trí ca hình nh trên i tng. Thuc tính ScaleMode xác nh h ta nào c s dng. Giá tr xác nh rng ca hình nh, nu b qua thì mc nh là rng ca nh ngun. Giá tr xác nh cao ca hình nh, nu b qua thì mc nh là cao ca nh ngun. Các giá tr xác nh hình nh s c v li t v trí nào. Nu b qua thì giá tr mc nh là 0, tc toàn b hình nh c v li. Tng t nh Width1, nhng ây là tác ng n nh ngun. Tng t nh Height1, nhng ây là tác ng n nh ngun. ây là tùy chn và ch có tác dng vi nh Bitmap.

Ví d: Thit k chng trình sao cho khi ngi s dng va di chuyn va nm gi phím chut thì mt hình nh s c v li ta mi.

Dim re Private Sub Form_Load() re = False End Sub Private Sub Form_MouseDown(Button As Integer, & _ Shift As Integer, X As Single, Y As Single) re = True End Sub Private Sub Form_MouseMove(Button As Integer, & _ Shift As Integer, X As Single, Y As Single) If re Then Form1.PaintPicture Image1.Picture, X, Y, & _ Image1.Width, Image1.Height End If End Sub Private Sub Form_MouseUp(Button As Integer, & _ Shift As Integer, X As Single, Y As Single) re = False End Sub

Trang 79

Visual Basic

Qua ví d trên ta thy phng thc PaintPicture cho phép sao chép nhanh mt nh ngun trên các i tng khác .

Hình VI.16 Phng thc PaintPicture

Phng thc PSet Phng thc này thao tác trên tng im và có công dng gán mt màu nào ó cho mt im trên i tng. Cú pháp : Object.PSet [Step] (x, y), [color] Object Step (x, y) Color i tng mà phng thc làm vic. Tùy chn. Xác nh mi quan h vi ta X và Y hin ti. Ta ca im. Màu ca im ó.

iu khin hình dáng ây là iu khin cho phép v các hình n gin lên mt biu mu trong khi thit k. ây là mt iu khin rt n gin, ta ch quan tâm n các thuc tính sau: - Shape: Quy nh hình v là hình oval, ch nht ... - BorderStyle: Quy nh kiu ng v. - BackStyle: Cho bit dng tô màu c hay không. - BorderWidth: ây là rng ca ng v. V ng tròn, cung tròn và Ellipse VB cung cp phng thc Circle cho phép ta v ng tròn, ng cong, cung tròn, ellipse ... v mt ng tròn ta dùng phng thc Circle do VB cung cp. Cú pháp: Object.Circle (X, Y), Radius, [color] Trang 80

Visual Basic

Object (x, y) Radius Color

i tng mà phng thc làm vic. Ta tâm ng tròn. Bán kính ca ng tròn Màu t cho ng tròn. .

v mt cung tròn, ta cng s dng phng thc Circle, tuy nhiên ta cn cung cp thêm 2 thông s ó là im bt u và im kt thúc ca cung tròn. Thông thng chúng ta quen s dng n v o góc là , tuy nhiên i vi VB ta cn phi a vào n v là Radians. Ví d v mt cung tròn tâm (1000, 1500), bán kính 500 bt u t góc o 60 n góc 90o ta dùng on lnh nh sau:

Const pi = 3.1415 Circle (1000, 15000), 500, , pi/3, pi/2

v mt Ellipse, ta cung cp thêm thông s cui cùng (thông s Aspect) ó là s co giãn ca ng tròn theo chiu ngang. Cú pháp tng quát ca phng thc Circle: object.Circle [Step] (x, y), radius, [color, start, end, aspect]

Chng 7 : TP TIN

Mc tiêu: Chng này gii thiu v cách thc truy cp h thng tp tin ca Windows trong VB, thao tác thng gp trong các ng dng chy trên Windows. Hc xong chng này, sinh viên phi nm bt c các vn sau: - S dng mô hình i tng h thng tp tin thao tác vi a, th mc, tp tin trong Windows. - S dng các hàm xut/nhp tp tin truy xut tp tin vn bn, tp tin nh phân, tp tin truy xut ngu nhiên. Kin thc có liên quan: - Các cu trúc lp trình trong VB. - Cách thc t chc h thng tp tin ca h iu hành Windows (9X, 2000, XP...) Tài liu tham kho: - Microsoft Visual Basic 6.0 và Lp trình C s d liu - Chng 6, trang 88 - Nguyn Th Ngc Mai (ch biên), Nhà xut bn Giáo dc - 2000. Trang 81

Visual Basic

I. Mô hình File System Object (FSO)

Cung cp cho ng dng ca ta các kh nng nh to mi, thay i, xóa, di chuyn các th mc, hoc kim tra xem mt th mc nào ó có tn ti hay không... Ngoài ra chúng ta cng có th ly c các thông tin liên quan n th mc nh tên, ngày to, ngày sa i gn nht... Mô hình FSO ch h tr truy xut trc tip tp tin dng vn bn thông qua i tng TextStream, nó cha h tr cho tp tin nh phân, do ó vi tp tin nh phân ta phi dùng lnh Open vi c Binary. i tng Drive Folder File FileSystemObject TextStream Gii thích Cho phép thu thp thông tin v a, bao gm c các a chia s qua mng LAN, CD-ROM... Cho phép to, xóa, di chuyn và thu nhn các thông tin h thng trên th mc. i tng cho phép thao tác trên tp tin. Các thuc tính và phng thc cho phép thao tác trên tp tin, th mc và a. Cho phép c và ghi tp tin dng vn bn (dng Text).

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

I.1 To i tng FileSystemObject

Có hai cách, khai báo mt bin kiu FileSystemObject hoc dùng phng thc CreateObject ca lp trình hng i tng. Cách 1:

Dim fso As New FileSystemObject

Cách 2:

Set fso = CreateObject("Scripting. FileSystemObject")

Trong ó Scripting là tên th vin và FileSystemObject là tên i tng.

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

Dùng các phng thc GetDrive, GetFolder, GetFile. Ví d to mt handle tr n tp tin "d:\tqdinh\text.txt" ta dùng các dòng lnh sau:

Dim Set fso f As = New FileSystemObject, f As File fso.GetFile("d:\tqdinh\text.txt")

Hoc ta có th to mi th mc, tp tin thông qua các phng thc CreateFolder, CreateTextFile. Ngoài ra ta có th xóa mt th mc hoc mt tp tin thông qua DeleteFolder, DeleteFile. i tng FileSystemObject còn có rt nhiu phng thc, ta có th xem qua ca s ObjectBrowser. Trang 82

Visual Basic

Hình VII.1 Ca s ObjectBrowser vi i tng FileSystemObject

I.3 Thông tin v a

Các thông tin này c truy xut thông qua các thuc tính ca i tng File. - TotalSize: tng dung lng ca a tính bng Byte. - AvailableSpace, FreeSpace: dung lng còn trng ca a. - DriveLetter: ký t a. - DriveType: loi a ( tháo lp hay c nh, mng, CD-ROM, RAM). - FileSystem: a c qun lý bi bn FAT nào: FAT16, FAT32, NTFS...

I.4 Làm vic vi th mc

ây là các phng thc có cách s dng rt n gin, vì th ta ch xét qua phng thc nào ng vi tác v gì (công vic gì) ch không i sâu phân tích tng phng thc. Phng thc FileSystemObject.CreateFolder To th mc FileSystemObject.DeleteFolder Xóa th mc Folder.Delete FileSystemObject.MoveFolder Di chuyn th mc Folder.Move FileSystemObject.CopyFolder Sao chép th mc Folder.Copy Folder.Name Ly tên th mc Kim tra th mc có tn ti trên FileSystemObject.FolderExists Trang 83 Tác v

hay hay hay

Visual Basic

a hay không Tr v i tng Folder Ly tên ca th mc cha Ly tên ca th mc h thng

FileSystemObject.GetFolder FileSystemObject.GetParentFolderName FileSystemObject.GetSpecialFolder

I.5 Làm vic vi tp tin

M tp tin ghi d liu o To tp tin mi: s dng phng thc CreateTextFile.

Dim fso As New FileSystemObject fso.CreateTextFile("d:\home\lhbao\test.txt")

o M tp tin ghi vi c ForWriting, lúc này ta s dng phng thc OpenAsTextStream ca i tng File cùng vi i tng TextStream thao tác. Ví d:

Dim fso As New FileSystemObject, f As File Dim ts As TextStream fso.CreateTextfile("d:\home\lhbao\test.txt") Set f = fso.GetFile("d:\home\lhbao\test.txt") Set ts = f.OpenAsTextStream(ForWriting)

o Ghi d liu lên tp tin: ta có th ghi d liu vào tp tin ang m bng phng thc Write hay WriteLine ca i tng TextStream. S khác bit gia hai phng thc này là s có thêm ký t xung dòng nu nh s dng WriteLine. Nu mun ghi mt dòng trng vào tp tin ang m, ta s dng phng thc WriteBlankLines. Cú pháp: ts là i tng TextStream ts.Write(s) ` Ghi chui s lên tp tin ts.WriteLine(s) ` Ghi chui s lên tp tin ts.WriteBlankLines(N) ` Ghi N dòng trng lên tp tin M tp tin c d liu o M tp tin c vi c ForReading, lúc này ta s dng phng thc OpenAsTextStream ca i tng File cùng vi i tng TextStream thao tác. Ví d:

Dim Dim Set Set fso As New FileSystemObject, f As File ts As TextStream f = fso.GetFile("D:\Home\lhbao\Test.txt") ts = f.OpenAsTextStream(ForReading)

o c d liu t tp tin: Ta có ba phng thc c d liu t mt tp tin vn bn, ó là Read, ReadLine và ReadAll. Ba phng thc này cho phép c mt s ký t, mt dòng ca vn bn và toàn b vn bn. Trong khi c ni dung ca tp tin, ta có th s dng phng thc Skip, SkipLine nhy n phn t d liu mi. Cú pháp: ts là i tng TextStream ts.Read(N) As String: c N ký t t tp tin

ts.ReadLine As String ts.ReadAll As String

Trang 84

Visual Basic

óng tp tin: S dng phng thc Close ca i tng TextStream. Di chuyn, sao chép và xóa tp tin S khác bit gia di chuyn và sao chép mt tp tin ó là tp tin ngun có còn tn ti th mc ngun hay không. ng vi mt thao tác, ta cng có hai phng thc thc hin, ó là các phng thc thuc i tng FileSystemObject và i tng File. Tác v Di chuyn mt tp tin Sao chép mt tp tin Xóa mt tp tin Phng thc FileSystemObject.MoveFile File.Move FileSystemObject.CopyFile File.Copy FileSystemObject.DeleteFile File.Delete hoc hoc hoc

Các phng thc ng vi thao tác di chuyn và sao chép tp tin cn có i s là ng dn n ni cha tp tin ích.

I.6 Ví d

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

Trang 85

Visual Basic

TextBox: txtNoidung

o Thêm vào iu khin CommonDialog vào ng dng vi Name: dlgFile. o S kin mnuNew_Click c x lý:

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

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

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

o i vi mnuSave_Click:

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

Trang 86

Visual Basic

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

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

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

o S kin mnuExit_Click:

Private Sub mnuExit_Click() End End Sub

o Lu d án và chy chng trình.

II. Hàm I/O và lnh x lý tp tin

Có ba kiu tp tin: Tun t, ngu nhiên và nh phân - Tun t (Sequential): ây là cách thc truy cp n tp tin cho kiu c và ghi thành theo các khi liên tc nhau. - Ngu nhiên (Random): c và ghi các tp tin vn bn hoc nh phân có cu trúc theo các mu tin có dài c nh. - Nh phân (Binary): c và ghi các tp tin có cu trúc thay i. Các hàm và dòng lnh thao tác trên các kiu truy cp tp tin, công dng ca tng hàm s c xét n trong phn sau: Statements & Functions Close Get Input( ) Input # Line Input # X X X Trang 87 Sequential X Random X X Binary X X X

Visual Basic

Open Print # Put Write #

X X

X

X

X X

X

II.1. Tp tin tun t

II.1.1 M tp tin Cú pháp:

Open pathname For [Input|Output|Append] _ As filenumber [Len = buffersize]

Nu ta dùng tham s Input thì tp tin (có ng dn là pathname) ó phi tn ti ri, nu không s gây ra li và tham s này c dùng trong trng hp m tp tin c. Còn các tham s Output hoc Append s to mi tp tin và sau ó m nó. Tham s Len s ch ra s ký t trong vùng m khi sao chép d liu gia tp tin và chng trình x lý. Filenumber là s hiu ca tp tin c m, nó mang giá tr kiu nguyên và nm trong khong t 1 n 511. ly s hiu tp tin mi hp l, ta s dùng hàm FreeFile. II.1.2 c ni dung tp tin o Hàm Input Cú pháp: Input (number, filenumber) As String: hàm này tr v number ký t ca tp tin có s hiu c ch nh bi filenumber. o Lnh Input # Cú pháp: Input # filenumber, varlist: lnh này s c ni dung ca tp tin vào các bin c ch bi varlist. Lu ý rng lnh này ch s dng vi các tp tin c ghi bi lnh Write #. o Lnh Line Input # Cú pháp: Line Input # filenumber, varname: lnh này s c ni dung ca mt dòng trong tp tin tun t vào bin chui. II.1.3 Ghi d liu lên tp tin Ta có 2 câu lnh ghi d liu lên tp tin là Write # và Print #. o Câu lnh Write #: Cú pháp: Write # filenumber, [outputlist]: lnh này ghi d liu vào tp tin tun t, ni dung ghi mi cha trong danh sách bin outputlist, các phn t ca danh sách cách nhau bi du phy. Nu ta không c t outputlist thì mt dòng trng s c ghi vào tp tin. o Câu lnh Print#: Cú pháp: Print # filenumber, [outputlist]: tng t nh Write# nhng d liu có th nh dng khi ghi lên tp tin. Trang 88

Visual Basic

i s outputlist có th là:

[{Spc(n) | Tab[(n)]}] [expression] [charpos]

Trong ó: - Spc(n): dùng xen khong trng vào tp tin vi n là s khong trng. - Tab(n): dùng xác nh ct bt u ghi d liu trong vùng ghi vi n là s th t ct. Dùng Tab không i s ch v trí bt u ca vùng ghi tip theo. - Expression: biu thc chui hoc biu thc s. - Charpos: ch nh v trí ca ký t k tip. Trong ó: du ; xác nh d liu mi s ghi k tip ký t cui cùng trc ó. Tab(n) xác nh chính xác ct ghi d liu hay Tab ch ra v trí ca d liu cn ghi vào là vùng ghi k tip. Nu tham s này b b qua, d liu s c ghi bt u t dòng k tip. II.1.4 óng tp tin Cú pháp: Close filenumberlist: óng li các tp tin c m vi các s hiu c mô t trong filenumberlist, filenumberlist có dng sau:

[[#]filenumber] [, [#]filenumber] . . .

II.1.5 Ví d

Open "TESTFILE" For Output As #1 ' M tp tin ghi. Print #1, "This is a test" ' Ghi chui vào tp tin. Print #1, ' Ghi mt dòng trng vào tp tin. Print #1, "Zone 1"; Tab ; "Zone 2" ' To hai vùng ghi. ' Phân cách hai chui bi khong trng. Print #1, "Hello" ; " " ; "World" Print #1, Spc(5) ; "5 leading spaces " ' To 5 khong trng Print #1, Tab(10) ; "Hello" ' ghi chui ti ct th 10. ' Gán giá tr thuc kiu Boolean, Date, Null và Error. Dim MyBool, MyDate, MyNull, MyError MyBool = False : MyDate = #February 12, 1969# : MyNull = Null MyError = CVErr(32767) Print #1, MyBool ; " is a Boolean value" Print #1, MyDate ; " is a date" Print #1, MyNull ; " is a null value" Print #1, MyError ; " is an error value" Close #1 ' óng tp tin

Và sau ây là ni dung ca tp tin TESTFILE sau khi thc thi chng trình:

Trang 89

Visual Basic

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

ng dng sau ây cho phép c ni dung 1 tp tin c la chn. o Thit k chng trình có giao din:

ây ta có s dng iu khin danh sách a, th mc, tp tin la chn tp tin cùng vi 1 TextBox hin th ni dung. o Các s kin c x lý nh sau:

Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub Command1_Click() Dim fname As String, str As String fname = Dir1.Path + "\" + File1.filename Open fname For Input As #1 Do While Not EOF(1) Line Input #1, str Text1.Text = Text1.Text + str + vbCrLf Loop Close #1 End Sub

o Lu d án và chy chng trình, ta c kt qu: Trang 90

Visual Basic

II.2. Tp tin truy xut ngu nhiên

II.2.1 M tp tin Cú pháp

Open pathname [For Random] As filenumber _ [Len = RecLength]

Bi vì tham s Random là mc nh, do ó t khóa For Random là không cn thit. Tham s Len cn mt kích thc úng ca mu tin, nu nh hn thì s gây ra li, ln hn s gây lãng phí không gian a. Filenumber: s hiu tp tin khi m (có ng dn là pathname) II.2.2 c ni dung tp tin o Câu lnh Get: Cú pháp: Get [#] filenumber, [recnumber], varname: lnh này s c ni dung ca mu tin th recnumber trong tp tin vào bin mu tin varname, trong ó mu tin u tiên có s th t là 1. II.2.3 Ghi d liu lên tp tin o Câu lnh Put: Cú pháp: Put [#] filenumber, [recnumber], varname: Lnh này s thay th hoc thêm mi mu tin vào tp tin. Nu nh s th t mu tin (recnumber) ch n mu tin ã tn ti, thì ni dung ca mu tin ó c thay th. thêm mi mu tin, s th t mu tin cn có giá tr là s mu tin hin có ca tp tin cng thêm 1. II.2.4 óng tp tin Cú pháp: Close filenumberlist: óng li các tp tin c m vi các s hiu c mô t trong filenumberlist, filenumberlist có dng sau:

[[#]filenumber] [, [#]filenumber]...

II.2.5 Ví d Giá s ta có khai báo 1 mu tin nh sau:

Type Hanghoa

Trang 91

Visual Basic

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

o Ghi d liu lên tp tin có cu trúc là các mu tin nh trên

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

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

o c d liu t tp tin có cu trúc nh trên:

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

Kt qu khi c d liu nh sau:

Trang 92

Visual Basic

Chng 8: CÁC KHÁI NIM C BN V C S

D LIU

Mc tiêu: Chng này gii thiu v mt s khái nim trong lp trình c s d liu vi VB, nhng vn cn thit khi thit k các ng dng truy cp c s d liu. Hc xong chng này, sinh viên phi nm bt c các vn sau: - Mt s khái nim khi lp trình c s d liu trong VB. - Phân bit DAO, RDO, ADO. - S dng môi trng phát trin VB tng tác vi c s d liu. Kin thc có liên quan: - Câu lnh SQL truy vn d liu. Tài liu tham kho: - Microsoft Visual Basic 6.0 và Lp trình C s d liu - Chng 18, trang 447 - Nguyn Th Ngc Mai (ch biên), Nhà xut bn Giáo dc ­ 2000.

Trang 93

Visual Basic

I. C s d liu

I.1. Khái nim

C s d liu là mt kho cha thông tin. Có nhiu loi c s d liu, nhng trong khuôn kh bài ging này ta ch quan tâm n các ng dng lp trình liên quan n c s d liu quan h. Mt c s d liu quan h: o Cha d liu trong các bng, c cu to bi các dòng còn gi là các mu tin, và ct còn gi là các trng. o Cho phép ly v (hay truy vn) các tp hp d liu con t các bng. o Cho phép ni các bng vi nhau cho mc ích truy cp các mu tin liên quan vi nhau cha trong các bng khác nhau.

I.2. B máy (Engine) c s d liu

Chc nng c bn ca mt c s d liu c cung cp bi mt b máy c s d liu, là h thng chng trình qun lý cách thc cha và tr v d liu. Chng hn Microsoft Jet là b máy c s d liu c s dng khi truy cp d liu Access.

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

Các c s d liu c cu thành t các bng dùng th hin các phân nhóm d liu. Chng hn, nu ta to mt c s d liu qun lý các tài khon trong công vic kinh doanh, ta phi to mt bng cho Khách hàng, mt bng cho Hóa n và mt bng cho Nhân viên. Bng có cu trúc nh ngha sn và cha d liu phù hp vi cu trúc này. o Bng: cha các mu tin là các mu d liu riêng r bên trong phân nhóm d liu. o Mu tin: cha các trng. Mi trng th hin mt b phn d liu trong mt mu tin. Ví d nh mi mu tin th hin mt mc trong danh b a ch cha các trng tên và h, a ch, thành ph, s in thoi... Ta có th dùng chng trình Visual Basic tham chiu và thao tác vi c s d liu, bng, mu tin và các trng.

I.4. Tp mu tin (Recordset)

Recordset là mt cu trúc d liu th hin mt tp hp con các mu tin ly v t c s d liu. V khái nim, nó tng t nh mt bng nhng có thêm mt vài thuc tính riêng bit quan trng. Các Recordset c th hin nh các i tng. Cng nh các i tng khác trong Visual Basic, các i tng recordset có các thuc tính và phng thc riêng.

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

Visual Basic cung cp kèm theo nó mt b máy c s d liu có th hiu c d liu ca Microsoft Access gi là Joint Engine Technology (JET). JET là mt b Trang 94

Visual Basic

máy truy cp c s d liu hng i tng và nó là mt phn không th thiu c ca Visual Basic. Phiên bn ca JET i kèm vi VB 6.0 là min phí ngha là VB có th truy xut trc tip c s d liu ca Microsoft Access. Giao din VB truy xut JET có tên là Data Access Objects (DAO). JET là mt b máy c s d liu tuyt vi cho các ng dng vn phòng chy trên máy n, nhng hiu sut ca nó gim áng k khi s lng ngi dùng tng lên và c s d liu c m rng. Vì iu này JET không phi là mt gii pháp ti u cho các ng dng c s d liu nhiu ngi dùng. Cho n nay ngi ta cha có mt thng kê chính xác c kích thc d liu ti a hay s lng ngi dùng ti a ca JET nhng nhìn chung JET b gii hn nhiu hn so vi các gii pháp khác trong môi trng a ngi dùng. Tuy vy, JET là im khi u tt nht cho ngi lp trình VB bi vì s n gin ca nó. Khi kích thc d liu tng lên, ngi lp trình bao gi cng mun xây dng mt ng dng Khách/Ch (Client/Server) có kh nng bo mt cao và linh hot. Vì l ó, Microsoft h tr trong VB truy cp các c s d liu quan h c thông dch bi chun Open Database Connectivity (ODBC). ODBC là mt k thut cho phép truy cp các c s d liu quan h cao cp nh SQL SERVER hay ORACLE. Tuy nhiên, ODBC cng có th c s dng truy cp các c s d liu nh t chc bng Microsoft Access hay Foxpro, thm chí các c s d liu máy ch nh IBM DB2. Visual Basic s dng giao din i tng Remote Data Objects (RDO) truy cp ODBC. DAO và RDO là nhng k thut h tr vic truy xut n các c s d liu quan h. Tuy nhiên, Microsoft li cung cp mt công c hu ích hn truy cp d liu goi là OLEDB. OLEDB là k thut cho phép d liu c truy xut t c 2 ngun c s d liu: quan h và không quan h. iu ó có ngha là gm các c s d liu ca Microsoft Access, Oracle, SQL SERVER và c các ngun d liu không quan h nh Excel, Microsoft Index Server, Microsoft Exchange, Active Directory... Visual Basic s dng giao din i tng ActiveX Data Objects (ADO) truy cp OLEDB. Visual Basic cung cp cho ta nhiu công c truy cp d liu nh DAO, RDO, ADO. Câu hi thng t ra là: K thut nào c s dng lúc nào âu? Nhiu ngi cho rng DAO & RDO ã li thi và ngi ta him s dng chúng. Tht ra DAO & RDO là các in hình cho mt vài kh nng tiêu biu ca ADO. Hin nay, vn còn khá nhiu ng dng s dng DAO & RDO và tht s chúng b gii hn trong chng mc nào ó. OLEDB thc s cung cp mt kh nng rng ln truy cp các c s d liu t nhiu ngun khác nhau. Tuy vy, trong mt s trng hp mt gii pháp dùng RDO li hu dng hn ADO.

III. Dùng Visual Basic to mt c s d liu

Thông thng chúng ta s s dng các h qun tr c s d liu to nên mt c s d liu, nhng trong phn này ta s xét qua tính nng to c s d liu bng Visual Basic 6.0. Ta có th áp dng phng pháp này cho nhng c s d liu nh và tng thích vi Microsoft Access.

Trang 95

Visual Basic

III.1 S dng ca s c s d liu

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

Hình VIII.1 Ca s Visual Data Manager

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

Hình VIII.2 Ca s to Table

Trang 96

Visual Basic

Ta s nhp tên trng ti ô Name, chn kiu ca trng ti Combo Type, tùy chn FixedField và VariableField xác nh dài ca trng là c nh hay thay i. Sau khi xác nh y các thuc tính ca trng, n OK và tip tc thêm vào các trng khác cho bng. Nu ã thêm mi y các trng ca bng, n Close quay v ca s Table Structure. Sau khi quay v ca s Table Structure, ta s xác lp các ch mc cng nh khóa chính ca bng.

Hình VIII.3 Ca s to khóa chính và ch mc

Ti ô Name, ta s nhp vào tên ca ch mc, ri chn các trng tham gia vào ch mc ó. Nu ta chn Primary thì ó chính là các trng cu thành khóa chính ca bng. Chn Unique tc là giá tr ca ch mc ó s không có s trùng lp. n Close xác nhn rng ta ã xây dng xong tp các ch mc ca bng. Sau khi ã hoàn thành tt c các thao tác trên, to bng ta n Build the Table. Tuy rng ây là mt tính nng mi ca VB6, tuy nhiên chúng ta cng s gp phi rt nhiu bt tin khi phi thit k mt c s d liu hoàn chnh cng nh trong quá trình bo trì và s dng (khó khn trong vic thay i các thuc tính ã xác lp, không to liên kt gia các bng c ...). Mt phng cách tt nht ó là nên dùng các h qun tr c s d liu chuyên dùng thc hin công vic nêu trên.

Trang 97

Visual Basic

Hình VIII.4 To bng cho c s d liu

III.2 Dùng Visual Data Manager to giao din

Ta có th thit k mt Form nhp liu n gin cho mt Table t Visual Data Manager. Các bc tin hành nh sau: T Visual Data Manager chn C s d liu cn thao tác. Chn Data Form Design t mc Utility. Chn Table cn cho vic to Form và các trng hin th trên Form (thông thng chúng ta s cho hin th tt c các trng). Chn Build the Form, biu mu mi ã c to trong án ca chúng ta.

Hình VIII.5 Thit lp các thuc tính cho Form

Kt qu sau khi chúng ta xây dng Form bng Visual Data Manager:

Trang 98

Visual Basic

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

VB6 còn h tr cho ngi lp trình kh nng làm vic vi c s d liu mà không phi thông qua công c qun tr c s d liu hoc các công c trong Add-In. Công c này chính là ca s Data View. T Menu ca VB chn Data View hoc nhn nút Data View trên thanh công c. Ca s Data View xut hin cho ta hai la chn: Data Links và Data Environment Connections.

Hình VIII.6 Ca s Data View

Liên kt d liu (Data Link) là mt cách kt ni môi trng phát trin ca VB6 vi mt c s d liu nào ó. Mt kt ni môi trng d liu (Data Environment Connection) là cách thc s dng c s d liu trong mt án c th. im khác bit gia hai thành phn này là s liên quan gia c s d liu vi án c th. s dng c s d liu theo kiu Data Link, ta tin hành nh sau: Chn Data Links, n chut phi -> Add a Data Link hoc n nút Data Link trên thanh công c ca ca s. Ca s Data Link Properties xut hin.

Trang 99

Visual Basic

Hình VIII.7 Hp thoi Data Link Properties

Chn trình cung cp Microsoft Jet, chn Next. Chn c s d liu mun ni kt n, nhn OK. Liên kt d liu cung cp mt cách nhìn tóm lc v ngun d liu. Mi ln ta to mt liên kt d liu, ta có th duyt bng cách m rng phn t trong danh sách tóm lc. Thc hin iu này bng cách nhn vào du cng bên trái mi phn t (hình VIII.8).

Hình VIII.8 Ca s Data

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

iu khin d liu giúp cho ngi s dng liên kt biu mu ca mình n ngun c s d liu. iu khin d liu cung cp cho ngi s dng nhng tính nng x lý d liu c bn nh duyt qua các mu tin, thêm mi, cp nht. i vi phiên bn VB6 cung cp cho chúng ta 3 trình iu khin d liu: DAO (Data Access Object), RDO (Remote Data Object) và ADO (ActiveX Data Object).

Trang 100

Visual Basic

V.1 Kt ni vi c s d liu và làm vic vi các mu tin thông qua iu khin ADO Data

V.1.1 Hin th d liu Nu nh chúng ta xây dng mt biu mu ch hin th các mu tin ca mt bng, iu này rt n gin và ta không cn phi lp trình gì c. s dng iu khin ADO Data, ta cn ánh du Microsoft ADO Data Control 6.0 (OLEDB) trong hp thoi Components.

Hình VIII.9 Hp thoi Components Chn iu khin ADO Data t hp công c a vào biu mu, liên kt n ngun d liu thông qua hai thuc tính ConnectionString và RecordSource. ConnectionString: Xác nh ngun d liu cn ni kt, ó chính là chui ni kt ch n c s d liu mà ta thao tác. RecordSource: Xác nh xem ni kt ca ta ang thao tác trên bng nào. Ví d: To mt ni kt n c s d liu "C:\Program Files\Microsoft Visual Studio\VB98 \Biblio.mdb". Chn Use Connection String, n Build. Chn Microsoft Jet 4.0 OLE DB Provider. Chn c s d liu nh ví d. n OK. Quay v ca s Property Pages, chn Tab RecordSource, xác nh các tùy chn nh hình v. n Close.

Trang 101

Visual Basic

Sau khi ã xác nh c ni kt, ta vn không thy c s hot ng ca iu khin d liu, nguyên nhân do chúng ta không có iu khin hin th ni dung, cách gii quyt vn là dùng iu khin TextBox hin th d liu. dùng iu khin Textbox hin th d liu, ta xác nh hai thuc tính sau ây ca iu khin: DataSource, DataField. Các thuc tính này xác nh ngun d liu và tên trng, i vi ví d này ó là Adodc1 (tên ca ADO Data) và Au_Id. Thc thi án, ta c kt qu sau:

Hình VIII.11 Ví d dùng ADO Data V.1.2 Cp nht d liu Thao tác cp nht d liu cng khá n gin, iu khin ADO Data s t ng cp nht li giá tr ca mu tin hin hành mi khi ta duyt qua mu tin khác, vì vy ta cng không phi làm gì c. V.1.3 Thêm mi mu tin có th thêm mi mu tin, ta có hai phng cách nh sau: Thit lp thuc tính EOFAction ca iu khin ADO Data là 2-AddNew. Cách này không cn phi lp trình gì c. Trang 102

Visual Basic

thêm mi vào mt mu tin, ta s i n cui mu tin, sau ó n nút tip, ta nhn thy giá tr ca các trng s rng ch chúng ta nhp mi thông tin vào.

Hình VIII.12 Thêm mi mu tin dùng ADO Data

Thêm mi mu tin bng 2 phng thc AddNew và Update, các bc tin hành s nh sau: - Thit k hai nút lnh là ADD NEW và UPDATE. - Trong s kin Click ca hai nút trên ln lt nhp vào câu lnh sau: Adodc1.Recordset.AddNew, Adodc1.Recordset.Update vi Adodc1 là thuc tính Name ca iu khin d liu.

Hình VIII.13 S dng phng thc AddNew và Update

V.1.4 Dùng s kin MoveComplete cp nht giao din ngi s dng Ta có th dùng s kin MoveComplete ca iu khin ADO Data khi ng sa i trong ng dng khi ngi s dng di chuyn t mu tin này sang mu tin khác. S kin MoveComplete c kích hot khi mt mu tin mi thành mu tin hin hành. ây là mt trong vài s kin c kích hot khi iu khin di chuyn t mu tin này sang mu tin khác. Các s kin khác bao gm WillChange, c kích hot khi iu khin di chuyn t mu tin này sang mu tin khác hay thay i mt mu tin và s kin RecordChangeComplete, xy ra khi mt mu tin c sa i thành công trong c s d liu nh mt kt qu ca hot ng trong iu khin d liu. Trang 103

Visual Basic

V.1.5 Xóa mu tin xóa mu tin trong mt ng dng s dng iu khin d liu, ta dùng phng thc Delete ca i tng Recordset ca iu khin d liu. Ví d: Adodc1.Recordset.Delete V.1.6 Dùng s kin WillChangeRecord m bo d liu hp l Trong lp trình c s d liu, vic m bo rng d liu nhp vào phù hp vi các quy tc ca mt c s d liu ngi dùng c th là yu t quan trng bc nht và mang tính bt buc. i vi iu khin ADO Data, vic xác nh xem d liu có hp l hay không s c vit trong s kin WillChangeRecord ca iu khin. S kin này s c kích hot khi ngi dùng thay i thông tin ca mt mu tin và di chuyn sang mu tin khác hoc thêm mi mu tin.

V.2 Kt ni vi c s d liu và làm vic vi các mu tin thông qua iu khin Data (DAO Data Control)

iu khin Data hn ch hn iu khin ADO Data vì nó ch cho phép chúng ta ni kt n mt s ngun d liu c th, chng hn nh Access, Excel, Foxpro,... nhng Version ca các h qun tr này cng là nhng Version ã lâu i. s dng iu khin này, ta cn xác nh các giá tr ca các thuc tính sau: Connect, DatabaseName, RecordSource. - Connect xác nh c s d liu ca ta là loi gì. - DatabaseName ch n mt c s d liu c th. - RecordSource là mt bng d liu trong c s d liu (i vi c s d liu Access). Sau khi ã xác nh giá tr ca các thuc tính trên thì vic duyt qua các mu tin cng tng t nh ca iu khin ADO Data. Thuc tính EOFAction ca iu khin Data quy nh vic chúng ta có th thêm mi mt mu tin hay là không (tng t iu khin ADO Data).

Trang 104

Visual Basic

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

Mc tiêu: Chng này gii thiu v th vin i tng Data Access Objects, cách thc c s dng truy cp c s d liu ca các h qun tr c s d liu nh nh Microsoft Access, Foxpro... Hc xong chng này, sinh viên phi nm bt c các vn sau: - Mô hình cây phân cp ca i tng DAO. - S dng th vin i tng DAO tng tác vi c s d liu trong VB. Kin thc có liên quan: - Các cu trúc lp trình trong VB. - Câu lnh truy vn d liu trong c s d liu. Tài liu tham kho: - Microsoft Visual Basic 6.0 & Lp trình c s d liu - Chng 20, trang 571 - Nguyn Th Ngc Mai (ch biên), Nhà xut bn Giáo dc - 2000. - T hc Lp trình c s d liu vi Visual Basic 6 trong 21 ngày (T1) ­ Chng 8, trang 305 - Nguyn ình Tê (ch biên), Nhà xut bn Giáo dc - 2001.

Trang 105

Visual Basic

Các ng dng Visual Basic có th thao tác trên c s d liu thông qua DAO (Data Access Objects). Dùng DAO ta có th thi hành các câu truy vn xem, cp nht, cng nh to mi các giá tr cho các mu tin ca bng ... DAO có th c s dng cho các ng dng truy cp d liu t máy cá nhân hoc các ng dng theo kiu Khách/Ch (Client/Server). Tuy nhiên, vào thi im hin ti, chúng ta ch dùng DAO thao tác vi c s d liu Jet vì dng ng dng Client/Server là th mnh ca ADO (ActiveX Data Objects).

I. Mô hình i tng Data Access Objects (DAO)

Mô hình i tng DAO khá phc tp vi hàng trm yu t vi rt nhiu tp hp cha khá nhiu i tng, mi i tng li có các thuc tính, phng thc và các i tng con ca riêng nó. Sau ây là mô hình cây phân cp ca i tng DAO:

Trong lp trình DAO, có mt tp hp ct lõi các k thut thông dng c s dng gn nh mi chng trình. Chúng bao gm: o Thi hành câu truy vn SELECT ly v d liu t c s d liu. o Duyt qua tng mu tin trong mt Recordset. o Thi hành câu truy vn hành ng (Update, Delete, Insert). o Sa i cu trúc c s d liu. Trang 106

Visual Basic

o X lý li phát sinh bi truy cp c s d liu.

II. S dng DAO làm vic vi c s d liu

s dng i tng DAO, ta cn tham chiu n i tng này bng cách chn Project -> References, sau ó ánh du chn Microsoft DAO 3.51 Object Library. Nhn OK và ta ã có th s dng các i tng do DAO cung cp.

II.1 i tng Database

i tng Database là ni bt u vic truy cp n c s d liu, hay nói cách khác có th kt ni và thao tác vi c s d liu thông qua DAO thì cn thông qua i tng u tiên ó là i tng Database. Trc tiên ta khai báo mt i tng Database nh sau: Dim db As Database i tng Database có rt nhiu phng thc, ta s ch xét qua nhng phng thc c bn và quan trng nht cho phép ta thao tác vi c s d liu. II.1.1 S dng phng thc OpenDatabase to mt i tng Database Ta dùng phng thc OpenDatabase cho phép mt i tng Database tham kho n mt c s d liu c th, i s bt buc ca phng thc là mt chui, kt qu tr v là mt i tng Database, vì vy trc khi s dng phng thc này, ta cn khai báo mt i tng Database. Chng hn nh:

Dim Set db As db = Database OpenDatabase("..\..\baigiang.mdb")

Cú pháp y ca phng thc OpenDatabase: Set database = OpenDatabase (dbname, options, read-only, connect) Ý ngha các tham s ca phng thc OpenDatabase nh sau: Thành phn database dbname options read-only connect Ý ngha Bin kiu i tng Database mà ta mun s dng. Chui xác nh s tn ti ca c s d liu Jet hoc là tên ngun d liu (DSN) dng ODBC data source. Bin mang giá tr xác nh tùy chn loi c s d liu. Mang giá tr kiu Boolean, TRUE nu nh m c s d liu dng ch c, ngc li cho kiu truy xut c và ghi. Kiu chui, xác nh kiu ni kt bao gm c mt khu. Các giá tr ca tùy chn Options Giá tr dbDriverNoPrompt Ý ngha Trình qun lý ODBC dùng chui ni kt cung cp tên c s d liu và ni kt. Nu Trang 107

Visual Basic

ta không cung cp thông tin c th, s xy ra li ti thi im thc thi. dbDriverPrompt Trình qun lý ODBC hin th hp thoi các ngun d liu ODBC. Chui kt ni s c to t ngun d liu do ngi dùng chn thông qua hp thoi, nu không ngun d liu mc nh s c s dng. Nu ni kt và tên ngun d liu xác nh y các thông tin cn thit cho mt ni kt thì trình qun lý ODBC s dùng chui trong ni kt nu không s nh trng hp s dng dbDriverPrompt.

dbDriverComplete

II.1.2 S dng phng thc Execute thi hành câu truy vn hành ng Ta s dng phng thc Excute ca i tng Database thi hành mt câu lnh SQL trên c s d liu. tuy vy phng thc này không nên dùng cho mi trng hp. ta ch nên dùng phng thc Excute thi hành các lnh SQL cho các mc ích sau: o Cp nht, xóa hay sao chép mu tin (trong Access/Jet, ta gi là các truy vn hành ng). o Sa cu trúc c s d liu (c bit nh là các lnh DDL ­ Ngôn ng nh ngha d liu, Data Definition Language). Các câu truy vn SELECT theo quy c (ly v các mu tin) c thi hành nh phng thc OpenRecordset ca i tng Database. Cú pháp: Object.Execute Source - Object: i tng Database. - Source: câu SQL kiu bin chui. Ví d: Tng giá bán mi sn phm ca bng Products ca CSDL Northwind.MDB lên 10%.

Dim db As Database Private Sub Form_Load() Set db = OpenDatabase("Northwind.mdb") End Sub Private Sub cmdExcute_Click() db.Excute "UPDATE Products " & _ "SET [Unit Price] = [Unit Price] * 1.1" End Sub

II.2 i tng Recordset

i tng Recordset xác nh mt tp hp các mu tin t mt bng c s hoc kt qu ca mt câu lnh truy vn nào ó. Ti mt thi im bt k, i tng

Trang 108

Visual Basic

Recordset ch tham kho n mt mu tin n, ó là mu tin hin hành. s dng i tng Recordset, ta dùng phng thc Open Recordset. Cú pháp thông dng ca OpenRecordset nh sau: Set recordset = object.OpenRecordset source [, Type][, Options][, LockEdits] Trong ó phng thc OpenRecordset tr v i tng Recordset và object là bin i tng kiu Database, tham s Source ây s là mt câu lnh truy vn (SELECT). i tng Recordset có nhiu loi (Type) khác nhau, sau ây là bng phân tích công dng cng nh u, nhc im ca tng kiu Recordset. Kiu Dynamic (dbOpenDynamic) u im Cp nht c, kt qu tr v có th thuc nhiu bng khác nhau thông qua ni kt bng. Mt u im ni tri ó là i vi c s d liu nhiu ngi s dng, nó có c kh nng t cp nht khi các ngi dùng khác cp nht mu tin cha trong ó. Dynaset Các chc nng tng t nh (dbOpenDynaset) Dynamic, nhng t c hiu qu hn do không thao tác trên d liu thc s mà là s tham chiu n d liu. Forward-Only Có th ly v mu tin t (dbOpenForwardOnly) nhiu bng thông qua ni kt bng. c bit hiu qu i vi các Recordset nh. Snapshot Tng t nh Forward-Only (dbOpenSnapshot) Table (dbOpenTable) Nhc im Kém hiu qu hn so vi kiu Dynaset

Tìm kim không tht s hiu qu do không có các ch mc.

Ta ch có th di chuyn n phía trc.

Không cp nht c vi d liu Jet. Tr v mt bng sao n d liu, nên thao tác chm hn rt nhiu so vi Dynaset. Có th nh v và ly v các Không th thc hin mt câu mu tin mt cách nhanh truy vn liên quan n nhiu chóng vì các bng c lp bng. ch mc.

Lu ý: Nu ta m mt Recordset vi b máy CSDL Microsoft Jet và ta không xác nh tham s type ca OpenRecordset thì dbOpenTable là mc nh (nu có th). Vi mt Recordset xác nh mt câu truy vn, dbOpenDynaset là mc nh. Vi cách truy cp CSDL theo ODBC, dbOpenForwardOnly là mc nh. Mt s giá tr ca tham s Option, mt hng s có th c kt hp bi nhiu giá tr khác nhau, xác nh c tính ca Recordset. Trang 109

Visual Basic

Hng s dbAppendOnly

Ý ngha Cho phép ngi dùng thêm mu tin mi vào Recordset, nhng không c sa i hay xóa các mu tin có sn (ch vi dynaset-Recordset ca JET).

dbSQLPassThrough Cho phép tham kho n các câu SQL ca b máy CSDL JET khi khi nó c ni vi mt ngun d liu ODBC (ch vi snapshot-Recordset ca JET). dbSeeChanges Mt li thc thi s xut hin khi mt ngi dùng thay i d liu mà ngi khác ang thao tác (ch vi dynaset-Recordset ca JET). iu này tht s có ích cho ng dng a ngi dùng cn ng b hóa d liu. Ngn cn ngi dùng khác sa i hay thêm mu tin. Ngn cn ngi dùng khác c d liu t mt bng (chi vi Table-Recordset ca JET). Mt Recordset ch cho phép di chuyn ti (snapshot-Recordset ca JET). Không cho ngi dùng thay i d liu. Thc thi mt câu truy vn không ng b (truy cp d liu theo ODBC). Thc thi câu truy vn b qua phng thc SQLPrepare và trc tip gi phng thc SQLExecDirect (truy cp d liu ODBC trong môi trng a ngi dùng).

dbDenyWrite dbDenyRead

dbForwardOnly

dbReadOnly dbRunAsync

dbExecDirect

Lu ý: Ta không th s dng tham s lockedits khi options là dbReadOnly. Mt s các giá tr ca tham s lockedits:

Trang 110

Visual Basic

Hng s dbReadOnly

Ý ngha Ngn cn ngi dùng sa i d liu (mc nhiên i vi cách truy cp d liu theo ODBC). Ta có th s dng hng s này tham s Options hay LockEdits u c, nhng không th cùng mt lúc (li thc thi xy ra). Khóa trang bi quan trong môi trng a ngi dùng. Trang cha mu tin ang sa i s b khóa li khi phng thc Edit c thc thi (mc nh i vi JET). Khóa trang lc quan trong môi trng a ngi dùng. Trang cha mu tin ang sa i s không b khóa cho ti khi phng thc Update c gi thc thi. Khóa trang lc quan ng thi da vào giá tr ca mt dòng c th (ch i vi cách truy cp d liu theo ODBC). Cho phép cp nht theo lô (ch i vi cách truy cp d liu theo ODBC).

dbPessimistic

dbOptimistic

dbOptimisticValue

dbOptimisticBatch

Lu ý: Xét ví d sau:

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

- Nh vy câu lnh cui cùng trong ví d trên s sai ch là VB không xác nh c âu là du trích dn ca chui và âu là du trích dn ht câu lnh truy vn. Cách khc phc là i du trích dn chui thành du nháy n. - Mt im cn chú ý khác là khi vit mt câu truy vn trên nhiu dòng thì cn có ký t ni dòng _ cui mi dòng. - Nu giá tr ca tham s trong câu truy vn không phi là cng nhc, tc ta ly giá tr t mt bin thì ta theo nguyên tc sau:

Set rs = db.OpenRecordset ("Select * From Canbo " & _ "Order by hotencb = `"& name & "'")

II.3 i tng Field

i tng Field giúp chúng ta truy xut giá tr ca mt trng trong Recordset. Giá tr ca trng s truy xut qua thuc tính Value ca i tng Field, tuy nhiên thuc tính Value là thuc tính mc nh ca Field, nên ta không cn tham kho tng minh n thuc tính này. Trang 111

Visual Basic

Nh vy truy xut giá tr ca mt trng trong 1 Recordset c th, ta có th dùng mt trong các cách sau: - Fields(Num): Num là s th t ca trng trong Recordset (bt u tính t 0) - Fields("name"): Vi name là tên trng - Fields![name]: Vi name là tên trng.

II.4 Các phng thc duyt qua i tng Recordset

Sau khi nhn v mt i tng Recordset, ta cn có nhng cách thc duyt qua các mu tin phc v cho mt công vic c th nào ó. Ta có mt s phng thc duyt Recordset nh sau: Phng thc MoveFirst MoveNext MovePrevious MoveLast Move N Ý ngha Di chuyn n mu tin u tiên trong Recordset Di chuyn n mu tin k tip trong Recordset Di chuyn n mu tin lin trc trong Recordset Di chuyn n mu tin cui trong Recordset Di chuyn i N mu tin c ch nh trong Recordset

Cng nh ã nêu trên, có nhiu loi kiu Recordset, tùy vào tng kiu mà chúng ta ch có th duyt ti mà không th i lui, khi ó các phng thc nh MoveFirst, MovePrevious s gây ra li. bit c rng chúng ta ang di chuyn trong phm vi các mu tin ca Recordset, ta s dng hai thuc tính sau ây xác nh iu ó: - BOF: Tr v TRUE nu ta di chuyn n trc mu tin u tiên ca Recordset. - EOF: Tr v TRUE nu ta di chuyn n sau mu tin cui cùng ca Recordset. Hn th na, ta có th dùng hai thuc tính này kim tra mt Recordset có rng hay không, mt Recordset rng khi ti mt thi im bt k c hai thuc tính EOF và BOF u có giá tr là TRUE. xác nh s mu tin có trong mt Recordset, ta dùng thuc tính RecordCount. Nhng chú ý rng ta cn di chuyn n mu tin cui cùng trc khi s dng thuc tính RecordCount thì kt qu tr v mi chính xác. Ti sao li nh vy? Bi vì câu lnh truy vn c x lý thông qua hai giai on, tr v s lng mu tin cho x lý và x lý bên di câu lnh truy vn trên mt s lng úng d liu kt qu, và ta không th iu khin c hai quá trình này. cp nht giá tr ca 1 mu tin ta làm theo các bc nh sau: - Dùng các phng thc duyt mu tin i n mu tin cn thay i giá tr. - Thi hành phng thc Edit. - Dùng thuc tính Fields gán tr cho trng trong mu tin, chng hn:

rs.Fields("hotencb") = "Truong Quoc Dinh"

Trang 112

Visual Basic

- Lu li s thay i bng cách thi hành phng thc Update. thêm mi mt mu tin ta làm theo các bc: - Thi hành phng thc AddNew, VB s thêm mi mt mu tin trng. - S dng các cách thc gán tr cp nht giá tr cho mu tin mi thêm vào. - Thi hành phng thc Update. Sau khi ã hoàn thành công vic chúng ta cn thi hành phng thc Close óng mt i tng Recordset. iu này tht s có ý ngha khi Recordset hin hành ang khóa d liu, phng thc Close s m khóa và các ngi dùng khác có th thao tác trên d liu.

II.5 Tìm kim d liu trong Recordset và Table (bng)

ôi khi i vi mt s công vic nào ó, ta cn tìm kim mt mu tin c th trong mt tp các mu tin ca Recordset, có nhiu phng thc tìm kim mu tin, tùy vào ni dung công vic mà ta áp dng phng thc nào cho hiu qu. Ta có các phng thc tìm kim trên Recordset nh sau:

FindFirst|FindLast|FindNext|FindPrevious

Cú pháp ca phng thc Find: recordset.{FindFirst | FindLast | FindNext | FindPrevious} criteria Thành phn recordset criteria Ý ngha Mt bin i tng Recordset kiu dynaset hoc snapshot. Chui dùng xác nh mu tin, ging nh mnh WHERE trong câu lnh SQL nhng không có t khóa WHERE.

Phng thc FindFirst FindLast FindNext FindPrevious

Bt u t Mu tin u tiên Mu tin cui cùng Mu tin hin hành Mu tin hin hành

Hng tìm kim n cui Recordset n u Recordset n cui Recordset n u Recordset

Các phng thc tìm kim này s không làm ny sinh mt Recordset, nó ch di chuyn n mu tin hp iu kin và mu tin ó tr thành mu tin hin hành, nu không tìm thy, mu tin hin hành không thay i, khi này thuc tính NoMacth có giá tr là TRUE. Ngoài ra i tng Recordset còn cung cp phng thc Seek giúp ta tìm kim trên mt Recordset kiu bng có ch mc, cú pháp nh sau: recordset.Seek comparison, key1, key2...key13

Trang 113

Visual Basic

Thành phn recordset comparison key1, key2...key13

Ý ngha Mt bin i tng Recordset kiu bng ã nh ngha ch mc thông qua thuc tính Index. Mt trong các biu thc so sánh sau <,<=, =, >=, or >. Mt hoc nhiu giá tr tng ng vi trng ch mc hin hành, ta có th dùng ti a n 13 giá tr.

III. S dng iu khin DAO Data

Hin ti mc dù vic liên kt vi c s d liu u có th thc hin thông qua iu khin ADO Data vi nhiu tính nng mnh hn, tuy nhiên ta cng có th dùng iu khin DAO Data tham kho n c s d liu Jet cng nh mt s loi c s d liu khác nh DBASE, vn bn, bng tính Excel mà chúng ta không cn dùng ODBC. iu khin này chính là iu khin Data mà ta ã xét chng 8. Tuy nhiên khi s dng iu khin này thì ta cn chú ý n thuc tính Connect, ây là thuc tính quy nh loi d liu s kt ni. Mt s kiu c s d liu c h tr bi iu khin DAO Data: - Microsoft Access. - DBASE III, IV và 5.0. - Phiên bn Excel 3.0, 4.0, 5.0 và 8.0. - Phiên bn FoxPro 2.0,2.5 2.6 và 3.0. - Lotus spreadsheet vi nh dng WK1, WK3 và WK4. - Phiên bn Paradox 3.x, 4.x và 5.x. - Tp tin vn bn ASCII có phân cách.

Trang 114

Visual Basic

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

Mc tiêu: Chng này gii thiu v th vin i tng Remote Data Objects, cách thc c s dng truy cp các i tng d liu t xa. Hc xong chng này, sinh viên phi nm bt c các vn sau: - Khái nim Open Database Connectivity (ODBC). - S dng iu khin d liu t xa (Remote Data Control) truy cp d liu. - Cây phân cp ca mô hình i tng RDO. - S dng th vin i tng RDO tng tác vi c s d liu trong VB. Kin thc có liên quan: - Các cu trúc lp trình trong VB. - Câu lnh truy vn d liu trong c s d liu. - Nm bt c các mô hình DAO là mt li th vì lúc ó vic tip thu mô hình ADO c nhanh hn. Tài liu tham kho: - Microsoft Visual Basic 6.0 & Lp trình c s d liu ­ Chng 23, trang 735 - Nguyn Th Ngc Mai (ch biên), Nhà xut bn Giáo dc - 2000. - T hc Lp trình c s d liu vi Visual Basic 6 trong 21 ngày (T2) ­ Chng 17, trang 227 - Nguyn ình Tê (ch biên), Nhà xut bn Giáo dc - 2001.

Trang 115

Visual Basic

I. Open Database Connectivity (ODBC)

1. Khái nim

ODBC là công ngh Windows cho phép ng dng Client ni vi c s d liu t xa. Nm trên máy Client, ODBC làm cho ngun d liu quan h tr nên trong sut i vi ng dng Client. Vì th ng dng Client không cn quan tâm n kiu c s d liu là gì. ODBC gm 3 phn: - Trình qun lý iu khin (driver manager). - Mt hay nhiu trình iu khin (driver). - Mt hay nhiu ngun d liu (data source).

2. Kin trúc

Kin trúc ODBC cha kt ni gia ng dng Client và c s d liu Server thông qua trình qun lý iu khin ODBC.

ng dng Client Ngun d liu ODBC Trình qun lý iu khin ODBC Trình iu khin ODBC

DB

Hình 10.1: Kin trúc ODBC trình bày kt ni gia ng dng Client và CSDL Server thông qua trình qun lý iu khin ODBC

3. To ngun d liu ODBC

mt ng dng Client ni vi c s d liu Client/Server dùng ODBC; trc ht, ta phi cung cp thông tin v ngun d liu ODBC trên Client. Mi Server yêu cu nhng gói thông tin khác nhau ni vi Client. ODBC cung cp cho thông tin này mt tên n gin ta có th tham chiu n nó, thay vì phi thit lp gói thông tin t u mi ln ta cn n nó. ng dng Client có th tham chiu mt cách d dàng n t hp ca mt iu khin, mt c s d liu và có th thêm mt ngi s dng và mt khu. Tên này chính là tên ngun d liu hay Data Source Name (DSN). to mt tên ngun d liu ODBC trên máy Client, ta làm nh sau: o M Control Panel. o Chn Administrative Tools\Data Source (ODBC), hp thoi qun tr ngun d liu xut hin:

Trang 116

Visual Basic

Hình 10.2: Hp thoi qun tr ngun d liu ODBC

o Ta có th to mt trong ba kiu ngun d liu ODBC: User DSN: ch có ngi dùng to ra nó mi có th s dng (trên máy ang dùng). System DSN: bt k ai s dng máy này u có th dùng c. ây cng là kiu ngun d liu mà ta cn to khi cài t ng dng c s d liu Web. File DSN: có th c copy và s dng bi máy khác. o Khi hp thoi ODBC ã m ra, chn lp UserDSN (hay System DSN), To mt kt ni mi, nhn nút Add, màn hình s hin ra nh sau:

Hình 10.3: La chn loi c s d liu cn thit to kt ni

Trang 117

Visual Basic

o Chn loi CSDL mà ta mun thao tác (Access, Foxpro, SQL Server,...), nhn Finish. Sau khi nhn Finish, mt màn hình s hin ra cho phép ta nhp vào Data Source Name, ây là tên ca kt ni CSDL. Tên ca kt ni không cn phi ging vi tên ca c s d liu. Phn Description dùng gõ các thông tin mô t v kt ni. Ngoài ra ta còn phi chn ng dn n tp tin CSDL tng ng.

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

DAO t ng np b máy c s d liu Jet mi khi nó truy cp d liu Client/Server, thm chí khi ta không thc s s dng c s d liêu Jet/Access. Ngoài ra ta còn có thêm tùy chn s dng ODBCDIRECT truy cp d liu Client/Server. ây là mt chuyn i truy cp c s d liu server trc tip thông qua DAO mà không cn np b máy c s d liu Jet. Tùy chn này thích hp khi ta phi dùng DAO truy cp d liu Client/Server mà không cn bn tâm v tính linh hot, kh nng s dng li và tính d bo trì ca chng trình. Ví d: To mt Form có s dng ODBCDirect và DAO Data Control. o To d án mi. o Tham chiu n iu khin li Microsoft Data Bound Grid Control trong mc Project\Components. o To Form có dng sau:

1

2

Hình 10.4: Ví d v ODBC Direct

1: DBGrid. Name: dbGrid1. 2: Data Control. Name: Data1. o i thuc tính DefaultType ca DataControl là 1 ­ Use ODBC. iu này làm cho chng trình thc hiên nhanh hn. o Thuc tính Connect ca Data1 là: ODBC;DSN=DBHH o t thuc tính Record Source ca Data Control: Select * From THANGHOA t thuc tính Data Source ca DBGrid1 là: Data1. Lu d án và thc thi chng trình.

Trang 118

Visual Basic

II. Truy cp d liu dùng iu khin d liu t xa

iu khin d liu t xa (Remote Data Control - RDC) là mt cách khác truy cp d liu t xa trong các ng dng Visual Basic. iu khin này dùng mt giao din lp trình tng t nh iu khin ADO Data hay DAO Data. Ví d: S dng RDC hin th d liu trên li: o ây ta có s dng Remote Data Control và li hin th d liu, do ó ta tham chiu n các thành phn này bng cách chn Project\Components..., thit lp tham chiu n Microsoft Remote Data Control và Microsoft Data Bound Grid Control. Nhp OK. o Thit k Form có dng sau:

1

1

Hình 10.5: Ví d v Remote Data Control

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

III. Remote Data Object (RDO)

i tng d liu t xa (Remote Data Objects - RDO) c mô t dng hình cây tng t nh DAO. Tuy nhiên mô hình i tng RDO n gin hn DAO.

Trang 119

Visual Basic

Dù vy ta không th dùng RDO to i tng c s d liu nh bng, view, th tc cha sn... tham chiu n RDO ta vào Project\References...\Microsoft Remote Data Object 2.0. Mô hình i tng RDO:

Hình 10.6: Kin trúc ca RDO

III.1 i tng RDOEngine

ây là i tng cp cao nht trong mô hình RDO, gii thiu v các thành phn ca mô hình. Ta không cn phi khi to i tng này cách tng minh bi vì nó c khi to t ng. i tng rdoEngine cho phép ta truy cp toàn b các i tng khác trong mô hình RDO. Ngoài ra, nó còn c s dng to mi mt Data Source Name (DSN) nh vào phng thc rdoRegisterDataSource. on mã lnh di ây cho phép ng ký mt ngun d liu mi cho c s d liu Pubs (ca SQL Server):

Dim strTemp As String strTemp = "Description=Test DSN" & Chr(13) & _ "SERVER=(local)" & Chr(13) & "Database=Pubs" rdoEngine.rdoRegisterDataSource "MyTestPubs", "SQL Server", _ True, strTemp

III.2 i tng RDOError

i tng li xác nh thao tác nào trên mt ngun d liu gây ra li. ây không phi là các li ca Visual Basic vì nó xy ra i vi c s d liu. Vì th, ta Trang 120

Visual Basic

không cn phi by li cho các li này. Thay vào ó, tp hp rdoErrors s xác nh thao tác ca ta là thành công hay tht bi. Chng hn nh on mã lnh sau:

Dim objError As RDO.rdoError Dim strError As String For Each objError In rdoEngine.rdoErrors strError = strError & objError.Description & vbCrLf Next ' Display Errors MsgBox "The following errors occurred: " & strError

III.3 i tng RDOEnvironment

i tng này ch ra cách thc bo mt ca c s d liu. Ta s dng i tng này xác nh nh danh ngi dùng cùng mt khu hay thi hành mt phiên giao dch (Transation) trên c s d liu. i tng này không c khi to trc tip, chúng c to ra t ng.

III.4 i tng RDOConnection

Phn ln các chc nng ca RDO bt u vi i tng rdoConnection; i tng này cho phép thit lp mt ni kt n mt ngun d liu ODBC. Khi ngun d liu ã c nh ngha, các thuc tính cùng các phng thc ca i tng này c s dng giao tip vi ngun d liu y. on mã lnh n gin di ây cho phép to mt ni kt n ngun d liu có tên là Biblio.

Set m_Connection = New RDO.rdoConnection m_Connection.Connect = "DSN=Biblio" m_Connection.EstablishConnection

III.4.1 i tng RDOQuery i tng này c s dng thc thi các câu truy vn trên ngun d liu ODBC. Các câu truy vn này có th là các câu SQL hay là li gi thc thi các th tc lu tr sn trong c s d liu. Nu là li gi các th tc lu tr sn thì tham s ca các th tc này c xác nh nh i tng rdoParameter. Hai yu t then cht xác nh mt i tng rdoQuery là ni kt nào cn truy vn và câu lnh SQL truy vn d liu. Ví d: Gi s ta có on mã lnh bên trên to ni kt n ngun d liu Biblio. on mã lnh di ây thc thi câu lnh SQL ly v thông tin v tt c các nhà xut bn:

` To câu SQL Dim strSQL As String strSQL = "SELECT * FROM Publishers" ` To i tng Query Dim m_Query As RDO.rdoQuery Set m_Query = New RDO.rdoQuery Set m_Query.ActiveConnection = m_Connection

Trang 121

Visual Basic

m_Query.SQL = strSQL m_Query.Excute

III.4.2 i tng RDOResultset i tng này qun lý các mu tin c tr v t mt ni kt qua ODBC. Tp các mu tin có th c tr v thông qua i tng rdoQuery hay nh phng thc OpenResultset ca mt i tng rdoConnection. Trong mt s trng hp, tp các mu tin c truy xut nh vào thuc tính LastQueryResults ca i tng rdoConnection:

Set m_Resultset = m_Connection.LastQueryResults

Khi i tng rdoResultset c to ra, ta có th di chuyn n mu tin xác nh bng các phng thc MoveFirst, MoveLast, MoveNext, MovePrevious. III.4.3 i tng RDOTable i tng này xác nh mt bng trong mt ngun d liu ODBC. i tng này không c s dng cho các thao tác truy xut d liu mà nó ch c s dng khi ta cn xác nh cu trúc các bng ca c s d liu ca ta. III.4.4 i tng RDOParameter i tng này xác nh các tham s u vào hay các kt qu nhn c t các th tc lu tr sn trong c s d liu.

III.5 S dng RDO trong chng trình

III.5.1 Thit lp kt ni n ngun d liu o Trc tiên ta phi tham chiu n mô hình i tng RDO. o Ni kt n ngun d liu nh i tng rdoConnection. - Khai báo mt bin i tng rdoConnection. - Khi tao i tng, sau ó thit lp các thuc tính và các phng thc thích hp hoàn tt kt ni; trong ó có hai thuc tính cn quan tâm là chui kt ni (ConnectionString) và loi con tr (Cursor Driver). o Thit lp ni kt nh phng thc EstablishConnection ca i tng rdoConnection. III.5.2 Chui kt ni (ODBC Connect String) Chui kt ni c s dng khi thit lp ni kt n ngun d liu. ây là mt chui (String) xác nh các thông tin quan trng gi n trình iu khin ODBC truy cp d liu. Các thông tin cn quan tâm: tên ngun d liu (DSN Name), User ID, Password. Các tham s ca chui kt ni ODBC: Tham s DSN UID PWD DRIVER Tên ngun d liu ODBC Tên ngi dùng c s d liu Mt khu truy cp Trình iu khin DBC Trang 122 Ý ngha

Visual Basic

DATABASE SERVER WSID APP

Tên ca c s d liu c ni kt Tên máy cha c s d liu phc v (database server) Tên máy cha c s d liu khách (database client) Tên ca tp tin chng trình (*.exe)

Chui kt ni c xác lp nh thuc tính Connect ca i tng rdoConnection. Ví d: Chui ni kt n 1 DSN ca c s d liu Access Biblio:

Set m_Connection = New RDO.rdoConnection m_Connection.Connect = "DSN=Biblo" m_Connection.EstablishConnection

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

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

Bên cnh ni kt chun thông qua ODBC, RDO cng h tr loi ni kt DSN cp thp (DSN-less connection). i vi loi này, ta không cn nh ngha tên ngun d liu (DSN) trong b qun tr ODBC ca Windows. Lúc này tt c các thông tin v c s d liu c cung cp y trong chui ni kt. Ví d: Chui ni kt cp thp n c s d liu SQL Server Pubs:

Set m_Connection = New RDO.rdoConnection m_Connection.Connect ="DRIVER={SQL Server};" & _ "SERVER=(local);DATABASE=Pubs;UID=admin;PWD=;DSN=;" m_Connection.EstablishConnection

III.5.3 Trình iu khin con tr (Cursor Drivers) Trình iu khin con tr xác nh cách thc tp các mu tin tr v t c s d liu c lu tr nh th nào, có th chúng c lu tr ti máy ch (server) hay máy trm (client). Trình iu khin con tr c thit lp nh thuc tính CursorDriver ca i tng Connection (trc khi gi thc thi phng thc EstablishConnection) và các giá tr sau có th c cho nó: Giá tr rdUseIfNeeded Ý ngha Trình iu khin ODBC t ng xác nh loi con tr (c lu phía server hay client). Nu có th, con tr loi c lu phía server c c. Xác nh loi con tr ca ODBC chun, ngha là tp tt c các mu tin c lu máy client. Tp các mu tin c lu phia server. Tuy nhiên loi con tr này không thích hp lm trong môi trng a ngi dùng. Trang 123

rdUseODBC rdUseServer

Visual Basic

rdUseClientBatch rdUseNone

Ging nh rdUseODBC nhng có th c cp nht ng thi. Không s dng con tr, tp các mu tin c tr v mt ln duy nht lúc chúng c yêu cu. Ta ch có th di chuyn ti trong tp các mu tin kt qu.

Trang 124

Visual Basic

Chng 11: I TNG D LIU ACTIVEX

(ACTIVEX DATA OBJECTS)

Mc tiêu: Chng này gii thiu v th vin ActiveX Data Object (ADO), th vin i tng c s dng nhiu nht trong các ng dng truy cp c s d liu dng khách/ch (Client/Server) hin nay. Hc xong chng này, sinh viên phi nm bt c các vn sau: - Kin trúc OLEDB/ADO. - Cây phân cp ca mô hình i tng ADO. - S dng th vin i tng ADO tng tác vi c s d liu trong VB. Kin thc có liên quan: - Các cu trúc lp trình trong VB. - Câu lnh truy vn d liu trong c s d liu. - Nm bt c các mô hình DAO, RDO là mt li th vì lúc ó vic tip thu mô hình ADO c nhanh hn. Tài liu tham kho: - Microsoft Visual Basic 6.0 & Lp trình c s d liu - Chng 27, trang 877 - Nguyn Th Ngc Mai (ch biên) ­ Nhà xut bn Giáo dc 2000. - T hc Lp trình c s d liu vi Visual Basic 6 trong 21 ngày (T2) ­ Chng 18, trang 277 - Nguyn ình Tê (ch biên) - Nhà xut bn Giáo dc - 2001.

Trang 125

Visual Basic

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

I. Kin trúc OLE DB/ADO

ADO s dng OLEDB nh là trình cung cp d liu c s. Trình cung cp OLE DB cho phép ngi lp trình có th truy xut d liu t c hai ngun: quan h và phi quan h. VB6.0 ã h tr các trình cung cp cc b cho SQL Server, Oracle và Microsoft Jet/Access. Client Application

Remote Data Objects ODBC Driver ActiveX Data Objects OLE DB Data Provider OLE DB

ODBC Driver Manager

Document Server

Email Server Relational Database

Hình 11.1: Mô hình lp trình CSDL Client - Server dùng RDO và ADO

Ta ch cn lp trình vi phn giao din ngi s dng phía Client. Vic truy cp c s d liu trên trình duyt Web hay ng dng VB c thc hin nh ADO. Cu trúc này cho phép ta lp trình mt cách nht quán trên Web cng nh trên ng dng.

Trang 126

Visual Basic

Web Browser

HTTP

MS Internet Information Server with Active Server Pages

DCOM

ActiveX Server (DLL or EXE)

ADO

OLE DB

Hình 11.2: Truy cp CSDL t trình ng dng & trình duyt WEB theo ADO

II. Mô hình ADO

Mô hình ADO c trình bày theo dng phân cp (tng t DAO và RDO). có th lp trình vi th vin ADO, ta phi tham chiu n th vin này bng cách chn Project\References...\Microsoft ActiveX Data Object 2.0.

Hình 11.3: Mô hình ADO

Mô hình ADO có 3 i tng ct lõi: Trang 127

Database

Client Application

Visual Basic

o Connection: kt ni CSDL tht s. o Command: thc thi các câu truy vn da vào kt ni d liu. o RecordSet: là tp các mu tin c chn t câu truy vn thông qua i tng Command.

III Các i tng trong mô hình ADO

III.1 i tng Connection

Dùng phng thc Open ca i tng Connection thit lp kt ni vi ngun d liu. thc hin iu này ta cn phi thông báo vi ADO thông tin kt ni vi dng chui theo kiu chui kt ni ca ODBC. Thuc tính ConnectionString thc hin iu này. Ngoài ra ta còn có th chn trình cung cp bng cách quy nh giá tr ca thuc tính Provider ca i tng. ni kt vi d liu, ta cn xác nh trình cung cp OLE DB và chui kt ni. Nu không xác nh c hai yu t này, ta s s dng trình cung cp mc nh là ODBC: MSDASQL. Mt s trình cung cp có sn: Microsoft OLEDB cho các trình iu khin ODBC. Microsoft OLEDB cho Oracle. Microsoft Jet 3.51 OLEDB (Access). Microsoft Jet 4.0 OLEDB (Access) Microsoft OLEDB cho SQL Server. Microsoft OLEDB cho các dch v th mc. Ví d: i vi trình cung cp ODBC, thuc tính ConnectionString có th là mt DSN hay là mt kt ni không có DSN (DSN cp thp).

Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Provider = "MSDASQL" cn.ConnectionString = "DSN=Baigiang" cn.Open

Kt ni DSN cp thp:

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

Trong trng hp này vic kt ni vi c s d liu Server c thc hin nhanh hn vì chng trình không cn c thông tin v các DSN trên máy Client, tuy nhiên thông tin v ngun c s d liu li kt cht vi chng trình ã biên dch. kt ni vi c s d liu Access, ta dùng trình cung cp Jet vi chui kt ni là ng dn n tp tin .mdb

Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Provider = "MicroSoft.Jet.OLEDB.4.0" cn.ConnectionString = "d:\data\baigiang.mdb"

Trang 128

Visual Basic

cn.Open

i vi c s d liu SQL Server, ta có th dùng trình cung cp SQLOLEDB.1, trong trng hp này, chui kt ni tng t nh trng hp kt ni dùng trình cung cp ODBC không có DSN, tuy nhiên ta không cn xác nh giá tr ca DRIVER:

Dim cn as ADODB.Connection Set cn = New ADODB.Connection cn.Provider = "SQLOLEDB.1" cn.ConnectionString = "DATABASE=DBHH;" & _ "SERVER=www;UID=user;PWD=user" cn.Open

M và óng ni kt ngun d liu phát các yêu cu n ngun d liu s dng ADO, ta cn m kt ni n ngun d liu ó bng phng thc Open ca i tng Connection. Cú pháp y nh sau: connection.Open [connect], [userid], [password] Tt c các tham s ca phng thc Open u là tùy chn, nu nh các thông s này ã c xác nh thông qua các thuc tính khác ca i tng Connection thì ta không cn mô t chúng ây. Khi ã hoàn thành tt c các thao tác liên quan n ni kt này, ta cn phi óng ni kt mt cách tng minh thông qua phng thc Close ca i tng Connection. connection.Close óng ni kt mt cách tng minh s m bo rng tt c các tài nguyên liên quan n ni kt này trên Server cng nh Client u c gii phóng mt cách hp lý. Xác nh v trí con tr Con tr (Cursor): mt tp các mu tin c tr v cho chng trình. V trí con tr c xác nh nh thuc tính CursorLocation (có c i tng Recordset). Có 2 giá tr có th ch nh: adUseClient: con tr phía Client. adUseServer: con tr phía Server (mc nh). Thc thi các câu truy vn hành ng Các câu truy vn hành ng (Insert, Update, Delete) c thc hin nh phng thc Execute ca i tng Connection; ngoài ra phng thc này cng có th c s dng thc thi các th tc lu tr sn trong c s d liu hay các câu SELECT. Cú pháp phng thc này nh sau: Nu không có kt qu tr v: connection.Execute CommandText, RecordsAffected, Options Có kt qu tr v: Set recordset = connection.Execute (CommandText, RecordsAffected, Options) Trong ó: - connection: i tng Connection. - recordset: i tng Recordset là kt qu tr v ca phng thc Execute, tuy nhiên, ngi ta thng ít khi s dng cách này. Thay vào ó, ngi ta thng s dng phng thc Open ca i tng Recordset. Trang 129

Visual Basic

- CommandText: là mt chui xác nh câu truy vn hành ng, SELECT, th tc lu tr sn hay tên mt bng trong c s d liu. - RecordEffected: Tùy chn, là mt s nguyên dài (Long) xác nh trình cung cp tr v bao nhiêu mu tin tha iu kin. - Options: Tùy chn, là mt s nguyên dài (Long) xác nh trình cung cp s ánh giá các i s ca CommandText nh th nào. Thuc tính Mode: Xác nh trình cung cp có th hn ch truy cp n c s d liu khi có mt recordset ang m. Các giá tr có th là: Hng s adModeUnknown adModeRead adModeWrite adModeReadWrite adModeShareDenyRead adModeShareDenyWrite adModeShareExclusive adModeShareDenyNone Giá tr 0 1 2 3 4 8 12 16 Ý ngha Mc nh, ch nh quyn hn cha thit lp hay không th xác nh M Recordset vi quyn ch c M Recordset vi quyn ch ghi M Recordset vi quyn c/ghi Ngn ngi khác m kt ni vi quyn ch c Ngn ngi khác m kt ni vi quyn ch ghi Ngn ngi khác m kt ni Ngn ngi khác m kt ni vi bt c quyn nào

III.2 i tng Recordset

có th khi to mt i tng Recordset ta có th thc hin mt trong hai cách: o Phng thc Execute ca i tng Connection. Tuy nhiên cách này ta ch to c các Recordset ch c và ch có th di chuyn ti. o Xác lp các thông s thích hp cho i tng Recordset ri thc thi phung thc Open ca i tng Recordset. iu này c thc hin nh các bc: Sau khi khi to i tng Connection, ch nh Recordset là ca i tng Connection trên. Thit lp các thuc tính thích hp ca Recordset (Source, LockType...). Thc thi câu truy vn ni kt nh phng thc Open. III.2.1 Thuc tính CursorType (loi con tr) Xác nh loi con tr c tr v t c s d liu. Các giá tr có th nhn: Hng Giá tr Mô t adOpenForwardOnly 0 Ch có th di chuyn phía trc adOpenKeyset 1 Không th thy các mu tin do ngi dùng khác thêm vào nhng khi h xóa hay sa i mu tin s làm nh hng n các mu tin ta ang làm vic. adOpenDynamic 2 Có th thy toàn b s thay i do ngi Trang 130

Visual Basic

adOpenStatic

3

dùng khác tác ng. Bn sao tnh ca tp mu tin. Mi s thay i ca ngi dùng khác ta không thy c

III.2.2 Thuc tính LockType (khóa mu tin) Xác nh cách thc khóa mu tin trong Recordset. Dùng tính nng này khi mun kim soát cách thc cp nht mu tin vi nhiu ngi dùng trong c s d liu. Hng Giá tr 1 2 Mô t

adLockReadOnly adLockPessimistic

adLockOptimistic adLockBatchOptimistic III.2.3 Thuc tính Source

3 4

Mc nh - Ch c. Khóa trang bi quan. Mu tin trong RecordSet b khóa khi bt u sa i & tip tc khóa cho n khi thi hành phng thc Update hay di chuyn sang mu tin khác. Khóa trang lc quan. Mu tin ch b khóa ngay lúc thi hành phng thc Update hay di chuyn sang mu tin khác. Khóa trang lc quan hàng lot. H tr cp nht nhiu mu tin cùng mt lúc.

ây là mt chui xác nh câu truy vn ly d liu, có th là tên ca bng hay tên ca th tc lu tr sn. III.2.4 Thuc tính ActiveConnection ây là mt thuc tính i tng xác nh Recordset là ca ni kt nào trong chng trình. III.2.5 Ví d s dng i tng Recordset trong chng trình i tng Recordset có th c s dng là i tng ngun d liu (DataSource) ca iu khin li: Microsoft DataGrid Control 6.0 (OLEDB). Nh iu khin li này ta có th hin th d liu t mt Recordset theo dng hàng và ct. Chng hn ta có th hin th trên li thông tin v các mt hàng cùng vi mã loi hàng ca nó:

Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Private Sub Form_Load() Set cn = New ADODB.Connection cn.Provider = "Microsoft.Jet.OLEDB.3.51" cn.ConnectionString = "F:\Data\DBHH.mdb" cn.Open

Set rs = New ADODB.Recordset

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

Set rs.ActiveConnection = cn rs.CursorLocation = adUseClient

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

Visual Basic

rs.Open Set grdHH.DataSource = rs End Sub

Kt qu thc thi ca chng trình này nh sau:

*

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

Hình 11.4: S dng Datagrid hin th d liêu t Recordset

Thêm mi mu tin - M Recordset - Thi hành phng thc AddNew - Gán giá tr cho các trng trong mu tin ca Recordset - Lu li mu tin bng cách thi hành phng thc Update (hay UpdateBatch). Cp nht mu tin - M Recordset - Thc hin câu lnh truy vn nhn v các mu tin thích hp. - Di chuyn n mu tin cn cp nht li giá tr. - Gán li giá tr cho các trng. - Thi hành phng thc Update (hay UpdateBatch tùy thuc vào LockType). Lu ý:Ch khóa mu tin mc nh trong ADO là ch c, vì vy ta phi i thuc tính LockType ca i tng Recordset sang ch son tho trc khi thi hành cp nht hay thêm mi mu tin. III.2.7 Thuc tính CursorLocation Xác nh tp mu tin tr v t c s d liu c lu âu (Server hay Client, Server là mc nh). Thuc tính cng ging thuc tính CursorLocation ca i tng Connection. III.2.8 Recordset ngt kt ni Khi chúng ta dùng con tr phía Client, ta có kh nng ngt kt ni vi Server c s d liu mà vn tip tc làm vic vi d liu. Cách này cho phép ng dng tr nên Trang 132

Visual Basic

linh hot hn bi vì nhiu ngi dùng có th làm vic vi cùng mt d liu ti mt thi im nu nh h không có ni kt vi server. ngt ni kt vi Server, ta quy nh thuc tính ActiveConnection ca i tng Recordset là Nothing. Ví d:

Dim cn As ADODB.Connection Private Sub Form_Load() Set cn = New ADODB.Connection cn.Provider = "Microsoft.Jet.OLEDB.3.51" cn.ConnectionString = "F:\Data\GiangDay.mdb" cn.Open End Sub Public Function GetList (strState As String) _ As ADODB.Recordset Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset Set rs.ActiveConnection = cn rs.CursorLocation = adUseClient rs.LockType = adLockBatchOptimistic rs.CursorType = adOpenKeyset rs.Open strState Set rs.ActiveConnection = Nothing Set GetList = rs Set rs = Nothing End Function

thi hành cùng mt hành ng trên mt mu tin, ta sa i li các thuc tính ca i tng Recordset.

rs.LockType = adLockBatchOptimistic rs.CursorType = adOpenKeyset

Chúng ta thit lp giá tr các thuc tính li nh trên xác nhn rng Recordset có th ni kt li cp nht v sau. Sau ó, ta s thit lp mt hàm nhn Recordset ngt kt ni làm tham bin to mt i tng Recordset khác cp nht d liu.

Public Sub WriteData(rsDis As ADODB.Recordset) Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset Set rs.ActiveConnection = cn rs.Open rsDis, cn rs.UpdateBatch End Sub

Gi thc thi th tc WriteData:

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

Trang 133

Visual Basic

III.3 i tng Command

ây là i tng c ngi lp trình s dng khi mun thi hành các th tc lu tr sn hay nhng câu truy vn có tham s. Vi i tng Command ta có th thi hành mt s công vic nh sau: - S dng thuc tính CommandText nh ngha các on Text thi hành c. Thông thng thuc tính này dùng thit lp mt câu lnh SQL hoc mt li gi th tc lu tr sn, hay nhng dng khác mà trình cung cp h tr - Xây dng chui các i s ca câu truy vn cng nh các tham s ca các th tc lu tr sn thông qua i tng Parameter hoc tp hp Parameters. - Thc hin mt câu truy vn và tr v i tng Recordset thông qua phng thc Execute. - Xác nh kiu ca i tng Command nâng cao hiu qu thông qua thuc tính CommandType. - Xác nh s giây mà trình cung cp phi ch khi thi hành mt i tng Command thông qua thuc tính CommandTimeOut. Các kiu ca i tng Command c trình bày trong bng di ây: Hng adCmdText Ý ngha nh giá thuc tính CommandText di dng Text ca mt câu lnh hoc mt li gi th tc lu tr sn. nh giá thuc tính CommandText nh là tên ca mt bng khi tt c các trng ca bng ó s c tr v bi câu lnh truy vn ni ti. nh giá thuc tính CommandText nh là tên ca mt bng khi mà tt c các trng ca bng ó s c tr v. nh giá thuc tính CommandText nh là tên ca mt th tc lu tr sn. Ch nh rng thuc tính CommandText là mt câu lnh hoc mt th tc lu tr sn không tr v bt k dòng nào (ví d nh lnh thêm mi d liu ...). Cu trúc này luôn bao hàm adCmdText, adCmdStoredProc.

adCmdTable

adCmdTableDirect adCmdStoredProc

adExecuteNoRecords

Thuc tính Parameter c xác lp thông qua hai phng thc CreateParameter và Append Set parameter = command.CreateParameter (Name, Type, _ Direction, Size, Value) Name: tùy chn, chui xác nh tên ca i tng Parameter. Type, Direction: giá tr xác n kiu ca i tng Parameter

Trang 134

Visual Basic

Size: giá tr xác nh dài ti a ca giá tr i tng Parameter bng ký t hoc Byte. Value: bin xác nh giá tr ca Parameter truyn. Nhng giá tr có th ca thuc tính Direction: Hng adParamUnknown adParamInput adParamOutput adParamInputOutput adParamReturnValue Mô t Không bit chiu ca Parameter. Mc nh, xác nh ây là tham s u vào. Tham s u ra. Va là tham s u vào va là tham s u ra. ây là giá tr tr v.

Phng thc Append dùng a i tng Parameter va to vào tp hp. Chúng ta s xét qua ví d dau ây:

Public Sub ActiveConnectionX() Dim cnn1 As ADODB.Connection Dim cmdByRoyalty As ADODB.Command Dim prmByRoyalty As ADODB.Parameter Dim rstByRoyalty As ADODB.Recordset Dim rstAuthors As ADODB.Recordset Dim intRoyalty As Integer Dim strAuthorID As String Dim strCnn As String ' nh ngha 1 i tng command cho mt th tc lu tr sn Set cnn1 = New ADODB.Connection cnn1.Provider = "SQLOLEDB.1" cnn1.ConnectionString = "DATABASE=Pubs;" & _ "SERVER=(local);UID=user;PWD=user;" cnn1.Open Set cmdByRoyalty = New ADODB.Command Set cmdByRoyalty.ActiveConnection = cnn1 cmdByRoyalty.CommandText = "byroyalty" cmdByRoyalty.CommandType = adCmdStoredProc cmdByRoyalty.CommandTimeout = 15 ' nh ngha i s u vào cho th tc lu tr intRoyalty = Trim(InputBox( "Enter royalty:")) Set prmByRoyalty = New ADODB.Parameter

Trang 135

Visual Basic

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

III.4 i tng Field

Dùng i tng Field và tp hp Fields khi ta mun truy cp giá tr ca mt trng ca mt Recordset nào ó, k thut này tng t nh i vi DAO.

IV. Dch v d liu t xa ca ADO

ây là k thut s dng th vin Remote Data Service (RDS) vn chuyn ADO Recordset t server n máy tính client Recordset kt qu c lu máy client và chúng c ngt kt ni n server. RDS là mt phn ca Microsoft Data Access Components (MDAC). Các thông tin v RDS có th tìm thy trang http://www.microsoft.com/data/. RDS gm 2 phn chính: - RDS 1.5 server: i kèm khi cài t Internet Information Server (IIS) 4.0. - RDS 1.5 client i kèm khi cài t Internet Explorer (IE) 4.0. Th vin ADODB gm các thành phn hot ng ch yu phía server (server side) nh các i tng Connection, Command, Error, Parameters ... S tht hiu qu nu s dng các thành phn này giao tip vi c s d liu. Tuy nhiên trong trng hp s dng các chc nng cn phi có phía client thì ta cn phi phân phi kèm theo Trang 136

Visual Basic

mt s tp tin và s dng ODBC cho mi máy client. i tng ADODB Recordset không th phân phi vi các thành phn ca RDS Client. Thay vào ó th vin i tng Microsoft ActiveX Data Objects RecordSet (ADOR) c s dng. Th vin này gm các thành phn hoàn toàn nm phía client và cho phép ta có các thao tác trên mt recordset tht s phía client. ADOR không có các i tng Connection, Command, Error, hay Parameters. ADOR có các chc nng cho phép phân phi recordset vi các thành phn RDS client. Mt ADO Recordset không th vn chuyn thông qua giao thc http. Thay vào ó RDS c s dng nhn và tng tác d liu t xa thông qua http. Mt proxy RDS c s dng kim soát t xa mt ADOR Recordset ngt kt ni truyn thông qua giao thc http. Nh vy RDS là vt cha (container) cho phép lu tr và truy cp t xa các ADOR Recordset. Ta có th dùng i tng DataControl ca RDS nhn v i tng Recordset ca ADO t Internet. có th s dng k thut này, ta cn tham kho các thuc tính ch yu ca i tng DataControl. - Thuc tính Connect: DataControl.Connect = "DSN=DSNName;UID=usr;PWD=pw;" - Thuc tính Server: Xác nh máy ch Web cha ngun d liu bao gm tên và giao thc ni kt. - Thuc tính SQL: Là câu lnh truy vn nhn v i tng Recordset DataControl.SQL = "QueryString" - Thuc tính ExecuteOptions: xác nh vic thi hành các câu lnh truy vn mt cách ng b hay không, các giá tr là mt trong hai giá tr sau ây: Hng adcExecSync Thi hành ng b Mô t

adcExecAsync Mc nh, Thi hành không ng b. - Thuc tính ReadyState: Xác nh trng thái ca iu khin. Giá tr adcReadyStateLoaded Mô t Câu truy vn hin hành vn ang còn thc hin và cha có mt dòng nào c tr v. i tng Recordset ca RDS.DataControl cha th s dng. Tp hp dòng ban u ã c tr v và cha trong i tng Recordset, các dòng tip theo vn ang c tr v. Tt c các dòng u ã c cha trong i tng Recordset.

adcReadyStateInteractive

adcReadyStateComplete

- Phng thc Refresh: thi hành câu truy vn. - Thuc tính Recordset: tr v Recordset kt qu. Trang 137

Visual Basic

Recordset = DataControl.Recordset - Phng thc DoEvents: ây là hàm ca VB, nó s tr iu khin cho h iu hành thc hin các quá trình khác.

Trang 138

Visual Basic

Chng 12: MÔI TRNG D LIU (DATA ENVIRONMENT)

Mc tiêu: Chng này gii thiu cách thc s dng môi trng d liu (Data Environment), cách thc to các ng dng tng tác vi c s d liu cách nhanh chóng trong VB 6.0. Hc xong chng này, sinh viên có th: - S dng thành tho môi trng d liu ca VB 6.0 to các biu mu nhp liu. - S dng thành tho môi trng d liu thit k các câu truy vn d liu cách trc quan, iu này làm cho vic thit k ng dng c tin li hn. Kin thc có liên quan: - Th vin i tng ADO. - Câu lnh SQL truy vn d liu. Tài liu tham kho: - T hc Lp trình c s d liu vi Visual Basic 6.0 trong 21 ngày (T1) ­ Chng 9, trang 395 - Nguyn ình Tê (ch biên) - Nhà xut bn Giáo dc - 2001.

Trang 139

Visual Basic

I) GII THIU V TRÌNH DATA ENVIRONMENT DESIGNER (DED)

Gii thiu Công c DED là mt giao din trc quan rt mnh ca Visual Basic xây dng các form ràng buc d liu. DED cho phép ta thao tác vi mt vài hp thoi to kt ni n ngun d liu (c s d liu) & các ngun record (dataset hay recordset) mt cách nhanh chóng. Cu trúc chi tit ca DED Giao din DED ActiveX Designer DED s dng mt lp các i tng Visual Basic gi là ActiveX Designers. ActiveX Designers c np vào môi trng son tho VB cng nh các mc khác nh Menu, Form, Modul... Tuy nhiên cách thc thao tác trên nó khác vi các mc này. Khi thao tác vi DED ta s dng các mc trên menu ca trình son tho DED xây dng mt tp hoàn chnh các kt ni (Connection) & các lnh d liu (Command) s dng trong chng trình. Trong lúc thao tác vi DED, ta có s dng 2 i tng khác nhau: i tng kt ni d liu (Connection): i tng này nh ngha mt kt ni gia chng trình ca ta & ngun d liu. i tng lnh d liu (Command): nh ngha mt tp các record ly ra t kt ni d liu trên. Khi xác nh i tng Command, ta cn ch nh i tng Command này ly d liu t âu trong c s d liu bng vic xác lp ngun d liu (Data of Source). Ngun d liu này xác lp cách thc ly d liu t c s d liu: ly thông qua mt TABLE, VIEW, STORED PROCEDURE, SQL... Mi khi mt i tng Command c to ra & c gi thc thi, mt RecordSet ca i tng Command này cng c kích hot. Lúc này tên ca RecordSet tng ng là: rs + Tên Command Ví d: Ta to mt i tng Command có tên là comHH, lúc ó tên RecordSet tng ng là: rscomHH. Khi i tng Command c to ra, lúc này nu mun thao tác trên i tng Command này, ta s thao tác trên RecordSet tng ng ca nó. Thit k các Form ràng buc d liu không cn mã lnh: DED cho phép ta thit k các Form ràng buc d liu không cn mã lnh. Ví d: Vi CSDL HangHoa.MDB; ta thit k mt Form cho Table HANGHOA bng cách s dng trình DED nh sau: Bc 1: To ni kt n c s d liu HangHoa.MDB: Nu mc Data Environment không có sn trong Project Explorer, ta chn Project\Components..., ánh du vào mc Data Environment trong tùy chn Designers, nhp OK. Chn Project\More ActiveX Designers... thêm Data Environment vào môi trng son tho. Trong i tng Connection1, chn Properties, mt ca s hin lên: Trang 140

Visual Basic

Hình 12.1: Thit lp ni kt d liu Chn Microsoft Jet 4.0 OLE DB Provider; chn Next. Chn c s d liu ta mun thao tác trong mc Select or Enter a Database Name Box; ây ta chn CSDL HANGHOA.MDB (gi s nm trong ng dn D:\DED\HangHoa.Mdb). Nhp nút Test Connection kim tra ni kt vi CSDL có b li hay không? Ta s nhp OK nu ni kt này thành công (nu không ta phi kim tra li). Bc 2: Thêm i tng Command vào DED: Nhp chut phi vào Connection1 và chn ADD COMMAND trên menu, mt i tng command c to ra vi tên là Command1 trong Data Environment. Nhp chut phi vào i tng mi to này, chn Properties chn cách thc thao tác i vi i tng Command này. Trong ó, mc Database Object: Table; ObjectName: THANGHOA. Bc 3: DED cho phép ta kéo mt tp các trng (Field) t mt i tng d liu trong DED vào 1 Form chun trong Windows và th nó ti mt ni nào ó.

Trang 141

Visual Basic

Hình 12.2: Dùng DED to Form ràng buc d liu Bc 4: Lúc này khi chy chng trình, ta thy Form này ã hot ng; tuy nhiên ta không th thy các nút nhn iu khin vic di chuyn các record (u, Cui, Trc, Sau); hay các nút nhn hành ng (Cp nht, Thêm, Xóa); ta cn t b sung. Các thun li ca DED: Xây dng các Form ràng buc d liu cách d dàng. Có nhiu tùy chn nh ngha kt ni và các lnh d liu. Ta có mt giao din thân thin hn thao tác các kt ni & lnh. DED s dng ActiveX Data Objects (ADO) truy cp d liu.

II) S DNG TRÌNH DATA ENVIRONMENT DESIGNER

Quá trình xây dng mt chng trình thao tác CSDL vi VB thông qua DED bao gm 3 bc: - Chn mt trình cung cp d liu (ODBC hay OLE DB). - To mt kt ni d liu (file MDB, SQL Server...) - To mt lnh d liu (i tng Command). Trang 142

Visual Basic

1) Các trình cung cp d liu (Data Provider)

- Data Provider là mt thành phn iu khin s tng tác ca chng trình ca ta & ngun d liu. Mt trình cung cp rt quen thuc là trình cung cp ODBC (Open Database Connectivity: kt ni c s d liu m). Giao din này da trên ý tng là mi ngun d liu có th c thao tác vi ngôn ng SQL. - Mt giao din mi c a ra bi Microsoft: giao din OLE DB. Giao din này không yêu cu ngun d liu phi nhm vào vic s dng ngôn ng truy vn SQL; thay vào ó, giao din OLE DB cho phép trình cung cp d liu chp nhn ngôn ng truy vn nào mà h mun h tr. Do vy các ngun d liu c m rng ra t các CSDL truyn thng: dBase, SQL Server...; n các ngun d liu khác nh các tp tin, th mc ca h iu hành... - VB 6 gi kèm vi các trình cung cp d liu nh sau: Microsoft Jet 3.51 OLE DB Provider. Microsoft Jet 4.0 OLE DB Provider. Microsoft OLE DB Provider for SQL Server. Microsoft OLE DB Provider for Oracle. Microsoft OLE DB Provider for ODBC Drivers.

2) To mt kt ni d liu vi DED

o To mt d án mi; b sung Data Enviroment vào d án ca ta nh chn Project/Add Data Environment. Khi la chn mc này, môi trng DED s hin th; s dng ca s Properties thit lp thuc tính Name là: datHH. ây, ta s s dng DED kt ni vi CSDL HANGHOA.MDB. o Sa li thuc tính Name ca Connection1 là conHH; sau ó chut phi lên conHH, chn Properties. hp thoi u tiên, ta phi chn mt trình cung cp d liu, ây chn Microsoft Jet 4.0 OLE DB Provider, nhn Next tip tc. Tip theo ta cn nhp chính xác ng dn n tp tin CSDL, chng hn ây là: H:\Visual Basic\HangHoa.Mdb. Cui cùng, nhn nút Test Connection kim tra vic ni kt d liu chính xác hay không?

Trang 143

Visual Basic

Hình 12.3: i tng Connection

3) To i tng Command:

o Xây dng mt i tng Command kt ni trc tip vi Table (bng) THANGHOA trong file d liu HangHoa.mdb. o Nhp chut phi trên 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 này, ta chuyn qua nhãn Advanced & thit lp LockType là 3 ­ Optimistic (mc nhiên là 1 ­ Read Only); Cursor Location: Use client-side cursor. Nh vy ta mi có th cp nht Record Set t chng trình ca ta. o Tr li giao din DED, ta c:

Hình 12.4: i tng Command Trang 144

Visual Basic

4) To mt ng dng nhp liu vi DED

o môi trng DED, ta kéo các trng ca Command comHH vào Form1, chnh sa li cho thích 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 ó kéo iu khin này vào Form, thit lp các thuc tính cho thích hp. Name: grdHH. DataSource: datHH DataMember: comHH o Nhp chut phi lên iu khin DataGrid, chn Retrieve Structure. Sau ó, lu d án & chy chng trình ta c:

Hình 12.5: Form hin th table THangHoa o Thêm các nút hành ng (Thêm, Sa, Xóa,...). Chng hn các s kin cmd_Them_Click, cmdXoa_Click, cmdLuu_Click, cmdHuy_Click c x lý:

Trang 145

Visual Basic

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

Visual Basic

Exit Sub Xuly: MsgBox Err.Description, vbCritical + vbSystemModal, "Error" End Sub Nh vy, ta ã thit k xong mt Form cho phép hin th thông tin các hàng hóa, Form này cho phép sa i, thêm mi các mu tin trong bng THANGHOA ca CSDL HANGHOA.MDB.

5) i tng Command s dng câu lnh SQL

o Ta có th thit k các câu lnh SQL cách nhanh chóng nh s dng trình SQL Builder. o Vi trình DataEnvironment trên, ta thêm mt i tng Command na; nhng i tng Command này ly d liu t câu lnh SQL. ây, ta cn hin th thông tin v các loi hàng hóa & tên loi hàng tng ng. o Sau khi thêm mt i tng Command vào, ta sa các thuc tính nh sau: Name: comHH_Loai Source of Data : SQL Statement. o Sau ó chn SQL Builder trong ca s thuc tính; mt ca s hin ra. Kéo bng THangHoa & TLoaiHang trong ca s DataView vào khung Diagram ca trình SQL Builder. Check chn các trng tng ng (MaHang, TenHang, DVTinh, TenLoai). Ta c kt qu sau (hình di). o óng ca s này li; ta c mt i tng Command mi.

Trang 147

Visual Basic

Diagram

SQL

Hình 12.7: Ca s SQL Builder

Trang 148

Visual Basic

Chng 13:

Mc tiêu:

THIT LP BÁO CÁO

Chng này gii thiu cách thc to báo cáo bao gm hin th d liu cng nh sp xp và phân nhóm d liu. Hc xong chng này, sinh viên có th: o S dng tính nng Report ca Microsoft Access trong các ng dng nh. o S dng Data Report to báo biu. o S dng Crystal Report, công c mnh to báo biu. Kin thc cn thit: - Th vin i tng ActiveX Data Objects (ADO). - Môi trng d liu Data Environment. Tài liu tham kho: Visual Basic 6.0 và Lp trình c s d liu - Chng 21, trang 637 Nguyn Th Ngc Mai (ch biên) ­ Nhà xut bn Giáo dc - 2001.

Trang 149

Visual Basic

I. S DNG MICROSOFT ACCESS LP BÁO CÁO

Có hai k thut thi hành mt báo cáo Access t ng dng VB: - S dng Automation phóng mt th hin (instance) ca Microsoft Access, thi hành báo cáo trc tip t trong ng dng. Automation là mt k thut cho phép giao tip gia các ng dng trên Windows. ây Microsoft Access s làm Automation Server. - Dùng VSREPORTS ca VideoSoft cho phép ngi s dng VB thi hành báo cáo ca Microsoft Access bt k máy ca h có cài t Microsoft Access hay là không. ây là mt iu khin ActiveX chuyn i báo cáo t tp tin MDB thành mt nh dng mà ta có th cung cp cùng ng dng. Trong bài ging này, chúng tôi ch trình bày cách th nht mc dù cách này có nhiu hn ch. i vi cách th hai, có th thc hin c ta cn phi cài t mt s th vin liên kt ng (DLL). Các th vin này tng i khó tìm và nht là chúng òi hi bn quyn. Bt li ca k thut dùng Automation là buc ngi dùng phi chy mt th hin (instance) ca Microsoft Access cng nh phi cài t Microsoft Access trên máy. lp trình theo k thut này, ta tin hành theo các bc sau: - Tham chiu n Microsoft Access bng cách t menu Project chn Preferences -> Microsoft Access 9.0 Object Library. - Sau ó ta to mt i tng nh là i tng ng dng ca Access nh sau: Dim MSAccess As Access.Application - Sau ó ta cn to mi i tng này cng nh to mt tham chiu n c s d liu cha báo cáo: Set MSAccess = New Access.Application MSAccess.OpenCurrentDatabase("Database Name") - S dng thuc tính DoCmd thi hành báo cáo: MSAccess.DoCmd.OpenReport "Report Name",acViewNormal - óng c s d liu: MSAccess.CloseCurrentDatabase Lu ý: Tránh dùng ràng buc tr vi Automation Phiên bn c ca Automation là OLE Automation, dùng trong VB 3.0 và Microsoft Access 2.0. Trong VB 3.0, ta có th vit chng trình nh sau: Dim MSAccess As Object Set MSAccess = CreateObject("Access.Application") on chng trình trên hot ng tt i vi VB 3.0 nhng có mt cách khác tt hn. Thay vì dùng kiu Object, ta nên ch rõ kiu d liu i tng mà Automation Server cung cp (chng hn Access.Aplication nu là Access). Bi vì khi ó, VB không cn thi hành câu truy vn trên Automation Server mi Trang 150

Visual Basic

khi ta truy cp nó xác nh kiu i tng cn to. K thut này gi là ràng buc tr, gi ây ch ph hp vi 2 tình hung: - Ta không bit trc kiu i tng Automation Server. - Ta ang s dng mt môi trng phát trin ng dng không h tr ràng buc sm, nh VBScript hay ASP.

II. S DNG THIT K DATA REPORT

Thit k báo cáo dùng DataReport là im mi trong VB6, ây là mt công c c h tr bi VB6, cung cp mt cách trc quan v thit k báo cáo và có u dim là rt d dùng.

II.1 Thit k vi DataReport

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

Hình 13.1 a thit k báo cáo v án Các thành phn ca mt báo cáo nh sau: -

Report Header: Hin th mt ln u báo cáo.

- Report Footer: Hin th mt ln cui báo cáo. - Page Header: Hin th ti u mi trang. - Page Footer: Hin th ti cui mi trang.

- Detail Section: Hin th các dòng d liu.

- Mt hoc nhiu nhóm u cui hin th ti u và cui mi phân nhóm. Các iu khin ca thit k Data Report nh sau: - iu khin nhãn (Rpt Label). - iu khin hp vn bn (Rpt Textbox). - iu khin nh (Rpt Image). - iu khin hình dng (Rpt Shape).

Trang 151

Visual Basic

- iu khin các hàm tính toán (Report Function: rptFuncSum, rptFuncAve, rptFuncMin, rptFuncMax...).

Hình 13.2 Ca s Data Report Các iu khin ca Data Report cng ging nh là các iu khin chun trên biu mu, chúng có th ràng buc vi ngun d liu. Tuy nhiên, ta có mt cách thc khác d dàng hn ó là s dng môi trng d liu (c gii thiu chng trc). S dng DataEnvironment trong vic to DataReport: Quá trình thc hin tri qua các bc sau: - To i tng Command. - Kéo th các trng ca i tng Command này vào thit k ca Report. - Thêm các tiêu u trang & cui trang. Ví d: To báo cáo v các sinh viên trong bng STUDENT thuc c s d liu Student. - Bc 1: To mt CSDL Student trong Environment, thêm mt Command cho phép ly d Student. ni kt n trình Data i tng liu t bng

- Bc 2: Kéo th các trng cn hin th vào báo cáo ti mc Detail, ch gi li trng liên quan n thông tin d liu (t trong phn Detail Section). Thit Hình 13.3 Thit lp Data Environment Trang 152

Visual Basic

lp tên trng di dng ting Vit ti phn Page Header. - Bc 3: Cung cp các thông tin cho phép DataReport nhn d liu t âu bng cách xác lp: DataSource: DataEnvironment1, DataMember: Student.

Hình 13.4: Report khi ã kéo th các trng Thit k báo biu có phân nhóm d liu - Chn i tng Command ca trình DataEnvironment cn nhóm c s d liu. - Hin th trang thuc tính, chn Tab Grouping. - Chn tùy chn Group Command Object. - t tên cho nhóm cng nh chn các trng tham gia vào nhóm d liu. - t li giá tr cho thuc tính Data Member ch n ni kt mi ã nhóm d liu. - Chn báo cáo thit k, n chut phi, chn Insert Group Header/Footer. - Chn tên trng nhóm d liu a Hình 13.4: Nhóm d liu vào on Group Header. Khi ó báo cáo c thit k nh sau:

Trang 153

Visual Basic

II.2 Xem và xut Data Report

Ta có th xem thông tin và in báo cáo trên mt ca s riêng bit s dng ch Print Preview bng cách thi hành phng thc Show. Khi ó báo cáo s c hin th nh sau:

Hình 13.6: Thi hành báo cáo trong VB

Khi ó ngi s dng có th duyt qua các trang nu nh báo cáo có nhiu trang, cng nh chn mt trang báo cáo nào ó in. Ngoài ra ngi dùng có th chn Export báo cáo ca mình ra tp tin có nh dng khác, các loi nh dng ây có th là tp tin vn bn, tp tin HTML. Ta có th chn la xut mt s trang c th nào ó hoc toàn b báo cáo.

Hình 13.7: Hp thoi xut báo cáo

Trang 154

Visual Basic

III. S DNG CRYSTAL REPORT LP BÁO CÁO

Crystal Report cho phép to báo cáo c s d liu trong ng dng vit bng VB. Nó gm 2 phn ch yu: - Trình thit k báo cáo xác nh d liu s a vào báo cáo và cách th hin ca báo cáo. - Mt iu khin ActiveX cho phép thi hành, hin th, iu khin và in báo cáo khi thi hành ng dng. Crystal Report không có sn khi cài VB6, ta cn cài t thêm. Chng trình cài t Crystal Report ch có trên bn Professional. Chy tp tin Crystl32.exe trong th mc \COMMON\TOOLS\VB\CRYSREPT. III.1 Thit k báo cáo Mt im khác bit khi dùng Crystal Report là ta không thit lp báo cáo i ôi vi ng dng c th. Ta s xây dng báo cáo trc và sau ó s gi thi hành báo cáo t phía ng dng, báo cáo không phi là mt b phn thuc ng dng. Ca s thit k Crystal Report nh hình bên di:

Hình 13.8 Ca s Crystal Report Khi ta chn to mt báo cáo mi, Crystal Report trình bày mt hp thoi cho phép la chn mt trong nhiu nhng khuôn mu báo cáo ã nh sn.

Hình 13.9 Hp thoi chn các mu Trang 155

Visual Basic

Kiu báo cáo Standard Listing Cross-Tab Mail label Summary Graph Top N Drill Down Another

Mô t Báo cáo sp xp thông tin theo dòng và ct, cho phép nhóm d liu. Báo cáo là danh sách d liu liên tc không có tng kt hay trng tng cng.. Sp xp d liu theo hai chiu. Báo cáo c thit k in d liu theo ct cho nhãn th. Báo cáo ch hin th thông tin tng quát, không cha d liu chi tit. Báo cáo th hin d liu mt cách trc quan bng biu Báo cáo cho phép ch hin th mt s mu tin c chn Báo cáo cho phép nhn úp chut lên d liu tng quát hin th d liu chi tit. Các báo cáo có khuôn mu do ngi dùng nh ngha trc ó.

Chúng ta xét qua mt ví d s dng Crystal Report lp báo cáo - Khi ng Crystal Report và chn New, chn kiu báo cáo là Standard. - Tip theo chn Data File. - Trong hp thoi chn tp tin c s d liu, ta ch n mt tp tin c s d liu, sau ó n nút Done. Ta s thy các bng cng nh các quan h gia các bng c hin th.

Hình 13.10 Hp thoi quan h gia các bng

Quan h gia các bng ã c xác nh mc thit k c s d liu nên ta không cn phi thay i nhng mi liên kt này. - Nhn nút Next qua bc tip theo, ta s chn nhng trng tham gia vào báo cáo. - Bc k tip ta chn qua Tab Sort thc hin vic sp xp d liu. - Tab Style cho phép chn các dng khác nhau ca báo cáo. - Sau khi ã thit k xong, ta n Save lu li báo cáo. Trang 156

Visual Basic

Khi m li báo cáo ã thit k, ta thy Crystal Report hin th báo cáo hai mc, thit k và duyt trc.

Hình 13.11: Ca s xem trc báo cáo và thit k báo cáo III.2. Thi hành báo cáo trong ng dng thông qua iu khin ActiveX ca Crystal Report Bc u tiên có th thi hành báo cáo Crystal Report, ta cn tham kho n iu khin ActiveX ca Crystal Report bng cách thêm công c Crystal Report vào án ca chúng ta. Chn công c Crystal Report và a vào ng dng, biu tng trên hp công c nh sau. Trong s kin Click ca mt nút lnh, ta vit on mã sau: Private Sub Command1_Click() CrystalReport1.ReportFileName = "d:\VB\bc.rpt" CrystalReport1.PrintReport End Sub Thuc tính ReportFileName xác nh ng dn cng nh tên tp tin báo cáo. Vic thi hành báo cáo c thc hin nh vào thuc tính PrintReport. Ngoài ra, báo cáo có th thi hành bng cách hin th trên mt ca s khác hoc là xut ra thng trên máy in, ... Ta thit t thuc tính ó qua hp thoi thuc tính.

Hình 13.11 Hp thoi xác lp thuc tính Trang 157

Visual Basic

Báo cáo thi hành trên mt ca s riêng bit, ta có th la chn nhiu công vic nh xem qua các trang, in n báo cáo, phóng to thu nh ...

Hình 13.12: Báo cáo Crystal Report

LI KT

Chng Thit lp báo cáo cng là chng kt thúc ca giáo trình Visual Basic. Tuy nhiên lp trình s kin và lp trình c s d liu vi VB ch là mt phn trong nhng kh nng mà VB mang li. Hy vng chúng tôi s gp li bn c trong nhng chuyên khác ca VB.

Trang 158

Information

CHNG 1

158 pages

Report File (DMCA)

Our content is added by our users. We aim to remove reported files within 1 working day. Please use this link to notify us:

Report this file as copyright or inappropriate

97011