LẬP TRÌNH TRỰC QUAN - PHẦN II VISUAL BASIC - BÀI 22 pdf

11 365 0
LẬP TRÌNH TRỰC QUAN - PHẦN II VISUAL BASIC - BÀI 22 pdf

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Lập trình trực quan BÀI 22 SỬ DỤNG CONTROL DATA 22.1 Control Data Từ VB5, Visual Basic cho lập trình viên control để truy cập sở liệu, tên đơn sơ Data Như ta biết, có sỡ liệu Microsoft gói kèm theo VB6 - Jet Database Engine Jet Database Engine công cụ xử lý liệu MS Access Database Management System Cho đến VB5, Microsoft cho ta ba kỹ thuật chính: - DAO (Data Acess Objects): DAO kỹ thuật đặc biệt Microsoft, để dùng với Jet Database Engine Nó dễ dùng, hiệu tiện, bị giới hạn phạm vi MS Access Dầu vậy, thịnh hành dễ sử dụng mang lại hiệu cao - ODBC (Open Database Connectivity): ODBC thiết kế phép người sử dụng nối với đủ loại databases mà dùng method Điều cất bớt gánh nặng cho lập trình viên, để cần học kỹ thuật lập trình mà làm việc với loại database Nhất sau cần phải thay đổi loại database, nâng cấp từ Access lên SQLServer chẳng hạn, sửa đổi coding Khi dùng ODBC chung với DAO, ta cho Access Database nối với databases khác Có bất lợi ODBC phức tạp sử dụng - RDO (Remote Data Object): Một lý để RDO thiết kế giải khó khăn rắc rối ODBC Cách lập trình với RDO đơn giản DAO, thật dùng ODBC nên cho phép người sử dụng nối với nhiều databases Tuy nhiên, RDO không thịnh hành VB6 tiếp tục hổ trợ kỹ thuật nói trên, cho thêm kỹ thuật truy cập database mới, quan trọng, ADO (ActiveX Data Objects) Trong tới ta khảo sát ADO với ưu điểm Tuy nhiên, DAO đơn giản hiệu nên ta tiếp tục dùng hữu hiệu hầu hết áp dụng Do kế tập trung vào kỹ thuật lập trình phổ biến với DAO 202 Lập trình trực quan Cách dùng giản tiện control Data đặt lên Form làm việc với Properties Chúng ta bắt đầu dự án VB6 mới, cho tên DataControl cách click tên project Project Explorer bên phải edit property Name Properties Window DoubleClick lên Icon Control Data Toolbox Một Control Data tên Data1 Form Muốn cho nằm bên Form, giống StatusBar, set property Align Properties Window thành - Align Bottom Click bên phải dịng property DatabaseName, kế click lên nút browse có ba chấm để chọn file Access dabase từ giao thoại cho Data1 Ở ta chọn E:\Program Files\Microsoft Visual Studio\VB98\BIBLIO.MDB , computer nằm disk C hay D Trong chương trình ta muốn làm việc với table Titles database BIBLIO.MDB, để xem edit records Để ý property DefaultType Data1 có trị số 2- UseJet, tức dùng kỹ thuật DAO, thay dùng kỹ thuật ODBC 203 Lập trình trực quan Khi click lên property Recordsource Data1, click lên tam giác nhỏ bên phải, ComboBox mở cho ta thấy danh sách tables database Chúng ta chọn Titles Để ý property RecordsetType Data1 có trị số - Table: Thuật ngữ mà ta dùng thường xuyên truy cập liệu VB6 Recordset (bộ ghi) Recordset tập hợp ghi, chứa số ghi hay khơng có ghi Một ghi Recordset ghi lấy từ Table Trong trường hợp ta lấy tất records table hay records thỏa mãn điều kiện, ví dụ ta muốn lấy ghi sách xuất trước năm 1990 (Year Published < 1990) Một ghi Recordset tập hợp cột (columns) từ hai hay nhiều tables qua mối liên hệ one-to-one one-to-many Ví dụ lấy records từ table Titles, ta muốn có thêm chi tiết tên cơng ty (Company Name) điện thoại (Telephone) nhà xuất (table Publishers) cách dùng Foreign Key PubID table Titles làm Primary Key table Publishers để lấy chi tiết Nếu chưa nắm vững ý niệm Foreign Key đọc lại Database Trong trường hợp ta xem có virtual table tập hợp hai tables Titles Publishers Bây đặt lên Form labels với captions: Title, Year Published, ISBN Publisher ID Kế cho thêm textboxes tương ứng đặt tên chúng txtTitle, txtYearPublished, txtISBN txtPublisherID 204 Lập trình trực quan Chọn textbox txtTitle, set property Datasource Properties Window thành Data1 Khi click lên property Datafield txtTitle mở ComboBox thấy liệt kê tên Fields table Titles Đó Data1 coi trung gian lấy table Titles từ database Ở ta chọn cột Title Lập lại công tác cho textboxes kia, chọn cột Year Published (năm xuất bản), ISBN (số lý lịch thư viện quốc tế), PubID (số lý lịch nhà xuất bản) làm Datafield cho chúng Tới đây, chưa viết dịng code, ta chạy chương trình Nó hiển thị chi tiết ghi table Titles đây: Chúng ta bấm nút di chuyển Navigator Buttons để đến ghi đầu (first), trước (previous), kế (next) cuối (last) Mỗi lần di chuyển đến ghi chi tiết ghi hiển thị Nếu không dùng Navigator Buttons, ta code 205 Lập trình trực quan để làm cơng tác tương đưong cách gọi Recordset methods MoveFirst, MovePrevious, MoveNext MoveLast Khi ghi cuối Recordset hiển thị, ta gọi method MoveLast property EOF (End-Of-File) Recordset trở thành True Tương tự vậy, ghi thứ Recordset hiển thị, ta gọi method MovePrevious property BOF (Begin-Of-File) Recordset trở thành True Nếu Recordset khơng có chứa ghi hai properties EOF BOF True Đặc tính hiển thị liệu textboxex theo ghi thời (current record) gọi data binding hay data bound (ràng buộc liệu) control TextBox hỗ trợ chức nói Data Aware (nhận biết liệu) Khi ghi hiển thị, edit Year Published để đổi từ 1985 thành 1983 click Navigator button Next để hiển thị ghi thứ nhì, kế click Navigator button Previous để hiển thị lại ghi thấy field Year Published ghi thật thay đổi (updated) thành 1983 Điều có nghĩa Data1 navigates từ ghi đến ghi khác ghi có thay đổi người sử dụng edited, lưu trữ thay đổi trước di chuyển Chưa muốn điều này, đó, khơng muốn người sử dụng tình cờ edit ghi set property Locked textboxes thành True để người sử dụng khơng thể edit textboxes hình đây: 206 Lập trình trực quan 22.2 Chỉ định vị trí Database lúc chạy chương trình Cách định tên DatabaseName giai đoạn thiết kế (at design time) ta dùng trước tiện lợi nguy hiểm, ta cài chương trình lên computer khách, chưa file database nằm folder có tên Ví dụ computer database nằm folder E:\Program Files\Microsoft Visual Studio\VB98, computer khách database nằm folder C:\VB6\DataControl chẳng hạn Do đó, chương trình khởi động ta nên xác định lại vị trí database Giả dụ ta muốn để database folder với chương trình chạy, ta dùng property Path Application Object App sau: Dim AppFolder As String Private Sub Form_Load() ' Fetch Folder where this program EXE resides AppFolder = App.Path ' make sure it ends with a back slash If Right(AppFolder, 1) "\" Then AppFolder = AppFolder & "\" ' Assign Full path database filename to Data1 Data1.DatabaseName = AppFolder & "BIBLIO.MDB" End Sub Với cách code nói ta đảm bảo chương trình tìm thấy file database chỗ, không cần biết người ta cài chương trình đâu hard disk computer khách 22.3 Thêm bớt Records Chương trình dùng tạm đựợc, khơng cho ta phương tiện để thêm (add), bớt (delete) records Bây để vào Form buttons tên: cmdEdit, cmdNew, cmdDelete, cmdUpdate cmdCancel Mặc dầu khơng thấy, thật Control Data Data1 có property Recordset ta dùng Navigator buttons di chuyển từ ghi đến ghi khác Recordset Ta nói đến Notation (cách viết) Data1.Recordset, lần muốn lấy Recordset từ database ta dùng method Refresh Data1.Recordset.Refresh 207 Lập trình trực quan Lúc chuơng trình khởi động, người sử dụng xem (browsing) records hai buttons Update Cancel không cần phải làm việc Do ta Lock (khóa) textboxes disable (làm cho bất lực) hai buttons khơng cần dùng chúng Trong Sub SetControls đây, ta dùng parameter gọi Editing với trị số False hay True tùy theo người sử dụng Browse hay Edit, ta gọi Browse mode Edit mode Trong Edit mode, Textboxes unlocked (mở khóa) nút cmdNew, cmdDelete cmdEdit trở nên bất lực: Sub SetControls(ByVal Editing As Boolean) ' Lock/Unlock textboxes txtTitle.Locked = Not Editing txtYearPublished.Locked = Not Editing txtISBN.Locked = Not Editing txtPublisherID.Locked = Not Editing ' Enable/Disable buttons CmdUpdate.Enabled = Editing CmdCancel.Enabled = Editing CmdDelete.Enabled = Not Editing cmdNew.Enabled = Not Editing CmdEdit.Enabled = Not Editing End Sub Trong Browse mode, Form có dạng sau: Sub SetControls gọi Sub Form_Load chương trình khởi động Sub CmdEdit người sử dụng click nút Edit sau: 208 Lập trình trực quan Private Sub Form_Load() ' Fetch Folder where this program EXE resides AppFolder = App.Path ' make sure it ends with a back slash If Right(AppFolder, 1) "\" Then AppFolder = AppFolder & "\" ' Assign Full path database filename to Data1 Data1.DatabaseName = AppFolder & "BIBLIO.MDB" ' Place controls in Browse Mode SetControls (False) End Sub Private Sub CmdEdit_Click() ' Place controls in Edit Mode SetControls (True) End Sub Khi ta xóa ghi recordset, vị trí ghi (current record) khơng thay đổi Do đó, sau xóa ghi ta phải MoveNext Tuy nhiên, ta vừa xóa ghi cuối Recordset sau MoveNext, property EOF Recordset thành True Thành ta phải kiểm tra điều đó, lại phải MoveLast để hiển thị ghi cuối Recordset code Sub cmdDelete_Click đây: Private Sub CmdDelete_Click() On Error GoTo DeleteErr With Data1.Recordset ' Delete new record Delete ' Move to next record MoveNext If EOF Then MoveLast Exit Sub End With DeleteErr: MsgBox Err.Description Exit Sub End Sub Trong lúc code, ta Update (cập nhật) ghi Recordset method Update Nhưng ta gọi method Update Recordset Recordset Edit hay AddNew mode Ta đặt Recordset vào Edit mode cách gọi method Edit 209 Lập trình trực quan Recordset, ví dụ Data1.Recordset.Edit Tương tự vậy, ta đặt Recordset vào AddNew mode cách gọi method AddNew Recordset, ví dụ Data1.Recordset.AddNew Private Sub cmdNew_Click() ' Place Recordset into Recordset AddNew mode Data1.Recordset.AddNew ' Place controls in Edit Mode SetControls (True) End Sub Sau Recordset gọi method Update Recordset khỏi AddNew hay Edit modes Ta tự khỏi AddNew hay Edit modes, hay nói cho hủy bỏ pending (đang chờ đợi) Update cách gọi method CancelUpdate, ví dụ Data1.Recordset.CancelUpdate 22.4 Dùng DataBound Combo Trong chương trình ta hiển thị lý lịch nhà xuất (PubID) Title, khơng có thêm chi tiết Nếu chương trình lưu trữ PubID, hiển thị Company Name nhà xuất cho ta làm việc để khỏi phải nhớ số tốt Ta thực điều cách dùng Control DBCombo (Data Bound Combo) Chúng ta dùng IDE Menu Command Project | Components để chọn Microsoft Data Bound List Controls 6.0 click Apply 210 Lập trình trực quan Kế đó, thêm DBCombo tên DBCombo1 vào Form Vì ta cần Recordset khác để cung cấp Table Publisher cho DBCombo1, nên thêm control Data thứ nhì tên Data2 vào Form Cho Data2, set property DatabaseName thành E:\Program Files\Microsoft Visual Studio\VB98\BIBLIO.MDB property RecordSource thành Publishers Để không cho người ta thấy hình Data2 lúc run-time, set property Visible thành False Mục đích dùng DBCombo1 hiển thị Company Name nhà xuất bản, đằng sau lưng khơng có thay đổi, tức ta làm việc với PubID cho record Title Data1 Khi người sử dụng click lên DBCombo1 để chọn nhà xuất bản, ta theo Company Name mà chứa PubID tương ứng record Title Data1 Do có nhiều thứ ta phải đặt cho DBCombo1 sau: Property Value Chú thích RowSource Data2 Đây datasource DBCombo1 Nó cung cấp table Publishers Listfield Company Khi RowSource phía chọn rồi, Combo property Name Listfield hiển thị fields table Publishers Company Name field RowSource mà ta muốn hiển thị DBCombo1 DataSource Data1 Đây datasource ghi mà ta muốn edit, tức ghi table Titles Datafield PubID Field (của record Title) thay đổi BoundColumn PubID Field RowSource (table Publishers) tương ứng với item user chọn DBCombo1 (Company Name) 211 Lập trình trực quan Khi Edit mode user chọn Company Name khác DBCombo1 click nút Update thấy Textbox txtPublisherID đổi theo hiển thị số lý lịch PubID Nếu trước Update muốn thấy PubID hiển thị Textbox txtPublisherID dùng Event Click DBCombo1 sau: Private Sub DBCombo1_Click(Area As Integer) ' Hiển thị new PuBID txtPublisherID.Text = DBCombo1.BoundText End Sub Property BoundText DBCombo1 trị số BoundColumn mà ta truy cập (viết hay đọc) Ví dụ muốn thêm ghi Title default PubID 324, tức Company Name= "GLOBAL ENGINEERING" Chúng ta assign trị số 324 vào property BoundText DBCombo1 Sub cmdNew_Click sau: Private Sub cmdNew_Click() ' Place Recordset into Recordset AddNew mode Data1.Recordset.AddNew ' Default Publisher is "GLOBAL ENGINEERING", i.e PubID=324 DBCombo1.BoundText = 324 ' Place controls in Edit Mode SetControls (True) End Sub 212 ... 206 Lập trình trực quan 22. 2 Chỉ định vị trí Database lúc chạy chương trình Cách định tên DatabaseName giai đoạn thiết kế (at design time) ta dùng trước tiện lợi nguy hiểm, ta cài chương trình. .. muốn lấy Recordset từ database ta dùng method Refresh Data1.Recordset.Refresh 207 Lập trình trực quan Lúc chuơng trình khởi động, người sử dụng xem (browsing) records hai buttons Update Cancel... Form có dạng sau: Sub SetControls gọi Sub Form_Load chương trình khởi động Sub CmdEdit người sử dụng click nút Edit sau: 208 Lập trình trực quan Private Sub Form_Load() '' Fetch Folder where this

Ngày đăng: 24/07/2014, 16:21

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan