Lp trình trc quan
202
BÀI 22. S DNG CONTROL DATA
22.1. Control Data
T VB5, Visual Basic cho lp trình viên mt control để truy cp cơ s d liu, tên nó ch
đơn sơData. Như ta biết, có mt cơ s d liu Microsoft gói kèm theo VB6 - đó là Jet
Database Engine. Jet Database Engine là công c x lý d liu ca MS Access Database
Management System.
Cho đến VB5, Microsoft cho ta ba k thut chính:
- DAO (Data Acess Objects): DAO là k thut đặc bit ca Microsoft, ch để dùng vi
Jet Database Engine. Nó rt d dùng, hiu năng và tin, nhưng b gii hn trong phm vi
MS Access. Du vy, nó rt thnh hành vì rt d s dng và mang li hiu qu cao.
- ODBC (Open Database Connectivity): ODBC được thiết kế để cho phép người s
dng ni vi đủ loi databases mà ch dùng mt method duy nht. Điu này ct bt gánh
nng cho lp trình viên, để ch cn hc mt k thut lp trình duy nht mà có th làm vic
vi bt c loi database nào. Nht là khi sau này nếu cn phi thay đổi loi database, như
nâng cp t Access lên SQLServer chng hn, thì s sa đổi v coding rt ít. Khi dùng
ODBC chung vi DAO, ta có th cho Access Database ni vi các databases khác. Có mt
bt li ca ODBC là hơi phc tp khi s dng.
- RDO (Remote Data Object): Mt trong nhng lý do chính để RDO được thiết kế
gii quyết khó khăn v s rc ri ca ODBC. Cách lp trình vi RDO đơn gin như DAO,
nhưng tht ra nó dùng ODBC nên cho phép người s dng ni vi nhiu databases. Tuy
nhiên, RDO không được thnh hành lm.
VB6 tiếp tc h tr các k thut nói trên, và cho thêm mt k thut truy cp database mi,
rt quan trng, đó là ADO (ActiveX Data Objects). Trong mt bài ti ta s kho sát v ADO
vi nhng ưu đim ca nó. Tuy nhiên, vì DAO rt đơn gin và hiu năng nên ta vn có th
tiếp tc dùng nó rt hu hiu trong hu hết các áp dng. Do đó bài này và bài kế s tp trung
vào nhng k thut lp trình ph biến vi DAO.
Lp trình trc quan
203
Cách dùng gin tin ca control Data là đặt nó lên mt Form ri làm vic vi nhng
Properties ca nó. Chúng ta hãy bt đầu mt d án VB6 mi, cho nó tên DataControl bng
cách click tên project trong Project Explorer bên phi ri edit property Name trong Properties
Window.
DoubleClick lên Icon ca Control Data trong Toolbox. Mt Control Data tên Data1 s hin
ra trên Form. Mun cho nó nm bên dưới Form, ging như mt StatusBar, hãy set property
Align ca nó trong Properties Window thành 2 - Align Bottom.
Click bên phi dòng property DatabaseName, kế đó click lên nút browse có ba chm để
chn mt file Access dabase t giao thoi cho Data1. đây ta chn E:\Program
Files\Microsoft Visual Studio\VB98\BIBLIO.MDB , trong computer ca chúng ta có th
nm trên disk C hay D.
Trong chương trình này ta mun làm vic vi table Titles ca database BIBLIO.MDB, để xem
và edit các records. Để ý property DefaultType ca Data1 có tr s 2- UseJet, tc là dùng k
thut DAO, thay vì dùng k thut ODBC.
Lp trình trc quan
204
Khi chúng ta click lên property Recordsource ca Data1, ri click lên cái tam giác nh
bên phi, mt ComboBox s m ra cho ta thy danh sách các tables trong database. Chúng ta
hãy chn Titles. Để ý property RecordsetType ca Data1 có tr s0 - Table:
Thut ng mi mà ta s dùng thường xuyên khi truy cp d liu trong VB6 là Recordset
(b các bn ghi). Recordset là mt tp hp các bn ghi, nó có th cha mt s các bn ghi hay
không có bn ghi nào c. Mt bn ghi trong Recordset có th là mt bn ghi ly t mt Table.
Trong trường hp y có th ta ly v tt c records trong table hay ch nhng records tha mãn
mt điu kin, ví d như ta ch mun ly các bn ghi ca nhng sách xut bn trước năm 1990
(Year Published < 1990).
Mt bn ghi trong Recordset cũng có th là tp hp các ct (columns) t hai hay nhiu
tables qua các mi liên h one-to-one và one-to-many. Ví d như khi ly các records t table
Titles, ta mun có thêm chi tiết tên công ty (Company Name) và đin thoi (Telephone) ca
nhà xut bn (table Publishers) bng cách dùng Foreign Key PubID trong table Titles làm
Primary Key trong table Publishers để ly các chi tiết y. Nếu chúng ta chưa nm vng ý nim
Foreign Key thì hãy đọc li bài Database.
Trong trường hp y ta có th xem như có mt virtual table là tp hp ca hai tables Titles
và Publishers.
Bây gi chúng ta hãy đặt lên Form 4 labels vi captions: Title, Year Published, ISBN và
Publisher ID. Kế đó cho thêm 4 textboxes tương ng và đặt tên chúng là txtTitle,
txtYearPublished, txtISBN và txtPublisherID.
Lp trình trc quan
205
Chn textbox txtTitle, ri set property Datasource ca nó trong Properties Window thành
Data1. Khi click lên property Datafield ca txtTitle và m ComboBox ra chúng ta s thy lit
kê tên các Fields trong table Titles. Đó là vì Data1 được coi như trung gian ly table Titles t
database. đây ta s chn ct Title.
Lp li công tác này cho 3 textboxes kia, và chn các ct Year Published (năm xut bn),
ISBN (s lý lch trong thư vin quc tế), và PubID (s lý lch nhà xut bn) làm Datafield cho
chúng.
Ti đây, mc du chưa viết mt dòng code, ta có th chy chương trình được ri. Nó s
hin th chi tiết ca bn ghi đầu tiên trong table Titles như dưới đây:
Chúng ta có th bm các nút di chuyn Navigator Buttons để đi đến các bn ghi đầu (first),
trước (previous), kế (next) và cui (last). Mi ln chúng ta di chuyn đến mt bn ghi mi là
chi tiết ca bn ghi y s hin th. Nếu không dùng các Navigator Buttons, ta cũng có th code
Lp trình trc quan
206
để làm công tác tương đưong bng cách gi các Recordset methods MoveFirst, MovePrevious,
MoveNext và MoveLast.
Khi bn ghi cui ca Recordset đang hin th, nếu ta gi method MoveLast thì property
EOF (End-Of-File) ca Recordset tr thành True. Tương t như vy, khi bn ghi th nht ca
Recordset đang hin th, nếu ta gi method MovePrevious thì property BOF (Begin-Of-File)
ca Recordset tr thành True. Nếu mt Recordset không có cha mt bn ghi nào c thì c hai
properties EOF và BOF đều là True.
Đặc tính hin th d liu trong các textboxex theo đúng bn ghi hin thi (current record)
được gi là data binding hay data bound (ràng buc d liu) và control TextBox h tr chc
năng này được nói là Data Aware (nhn biết d liu).
Khi bn ghi đầu tiên đang hin th, nếu chúng ta edit Year Published để đổi t 1985 thành
1983 ri click Navigator button Next để hin th bn ghi th nhì, kế đó click Navigator button
Previous để hin th li bn ghi đầu tiên thì chúng ta s thy là field Year Published ca bn
ghi đầu tiên đã tht s được thay đổi (updated) thành 1983.
Điu này có nghĩa rng khi Data1 navigates t bn ghi này đến bn ghi khác thì nếu bn ghi
này đã có s thay đổi vì người s dng edited, nó lưu tr s thay đổi đó trước khi di chuyn.
Chưa chc là chúng ta mun điu này, do đó, nếu chúng ta không mun người s dng tình c
edit mt bn ghi thì chúng ta có th set property Locked ca các textboxes y thành True để
người s dng không th edit các textboxes như trong hình dưới đây: