Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 27 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
27
Dung lượng
1,63 MB
Nội dung
DBEngine DBEngine Workspace Database TableDef Field Index Field QueryDef Recordset Container Relation User Group Group User Error object only object only Object and Collection Field Parameter Field Document Field Hình 13.1 Mô hình cây phân c p DAO, trình bày m i qua h gi a các đ i t ng cấ ố ệ ữ ố ượ ơ s d li u. ở ữ ệ M t cách đ phân lo i s ph c t p c a mô hình đ i t ng ộ ể ạ ự ứ ạ ủ ố ượ DAO là b t đ u b ngắ ầ ằ đ i t ng ố ượ Database và xem xét các t p h p c a nó. T p h p là nh ng b các đ iậ ợ ủ ậ ợ ữ ộ ố t ng quan h v i nhâu; đ i t ng ượ ệ ớ ố ượ Database có các t p h p các đ i t ng nhậ ợ ố ượ ư sau: Thông qua các t p h p s h u b i đ i t ng ậ ợ ở ữ ở ố ượ Database, ta có th thao tác trên dể ữ li u và c u trúc c a m t c s d li u, t o các đ i t ng c s d li u m i, vàệ ấ ủ ộ ơ ở ữ ệ ạ ố ượ ơ ở ữ ệ ớ ki m tra c u trúc và d li u ch a trong m t c s d li u.ể ấ ữ ệ ứ ộ ơ ở ữ ệ Trong l p trình DAO, có m t t p h p c t lõi g m các k thu t thông d ng đ c sậ ộ ậ ợ ố ồ ỹ ậ ụ ượ ử d ng g n nh cho m i ch ng trình. Chúng bao g m:ụ ầ ư ọ ươ ồ • Thi hành câu truy v n SELECT đ l y v các d li u t c s d li u ấ ể ấ ề ữ ệ ừ ơ ở ữ ệ • Duy t qua t ng m u tin trong m t ệ ừ ẩ ộ recordset. • Thi hành câu truy v n hành đ ng (bao g m các câu truy v n ấ ộ ồ ấ update, delete và append). • S a đ i c u trúc c s d li u.ử ổ ấ ơ ở ữ ệ • X lý l i phát sinh b i truy c p c s d li u.ử ỗ ở ậ ơ ở ữ ệ K thu t này làm vi c r t t t v i c s d li u Access. ỹ ậ ệ ấ ố ớ ơ ở ữ ệ 13.1.1L p trình v i đ i t ngậ ớ ố ượ Đ s d ng t t các đ i t ng c a DAO b n ph i hi u căn b n v đ i t ng. T tể ử ụ ố ố ượ ủ ạ ả ể ả ề ố ượ ấ c đ i t ng bao g m các ph n t sau:ả ố ượ ồ ầ ử • Các thu c tính ộ : là nh ng d li u g n li n v i đ i t ng g m 1 ki u dữ ữ ệ ắ ề ớ ố ượ ồ ể ữ li u chu n (nh interger, string ) hay 1 t p h p đ i t ng trong nó. Ví d :ệ ẩ ư ậ ợ ố ượ ụ Recordset ch a trong nó là t p h p ứ ậ ợ Fields. • Các ph ng th c ươ ứ : là các hành đ ng mà đ i t ng có th thi hành. Chúng cóộ ố ượ ể th ho t đ ng nh các hàm ( tr v d li u ) hay các th t c conể ạ ộ ư ả ề ữ ệ ủ ụ • Các s ki n:ự ệ là các thông đi p mà đ i t ng có th g i đ n các ng d ngệ ố ượ ể ử ế ứ ụ đang s d ng đ i t ng. ử ụ ố ượ DAO cũng có các s ki n riêng.ự ệ 13.1.2S d ng đi u khi n DAO Data ử ụ ề ể Ta có th s d ng đi u khi n DAO data đ k t n i v i m t c s d li u Jet c aể ử ụ ề ể ể ế ố ớ ộ ơ ở ữ ệ ủ Microsoft. M c dù v i s xu t hi n c a đi u khi n m nh h n, ặ ớ ự ấ ệ ủ ề ể ạ ơ ADO Data, vi c sệ ử d ng đi u khi n ụ ề ể DAO Data b gi m b t, nh ng v n t n t i lý do đ s d ng đi uị ả ớ ư ẫ ồ ạ ể ử ụ ề khi n c đi n DAO data. Ngoài ra, nó còn có kh năng k t n i v i các ngu n dể ổ ể ả ế ố ớ ồ ữ li u nh các t p tin dBASE, văn b n, b ng tính Excel mà không c n ph i dùngệ ư ậ ả ả ầ ả ODBC (n i k t c s d li u m ).ố ế ơ ở ữ ệ ở L u ý : ư Nguyên lý c b n c a đi u khi n DAO t ng t v i đi u khi n ơ ả ủ ề ể ươ ự ớ ề ể ADO Data, ch khác ph n chi ti t. Đ s d ng đi u khi n, ta gán tên c a t p tin c sỉ ở ầ ế ể ử ụ ề ể ủ ậ ơ ở d li u vào thu c tính ữ ệ ộ DatabaseName r i ch n m t b ng ho c m t ngu n d li uồ ọ ộ ả ặ ộ ồ ữ ệ nào khác trong thu c tính ộ RecordSource. Sau cùng, ta s ràng bu c các đi u khi nẽ ộ ề ể giao di n ng i s d ng nh là các h p văn b n v i đi u khi n b ng cách ch raệ ườ ử ụ ư ộ ả ớ ề ể ằ ỉ giá tr cho thu c tính ị ộ DataSource và DataField c a t ng đi u khi n giao di nủ ừ ề ể ệ ng i s d ngườ ử ụ 13.1.3S d ng thu c tính Connect c a đi u khi n DAO Data đử ụ ộ ủ ề ể ể truy c p ngu n d li u bên ngoàiậ ồ ữ ệ Thu c tính ộ Connect xác đ nh lo i c s d li u k t n i đ n đi u khi n ị ạ ơ ở ữ ệ ế ố ề ề ể Data. Theo m c đ nh, thu c tính này đ c ch đ nh là Microsoft Access., nh ng ta có th s aặ ị ộ ượ ỉ ị ư ể ử đ i ch đ nh này n u ta mu n k t n i v i m t ki u d li u không ph i Access. Cácổ ỉ ị ế ố ế ố ớ ộ ể ữ ệ ả ki u d li u này đ c g i là các ki u d li u bên ngoài.ể ữ ệ ượ ọ ể ữ ệ Jet h tr các ki u c s d li u trên máy tính cá nhân sau đây:ỗ ợ ể ơ ở ữ ệ • dBASE III,IV và 5.0 • Phiên b n Excel 3.0, 4.0, 5.0 và 8.0ả • Phiên b n Foxpro 2.0, 2.5, 2.6 và 3.0ả • Lotus spreadsheet v i đ nh d ng WK1, WK3 và WK4.ớ ị ạ • Phiên b n Paradox 3.x, 4.x và 5.xả • T p tin văn b n ASCII có phân cách.ậ ả Ví d : S d ng đi u khi n Data đ n i v i file excel 5.0 là excel-db.xlsụ ử ụ ề ể ể ố ớ Thu c tính : Connect = Excel 5.0; DatabaseName= excel-db.xls; RecordSource =ộ Sheet$ L u ý : DAO không h tr m t s ho t đ ng trên c s d li u bên ngoài. Đ cư ỗ ợ ộ ố ạ ộ ơ ở ữ ệ ặ bi t, c s d li u đó không h tr các th t c DAO nh t o c s d li u,ệ ơ ở ữ ệ ỗ ợ ủ ụ ư ạ ơ ở ữ ệ tr ng , đ nh nghĩa truy v n. Chúng ch h tr v i c s d li u Jet. ườ ị ấ ỉ ỗ ợ ớ ơ ở ữ ệ 13.2 S d ng DAO đ làm vi c v i d li uử ụ ể ệ ớ ữ ệ DAO đ c dùng ch y u đ thao tác trên d li u trong m t c s d li u đã có.ượ ủ ế ể ữ ệ ộ ơ ở ữ ệ Thi hành truy v n, c p nh t m u tin, và thi hành các ho t đ ng b o trì là s tr ngấ ậ ậ ẩ ạ ộ ả ở ườ c a DAO. ủ 13.2.1Dùng đ i t ng DataBase đ k t n i v i m t CSDLố ượ ể ế ố ớ ộ Đ i t ng ố ượ Database là n i đ ng d ng b t đ u ph n l n các truy c p c s dơ ể ứ ụ ắ ầ ầ ớ ậ ơ ở ữ li u c a nó. Đ dùng đ i t ng ệ ủ ể ố ượ Database, ta b t đ u l p tham chi u đ n Microsoftắ ầ ậ ế ế DAOs trong menu Project References c a Visual Basic Đi u này s cho phép ngủ ề ẽ ứ d ng tăng c ng truy c p đ n m i đ i t ng do DAO cung c p.ụ ườ ậ ế ọ ố ượ ấ Đ th c hi n đi u này, ta theo các b c sau:ể ự ệ ề ướ 1. T menu ừ Project, ch n ọ References. 2. H p tho i ộ ạ References xu t hi n. T danh sách các th vi n, ch n vào h pấ ệ ừ ư ệ ọ ộ đánh d u “ấ Microsoft DAO 3.5.1 Object Library”. 3. Nh n OK. Gi đây, ta có th dùng đ i t ng đ c cung c p b i th vi nấ ờ ể ố ượ ượ ấ ở ư ệ đ i t ng ố ượ DAO. B c k ti p là khai báo m t bi n đ i t ng c s d li u trong ch ng trình :ướ ế ế ộ ế ố ượ ơ ở ữ ệ ươ Dim db As Database N u ng d ng đ c thi t k đ làm vi c v i m t c s d li u duy nh t, t t nh tế ứ ụ ượ ế ế ể ệ ớ ộ ơ ở ữ ệ ấ ố ấ ta nên khai báo bi n ế Database m c mô-dun c a bi u m u chính c a ng d ng.ở ứ ủ ể ẫ ủ ứ ụ N u nhi u bi u m u ng d ng c n truy c p đ n m t c s d li u, ta nên t oế ề ể ẫ ứ ụ ầ ậ ế ộ ơ ở ữ ệ ạ m t l p qu n lý k t n i đ n c s d li u.ộ ớ ả ế ố ế ơ ở ữ ệ 13.2.1.1 S d ng ph ng th c ử ụ ươ ứ OpenDatabase đ t o m t đ iể ạ ộ ố t ng Databaseượ Đây là ph ng th c c a đ i t ng ươ ứ ủ ố ượ Workspace Ta dùng ph ng th c ươ ứ OpenDatabase đ t o m t đ i t ng ể ạ ộ ố ượ Database. Ph ng th cươ ứ này tr v m t đ i t ng ả ề ộ ố ượ Database ( do đó, tr c khi dùng ướ OpenDatabase, ta ph iả khai báo m t bi n đ i t ng có ki u là ộ ế ố ượ ể Database đ ch a giá tr tr v c aể ứ ị ả ề ủ ph ng th c ). ươ ứ Dim db As Database Set db = OpenDatabase(" \ \DB\novelty.mdb") Msgbox “The database “ & db.Name & “is now open.” Ph ng th c ươ ứ OpenDatabase có tham s b t bu c – tên c a c s d li u ta mu nố ắ ộ ủ ơ ở ữ ệ ố m . ở Cú pháp : (Đ i t ng ố ượ Workspace đ c m c đ nh )ượ ặ ị OpenDatabase(dbName, [options], [readonly],[connect]) Tham số Mô tả Options N u tham s này là ế ố true,c s d li u m trong ch đ lo i tr ;ơ ở ữ ệ ở ế ộ ạ ừ không ai có th m c s d li u trong ch đ lo i tr . N u giáể ở ơ ở ữ ệ ế ộ ạ ừ ế tr này là ị false, nh ng ng i khác có th m c s d li u.ữ ườ ể ở ơ ở ữ ệ Readonly N u tham s này là ế ố True, ta không th s a đ i c s d li u. ể ử ổ ơ ở ữ ệ Connect m t chu i ch ra cách th c k t n i v i c s d li u; chu iộ ỗ ỉ ứ ế ố ớ ơ ở ữ ệ ỗ th ng ch đ c dùng cho nh ng ngu n d li u ườ ỉ ượ ữ ồ ữ ệ Client / Server và ODBC. 13.2.1.2 2.1.2 S d ng ph ng th c Execute đ thi hành truy v nử ụ ươ ứ ể ấ hành đ ngộ S d ng ử ụ Execute c a đ i t ng ủ ố ượ Database đ thi hành m t câu l nh SQL trên SQL.ể ộ ệ Ph ng th c này nên dùng đ :ươ ứ ể • C p nh t, xoá hay sao chép m u tin (trong Access / Jet, ta g i là các truy v nậ ậ ẩ ọ ấ hành đ ng )ộ • S a c u trúc d li u ử ấ ữ ệ Các câu truy v n SELECT đ c thi hành qua ph ng th c ấ ượ ươ ứ OpenRecordset c aủ Database. 13.2.2S d ng đ i t ng ử ụ ố ượ Recordset Ta s d ng đ i t ng ử ụ ố ượ Recordset đ thao tác v i các m u tin trong DAO. Đ i t ngể ớ ẩ ố ượ Recordset cung c p m t giao di n h ng đ i t ng cho mô hình c s d li uấ ộ ệ ướ ố ượ ơ ở ữ ệ quan h liên quan đ n các b ng đ c chia thành nh ng m u tin và tr ng.ệ ế ả ượ ữ ẩ ườ Đ t o m t ể ạ ộ recordset, ta ch yêu s d ng ph ng th c ủ ử ụ ươ ứ OpenRecordset. 13.2.2.1 S d ng ph ng th c OpenRecordset đ t o m t đ iử ụ ươ ứ ể ạ ộ ố t ng Recordsetượ Trong DAO, các đ i t ng ố ượ Database, Connection, QueryDef, TableDef, và Recordset đ u có ph ng th c ề ươ ứ OpenRecordset. T t c đ u đ c dùng v i cùngấ ả ề ượ ớ m c đích; truy c p d li u ch a trong c s d li u. ụ ậ ữ ệ ứ ơ ở ữ ệ Ph ng th c ươ ứ OpenRecordset th c s là m t hàm tr v m t đ i t ng ự ự ộ ả ề ộ ố ượ Recordset, ta c n khai báo m t đ i t ng ầ ộ ố ượ Recordset tr c khi s d ng ướ ử ụ OpenRecordset. Dim db As Database Dim rs As Recordset Set db = OpenDatabase(" \ \db\novelty.mdb") Set rs = db.OpenRecordset("tblCustomer") Tham s b t bu c duy nh t c a ph ng th c ố ắ ộ ấ ủ ươ ứ OpenRecordset là ngu n d li u.ồ ữ ệ Đây là chu i ký t , theo nguyên t c là tên c a m t b ng ho c m t đ nh nghĩa truyỗ ự ắ ủ ộ ả ặ ộ ị v n ch a s n. Nh ng nó cũng có th là m t câu l nh SELECT SQL:ấ ứ ẵ ư ể ộ ệ Dim db As Database Dim rs As Recordset Set db = OpenDatabase(" \ \db\novelty.mdb") Set rs = db.OpenRecordset("SELECT * FROM tblCustomer" & _ " Order By [LastName]") 13.2.2.2 Tránh dùng d u trích d n ấ ẫ Ta th ng có câu l nh SQL:ườ ệ SELECT * FROM tblCustomer WHERE [LastName]="Smith" Làm th nào đ đ a vào ế ể ư OpenRecordset mà không b nh m d u ": ị ầ ấ Gi i pháp s d ng d u đ n :ả ử ụ ấ ơ Dim db As Database Dim rs As Recordset Set db = OpenDatabase(" \ \db\novelty.mdb") Set rs = db.OpenRecordset("SELECT * FROM tblCustomer" & _ " WHERE [LastName]='Smith'") N u tên ng i s d ng là nh p vào t text box txtLastName.Text thì đ a vào thế ườ ử ụ ậ ừ ư ế nào : Dim db As Database Dim rs As Recordset Set db = OpenDatabase(" \ \db\novelty.mdb") Set rs = db.OpenRecordset("SELECT * FROM tblCustomer" & _ " WHERE [LastName]='" & txtLastName.Text &"'") 13.2.3Ch ra các tuỳ ch n cho Recordsetỉ ọ Tham s ố Options c a ph ng th c ủ ươ ứ OpenRecordset xác đ nh m t s cách th c thaoị ộ ố ứ tác v i m u tin.ớ ẩ H ngằ Ý nghĩa dbOpentable Trong m t workspace c a Microsoft Jet, t o m t đ iộ ủ ạ ộ ố t ng Recordset ki u b ng ( b ng đ c đánh ch m c chượ ể ả ả ượ ỉ ụ ỉ s d ng m t b ng )ử ụ ộ ả dbOpenDynamic Trong m t workspace ki u ODBCDirect, m m t đ iộ ể ở ộ ố t ng Recordset ki u dynamic ( c p nh t đ c d li u khiượ ể ậ ậ ượ ữ ệ ng i khác s a đ i và truy v n d li u qua nhi u b ng )ườ ử ổ ấ ữ ệ ề ả dbOpenDynaset M m t đ i t ng ki u Dynaset ( tham chi u đ nở ộ ố ượ ể ế ế recordset c a nhi u b ng hoăc t nhi u c s d li uủ ề ả ừ ề ơ ở ữ ệ khác) dbOpenForwardonl y M m t đ i t ng Recordset mà con tr c a nó ch có thở ộ ố ượ ỏ ủ ỉ ể di chuy n t iể ớ 13.3 S d ng đ i t ng Field đ thao tác v i các tr ngử ụ ố ượ ể ớ ườ Đ i t ng ố ượ Field th hi n m t tr ng trong m t c u trúc d li u. Các đ i t ngể ệ ộ ườ ộ ấ ữ ệ ố ượ TableDef, Recordset, Relation và Index đ u ch a các t p h p tr ng.ề ứ ậ ợ ườ Ta có th l y giá tr c a m t tr ng b ng cách ki m tra giá tr c a thu c tínhể ấ ị ủ ộ ườ ằ ể ị ủ ộ Value c a m t đ i t ng ủ ộ ố ượ Field . (B i vì thu c tính ở ộ Value là thu c tính m c đ nhộ ặ ị c a đ i t ng ủ ố ượ Field, ta ch c n tham chi u đ n đ i t ng ỉ ầ ế ế ố ượ Field; ta không nh tấ thi t ph i tham chi u t ng minh đ n thu c tính Value).ế ả ế ườ ế ộ 13.4S d ng các ph ng th c duy t v i đ i t ng Recorset ử ụ ươ ứ ệ ớ ố ượ Sau khi t o xong m t đ i t ng ạ ộ ố ượ Recordset, ta có th dùng các ph ng th c duy tể ươ ứ ệ đ di chuy n qua t ng m u tin trong ể ể ừ ẩ recordset. Ta ch y u th c hi n đi u nàyủ ế ự ệ ề trong tr ng h p c n l y v d li u t m i m u tin trong m t recordset, m c dù taườ ợ ầ ấ ề ữ ệ ừ ọ ẩ ộ ặ còn có th s d ng chúng đ cho phép ng i s d ng ch duy t qua các m u tin.ể ử ụ ể ườ ử ụ ỉ ệ ẩ Các ph ng th c duy t c a m t đ i t ng ươ ứ ệ ủ ộ ố ượ Recrdset g m có:ồ • MoveFirst : di chuy n đ n m u tin đ u tiên trong recordset.ể ế ẩ ầ • MoveNext : di chuy n đ n m u tin k ti p trong recordset.ể ế ẩ ế ế • MovePrevious : di chuy n v m u tin tr c đó trong recordset.ể ề ẩ ướ • MoveLast: di chuy n đ n m u tin cu i cùng trong recordset.ể ế ẩ ố • Move : di chuy n m t s m u tin đã đ c ch đ nh tr c.ể ộ ố ẩ ượ ỉ ị ướ 13.4.1S d ng BOF và EOF đ duy t qua Recordsetử ụ ể ệ Ngoài các ph ng th c trên, đ i t ng ươ ứ ố ượ Recordset cung c p 2 thu c tính cho ta bi tấ ộ ế khi ta di chuy n v đ u ho c v cu i ể ề ầ ặ ề ố recordset. • Thu c tính ộ EOF(end of file) là True khi ta di chuy n quá m u tin cu i cùngể ẩ ố c a ủ recordset. • Thu c tính ộ BOF(begin of file) là True khi ta di chuy n đ n m t v trí tr cể ế ộ ị ướ m u tin th nh t trong ẩ ứ ấ recordset. BOF MÈu tin 1 MÈu tin 2 EOF Hình 13.2 BOF và EOF trong m t Recordset.ộ Do until EOF ‘perform action on the data or read values from fields rs.MoveNext Loop 13.4.2Dùng BOF và EOF đ xác đ nh m t Recordset có r ng hayể ị ộ ỗ không Thu c tính ộ BOF và EOF luôn có s n, th m chí trong m t ẵ ậ ộ recordset không có m uẩ tin. Trên th c t , cách t t nh t đ xem ự ế ố ấ ể recordset có ch a m u tin hay không làứ ẩ ki m tra giá tr c a c hai thu c tính ể ị ủ ả ộ EOF và BOF. N u c ế ả BOF và EOF đ u làề True, recordset không ch a m u tin. ứ ẩ 13.4.3Dùng thu c tính RecordCout đ xác đ nh s m u tin trongộ ể ị ố ẩ m t recordsetộ Ta dùng thu c tính RecordCount đ xác đ nh s m u tin trong m t recordset. Nh ngộ ể ị ố ẩ ộ ư l u ý r ng giá tr c a RecordCount s không h p l n u ta ch a chuy n đ n m uư ằ ị ủ ẽ ợ ệ ế ư ể ế ẩ tin cu i cùng trong ố Recordset. B i vì Jet x lý truy v n trên 2 giai đo n. Giai đo n đ u ch tr v d li u đ choở ử ấ ạ ạ ầ ỉ ả ề ữ ệ ủ ng d ng ho t đ ng mà không b ch m tr trong x lý. Giai đo n th hai thi hànhứ ụ ạ ộ ị ậ ễ ử ạ ứ bên d i, tr v toàn b d li u yêu c u đ truy v n hoàn ch nh. Jet th c hi nướ ả ề ộ ữ ệ ầ ể ấ ỉ ự ệ đi u này ch nh m m c tiêu tăng kh năng ho t đ ng, vì v y, vi c thi hành ngề ỉ ằ ụ ả ạ ộ ậ ệ ứ d ng không b c n tr trong khi ch tr v m t kh i l ng d li u l n. Ta khôngụ ị ả ở ờ ả ề ộ ố ượ ữ ệ ớ đi u khi n tr c ti p quá trình này, nh ng ta c n bi t r ng nó t n t i và cách th cề ể ự ế ư ầ ế ằ ồ ạ ứ làm vi c v i nó khi ta mu n bi t chính xác có bao nhiêu m u tin đang có trong m tệ ớ ố ế ẩ ộ recordset ch ng h n.ẳ ạ Option Explicit ' References: Microsoft DAO 3.51 Object Library Dim db As Database Private Sub Form_Load() Set db = OpenDatabase(" \ \db\novelty.mdb") End Sub Private Sub cmdCount_click() Dim rs As Recordset Set rs = db.OpenRecordset("tblInventory") rs.MoveLast MsgBox "There are " & rs.RecordCount & _ " items in inventory.", vbInformation End Sub L u ý : N u mu n xác đ nh s m u tin là 0 dùng thu c tính ư ế ố ị ố ẩ ộ BOF và EOF thay vì dùng RecordCount 13.4.4Dùng ph ng th c Edit đ s a đ i giá tr trong m t m u tin ươ ứ ể ử ổ ị ộ ẩ Ta có th s a đ i mâu tin hi n hành trong m t đ i t ng ể ử ổ ệ ộ ố ượ Recordset c p nh t đ cậ ậ ượ b ng cách dùng ph ng th c ằ ươ ứ Edit và Update c a ủ recordset. mu ng s a đ i giá trố ử ổ ị c a m t tr ng trong m t ủ ộ ườ ộ Recordset, theo các b c sau :ướ 1. Dùng các ph ng th c duy t c a đ i t ng ươ ứ ệ ủ ố ượ Recordset đ di chuy n đ nể ể ế m u tin c n s a đ i.ẩ ầ ử ổ 2. Thi hành ph ng th c ươ ứ Edit c a ủ recordset. 3. Dùng t p h p ậ ợ Fields c a đ i t ng ủ ố ượ Recordset đ gán giá tr cho tr ngể ị ườ trong m u tin :ẩ rs.Fields(“LastName”)= “Smith” ho cặ rs!LastName = “Smith” 4. L u m u tin vào c s d li u b ng cách dùng ph ng th c ư ẩ ơ ở ữ ệ ằ ươ ứ Update c aủ Recordset. 13.4.5S d ng ph ng th c AddNew và Update đ t o m u tinử ụ ươ ứ ể ạ ẩ m iớ Ta có th t o m t m u tin m i trong đ i t ng ể ạ ộ ẩ ớ ố ượ Recordset c p nh t đ c b t kỳậ ậ ượ ấ b ng cách dùng ph ng th c ằ ươ ứ AddNew và Update. T o m t m u tin m i trong m tạ ộ ẩ ớ ộ recordset là quá trình 3 b c:ướ 1. Thi hành ph ng th c ươ ứ AddNew c a ủ RecordSet. Nó thêm m t m u tin m i,ộ ẩ ớ tr ng vào cu i c a ắ ố ủ recordset. 2. Gán giá tr cho m u tin m i b ng cách s d ng câu l nh gán mà ta th ngị ẩ ớ ằ ử ụ ệ ườ dùng v i các tr ng c s d li u. ớ ườ ơ ở ữ ệ 3. Dùng ph ng th c ươ ứ Update đ ghi m u tin vào c s d li u. ể ẩ ơ ở ữ ệ Option Explicit ' References: Microsoft DAO 3.51 Object Library Private Enum TextBoxes txtProduct = 0 txtCatalogNumber = 1 txtWholesalePrice = 2 txtRetailPrice = 3 End Enum Private db As Database Private rs As Recordset Private x As Integer Private Sub Form_Load() Set db = OpenDatabase(" \ \DB\novelty.mdb") Set rs = db.OpenRecordset("tblInventory") For x = txtProduct To txtRetailPrice TextBox(x).Enabled = False Next x cmdSave.Enabled = False cmdNew.Enabled = True End Sub Private Sub cmdNew_Click() ' Create a new record rs.AddNew ' Enable data entry controls For x = txtProduct To txtRetailPrice TextBox(x).Enabled = True Next x TextBox(txtProduct).SetFocus cmdSave.Enabled = True cmdNew.Enabled = False End Sub Private Sub cmdSave_Click() ' Map UI controls to fields rs.Fields("Product") = TextBox(txtProduct) rs.Fields("CatalogNumber") = TextBox(txtCatalogNumber) rs.Fields("WholesalePrice") = TextBox(txtWholesalePrice) rs.Fields("RetailPrice") = TextBox(txtRetailPrice) ' Commit data to database rs.Update ' Clear out UI For x = txtProduct To txtRetailPrice TextBox(x).Text = "" TextBox(x).Enabled = False Next x cmdSave.Enabled = False cmdNew.Enabled = True End Sub 13.4.6S d ng AppendChunk đ n i d li u vào m t tr ng nhử ụ ể ố ữ ệ ộ ườ ị phân Ta có th ch a d li u nh phân vào trong c s d li u. D li u nh phân bao g mể ứ ữ ệ ị ơ ở ữ ệ ữ ệ ị ồ hình nh hay t p tin âm thanh – nghĩa là b t kỳ nh ng gì ta mu n ch a không ch làả ậ ấ ữ ố ứ ỉ giá tr s hay chu i ký t . ị ố ỗ ự L u ý: ư Microsoft Access tham chi u đ n tr ng nh phân nh là tr ng OLEế ế ườ ị ư ườ Object (đ i t ng OLE). Ngoài ra, ta có th dùng k thu t ố ượ ể ỹ ậ AppendChunk này để n i thêm d li u vào m t tr ng memo cũng nh tr ng nh phân. Các ph ngố ữ ệ ộ ườ ư ườ ị ươ th c thao tác trên tr ng nh phân t n t i g n nh đ ng d ng trong c 3 mô hìnhứ ườ ị ồ ạ ầ ư ồ ạ ả đ i t ng truy c p d li u –ố ượ ậ ữ ệ DAO, RDO và ADO. Khi ta gán m t giá tr cho tr ng nh phân trong ch ng trình, ta c n thi hành m tộ ị ườ ị ươ ầ ộ s b c b sung đ l y d li u trong tr ng. B i vì d li u nh phân không cóố ướ ổ ể ấ ữ ệ ườ ở ữ ệ ị chi u dài c đ nh nh các ki u d li u khác; m t m u d li u nh phân có th lênề ố ị ư ể ữ ệ ộ ẩ ữ ệ ị ể đ n hàng mega- byte ho c h n.ế ặ ơ Vì v y, đ đ t m t m u d li u nh phân trong c s d li u, tr c h t ta ph iậ ể ặ ộ ẩ ữ ệ ị ơ ở ữ ệ ướ ế ả chia nó thành nhi u đo n d li u nh phân, ta n i nó vào tr ng b ng cách dùngề ạ ữ ệ ị ố ườ ằ ph ng th c ươ ứ AppendChunk c a đ i t ng ủ ố ượ Field c a ủ recordset. 13.4.7S d ng ph ng th c ử ụ ươ ứ Close đ đóng ể Recordset Ta th c hi n đi u này khi ch ng trình hoàn t t s d ng đ i t ng ự ệ ề ươ ấ ử ụ ố ượ Recordset: rs.Close Đi m đ c bi t quan tr ng khi đóng m t đ i t ng ể ặ ệ ọ ộ ố ượ Recordset là n u đ i t ng đ tế ố ượ ặ m t khoá (ộ lock) trên b ng . Đóng m t ả ộ Recordset s nh khoá ng d ng thi t l pẽ ả ứ ụ ế ậ trên đ i t ng c s d li u, cho phép ng i s d ng khác truy c p đ n nó.ố ượ ơ ở ữ ệ ườ ử ụ ậ ế L u ý r ng trong ư ằ DAO, Workspace, Connection, Database và QueryDef đ u cóề ph ng th cươ ứ Close 13.5Tìm ki m d li u trong Recordset và b ngế ữ ệ ả Sau khi t o m t c s d li u và nh p li u, ta c n m t cách đ đ nh v các m u tinạ ộ ơ ở ữ ệ ậ ệ ầ ộ ể ị ị ẩ riêng r trong m t ẽ ộ recordset. Quá trình đ nh v m t m u tin riêng r trong recordsetị ị ộ ẩ ẽ theo m t tiêu chí ch đ nh tr c nào đó trong ch ng trình g i là tìm ki m.ộ ỉ ị ướ ươ ọ ế Tìm ki m khác v i truy v n là m t truy v n thì tr v m t ế ớ ấ ộ ấ ả ề ộ recordset. Tìm ki mế duy t qua các m u tin trong recordset hi n hành đ tìm ra m t m u tin tho mãnệ ẩ ệ ể ộ ẩ ả tiêu chí ch đ nh. ỉ ị Có m t s k thu t tìm ki m d li u. S d ng ph ng th c nào là tuỳ thu c vàoộ ố ỹ ậ ế ữ ệ ử ụ ươ ứ ộ lo i c u trúc d li u ta đang truy c p :ạ ấ ữ ệ ậ • N u ta đang làm vi c v i m t recordset, ta dùng các ph ng th c ế ệ ớ ộ ươ ứ Find- FindFirst, FindNext, FindLast và FindPrevious. • N u ta truy c p tr c ti p đ n m t recordset ki u b ng, ta có th dùngế ậ ự ế ế ộ ể ả ể ph ng th c ươ ứ Seek đ đ nh v m u tin. Ph ng th c này khó l p trình h n,ể ị ị ẩ ươ ứ ậ ơ nh ng nó nhanh h n vì ta có th dùng m t ch m c c a b ng v i ph ngư ơ ể ộ ỉ ụ ủ ả ớ ươ th c ứ Seek. [...]... để tạo và sửa đổi các truy vấn chứa sẵn Ngoài việc tạo các truy vấn chứa sẵn, đối tượng QueryDef còn cho phép thi hành các truy vấn tham số hoá; đây là một láy do phổ biến để truy cập các đối tượng QueryDef thông qua lập trình DAO Ta còn có cách khác để tạo các truy vấn chứa sẵn thông qua DAO Đó là sử dụng Microsoft Access hay Visuald Data Manager của Visual Basic để tạo các truy vấn chứa sẵn Ta tạo. .. End If End Sub Ta có thể tạo bảng và trường theo cách chính quy Ta có Microsoft Access và Visual Data Manager của Visual Basic để làm việc này Ngoài ra, Để tạo bảng và các trường trong bảng cũng như mối quan hệ của bảng bằng chương trình ta dùng thêm phương thức CreateField của TableDef để tạo đối tượng Field và sử dụng phương thức CreateRelation của đối tượng Database Để tạo chỉ mục sử dụng phương... để tạo một bảng mới Để tạo một bảng mới, ta tạo một đối tượng kiểu TableDef và sau đó nối nó vào tập hợp TableDefs bằng cách sử dụng phương thức Append của tập hợp (Cách làm này tương tự cho nhiều kiểu đối tượng DAO khác dùng để tạo các thành phần cố định của một cơ sở dữ liệu ) Ví dụ sau đây dùng TableDef để tạo một bảng mới Đoạn chương trình này sử dụng đối tượng Field và tập hợp Fields; sẽ được trình. .. rs.MoveNext Loop Exit Sub ErrHandler: MsgBox "There was an error running the query " & _ "Are you sure you created it?" End Sub 13.6.2.4 Sử dụng đối tượng QueryDef để tạo truy vấn Ta có thể tạo một QueryDef bằng cách lập trình Để tạo một QueryDef, ta tạo một đối tượng QueryDef mới bằng cách sử dụng phương thức CreateQueryDef của đối tượng Database Phương thức này cho phép cung cấp một tên cho truy vấn và gán... thống nhất và quan trọng của lập trình DAO Nếu là người xử lý giởi, ta có thể tiến hành phần lớn các hoạt động ta từng làm trong thế giới truy cập cơ sở dữ liệu của Visual Basic 13.10Hỏi và đáp Hỏi: Dùng DAO có phù hợp với lập trình CLient / Server không ? Đáp: Có thể sử dụng DAO cho lập trình Client / Server, nhưng tốt hơn nên dùng ADO ADO cung cấp một giao diện chương trình tương tự như DAO, nhưng một... Mỗi lần tạo QueryDef, ta có thể thao tác với nó trong chương trình như ta vẫn thường làm Cho QueryDef một tên là để xác định xem truy vấn có được chứa vĩnh viễn trong cơ sở dữ liệu hay không Nếu ta muốn tạo một QueryDef mà không chứa vĩnh viễn trong cơ sở dữ liệu, chỉ cần truyền một chuỗi rỗng thay cho tham số thứ nhất của phương thức CreateQueryDef 13.6.2.5 Sử dụng đối tượng Parameter để tạo truy... qua; các thành phần này được phải cung cấp đủ khi truy vấn thi hành Ta tạo các truy vấn tham số hoá bởi vì chúng thi hành nhanh hơn các truy vấn xây dựng trong SQL chứa trong chương trình Visual Basic Điều này xảy ra vì bộ máy cơ sở dữ liệu biên dịch một truy vấn trước khi ta thi hành, giúp tối ưu hoá thi hành của truy vấn Chương 12 trình bày cú pháp của một truy vấn tham số hoá SELECT * FROM tblCustomer... như là AccessVersion và Build Vì vậy, ta có thể viết chương trình như sau: MsgBox db.Name Vậy, tại sao ta không viết chương trình để truy cập một thuộc tính của cơ sở dữ liệu : MsgBox db.Properties (“Name”) Câu trả lời là ta có thể t tạo các thuộc tính hiệu chỉnh và gán chúng đến bất kfy DAO nào ( không chỉ đến đối tượng Database), Ví dụ sau tạo một thuộc tính mới trong cơ sở dữ liệu Private Sub cmdCreate_Click()... DBError.Description Next End Sub 13.6 Tạo đối tượng để thao tác trên cấu trúc của một CSDL DAO cung cấp các thủ tục rất phong phú dùng để tạo cơ sở dữ liệu, bảng, trường, và các định nghĩa truy vấn Ngoài ra, DAO còn cho phép ta tạo kiểu dữ liệu hiệu chỉnh mới trong ứng dụng, chẳng hạn như các thuộc tính hiệu chỉnh của các đối tượng cơ sở dữ liệu và những kiểu tài liệu cơ sở dữ liệu mới 13.6. 1Tạo một CSDL Ta có thể... các báo cáo và xuất thông tin Visual Basic cho phép truy cập đến một số kỹ thuật Client / server mới hỗ trợ truy cập cơ sở dữ liệu hiệu quả hơn - Đặc biệt khi nó dùng để xuất thông tin hay thiết lập báo cáo 14.1 Sử dụng thiết kế DataReport Là điểm mới trong Visual Basic 6, thiết kế DataReport là cách tr ực quan đ ể tạo ra những báo cáo thích hợp trong môi trường phát tri ển Visual Basic Thi ết k ế DataReport, . Access và ể ạ ả ườ Visual Data Manager c a Visual Basic đ làm vi c này. ủ ể ệ Ngoài ra, Đ t o b ng và các tr ng trong b ng cũng nh m i quan h c a b ngể ạ ả ườ ả ư ố ệ ủ ả b ng ch ng trình ta dùng. QueryDef thông qua l p trình DAO. ậ Ta còn có cách khác đ t o các truy v n ch a s n thông qua DAO. Đó là s d ngể ạ ấ ứ ẵ ử ụ Microsoft Access hay Visuald Data Manager c a Visual Basic đ t o các truy. ng trình Visual Basic. Đi u này x y ra vì b máyự ứ ươ ề ả ộ c s d li u biên d ch m t truy v n tr c khi ta thi hành, giúp t i u hoá thi hànhơ ở ữ ệ ị ộ ấ ướ ố ư c a truy v n.ủ ấ Ch ng 12 trình