Tin học - Chương số 12: Linh kiện phần mềm và truy xuất database

pdf 28 trang vanle 2370
Bạn đang xem 20 trang mẫu của tài liệu "Tin học - Chương số 12: Linh kiện phần mềm và truy xuất database", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdftin_hoc_chuong_so_12_linh_kien_phan_mem_va_truy_xuat_databas.pdf

Nội dung text: Tin học - Chương số 12: Linh kiện phần mềm và truy xuất database

  1. MÔN TIN HỌC Ch ươ ng 12 LINH KI ỆN PHẦN MỀM & TRUY XUẤT DATABASE 12.1 T ổng quát v ề linh ki ện ph ần mềm 12.2 Cách t ạo và dùng linh ki ện ph ần mềm 12.3 T ổng quát v ề truy xu ất database 12.4 T ổng quát v ề debug mã ngu ồn VB Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 322
  2. 12.1 Tổng quát về linh ki ện phần mềm  Mục tiêu của qui trình phát tri ển ph ần mềm hướ ng đố i tượ ng là tạo ra ứng dụng có cấu trúc thu ần nh ất: tập các đố i tượ ng sống và tươ ng tác lẫn nhau.  Mỗi đố i tượ ng của ứng dụng có th ể đượ c tạo ra nh ờ 1 trong các cách sau:  ch ọn menu Project.Add Class Module để tạo ra 1 class module mới miêu tả cấu trúc chi ti ết của đố i tượ ng cần tạo ra: các thu ộc tính dữ li ệu và các method của đố i tượ ng.  ch ọn menu Project.Add File rồi khai báo đườ ng dẫn của file *.bas ch ứa 1 class module của 1 ứng dụng có sẵn để copy class module này vào Project ứng dụng hi ện tại (đây là 1 ph ươ ng pháp để th ừa kế thành qu ả).  sử dụng các điều khi ển sẵn có của VB để xây dựng form giao di ện.  'add' module *.ocx ch ứa 1 hay nhi ều ActiveX Control đang đượ c Windows qu ản lý vào Project ứng dụng hi ện tại để dùng chúng y nh ư các điều khi ển sẵn có của VB. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 323
  3. 12.2 Cách t ạo và dùng linh ki ện phần mềm  VB cho phép tạo linh ki ện ph ần mềm ActiveX Control nh ờ 1 trong 3 lo ại Project ActiveX EXE, ActiveX DLL và ActiveX Control. Tuy nhiên qui trình chi ti ết để tạo ActiveX Control vượ t quá khuôn kh ổ nội dung của môn học này.  Vi ệc dùng ActiveX Control cũng gi ống nh ư dùng control đị nh sẵn của VB, ta đặ t chúng 1 cách tr ực quan vào các form giao di ện với kích th ướ c và vị trí phù hợp với nhu cầu. Khi vi ết code, ta có th ể truy xu ất các thu ộc tính dữ li ệu và các method của ActiveX Control y nh ư truy xu ất các thành ph ần trong control đị nh sẵn. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 324
  4. Qui trình 'add' 1 ActiveX Control vào Project Để dùng 1 linh ki ện ph ần mềm ActiveX Control trong 1 form của Project ứng dụng, tr ướ c hết ta ph ải thêm nó vào cửa sổ Toolbox của Project theo qui trình điển hình sau đây: 2. ch ọn tab Controls, duy ệt và ch ọn m ục t ươ ng ứng, ch ọn OK. 1. ấn ph ải chu ột vào v ị trí tr ống c ủa Toolbox, ch ọn 3. C ửa mục Components sổ Toolbox sẽ ch ứa các icon miêu t ả các Act. Control trong module vừa ch ọn. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 325
  5. Thí dụ về cách dùng ActiveX Control  Để th ấy vi ệc dùng ActiveX Control hầu xây dựng ph ần mềm dễ dàng nh ư th ế nào, chúng ta hãy th ử vi ết 1 trình duy ệt Web với ch ức năng tượ ng tự nh ư IE của Microsoft, ta tạm gọi ứng dụng sắp vi ết này là MyIE.  Vi ệc vi ết ph ần mềm duy ệt Web từ đầ u rất khó kh ăn vì bạn cần ph ải trang bị nhi ều ki ến th ức nh ư: kỹ thu ật hi ển th ị văn bản và đồ họa, kỹ thu ật tươ ng tác với ng ườ i dùng thông qua bàn phím và chu ột, kỹ thu ật và qui trình vi ết 1 ch ươ ng trình dịch, lập trình mạng dùng socket, giao th ức truy xu ất tài nguyên Web HTTP (Hypertext Transfer Protocol), ngôn ng ữ DHTML,  Nh ưng toàn bộ các công vi ệc mà 1 trình duy ệt Web cần làm đã đượ c Microsoft đóng gói trong 1 linh ki ện ph ần mềm tên là WebBrowser. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 326
  6. Thí dụ về cách dùng ActiveX Control (tt)  ActiveX Control "WebBrowser" là 1 đố i tượ ng giao di ện ch ỉ ch ứa 1 vùng hi ển th ị nội dung hình ch ữ nh ật với vị trí và kích th ướ c do ng ườ i lập trình qui đị nh. Interface của nó bao gồm 3 lo ại: các thu ộc tính interface (kho ảng 27), các method (kho ảng 12) và các sự ki ện (kho ảng 16) mà ng ườ i dùng có th ể lập trình th ủ tục đáp ứng cho chúng. Ở đây chúng ta sẽ gi ới thi ệu 1 số method mà ta dùng trong vi ệc vi ết ứng dụng MyIE:  Navigate2 (URL, ) cho phép download trang Web hay file *.doc, *.xls, *.ppt, đượ c xác đị nh bởi URL, hi ển th ị nội dung của nó lên vùng hi ển th ị rồi ch ờ và xử lý sự tươ ng tác của ng ườ i dùng (ấn vào vùng liên kết, ).  GoBack cho phép quay về trang Web vừa truy xu ất (ngay tr ướ c trang hi ện hành).  GoForward cho phép ti ến tới trang Web (ngay sau trang hi ện hành).  GoHome cho phép hi ển th ị trang ch ủ.  Refresh cho phép download và hi ển th ị lại trang hi ện hành.  Stop cho phép dừng ngay vi ệc download và hi ển th ị trang Web hi ện hành.  ExecWB cho phép th ực thi 1 số hành vi trên trang web nh ư thay đổ i co ch ữ, in trang Web ra máy in, Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 327
  7. Giao di ện đề nghị của trình MyIE Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 328
  8. Chi ti ết các option trong menu và toolbar (tt) Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 329
  9. Phân tích & thi ết kế giao di ện  Trình MyIE có giao di ện SDI gồm 1 menu bar, 1 toolbar, 1 ComboBox li ệt kê các URL vừa truy xu ất, 1 ActiveX Control "WebBrowser" xử lý vi ệc truy xu ất, hi ển th ị các trang Web và ch ờ ph ục vụ các tươ ng tác của ng ườ i dùng. Qui trình chi ti ết xây dựng ứng dụng MyIE sẽ đượ c trình bày trong bài th ực hành số 4, ở đây ch ỉ tóm tắt các bướ c chính:  Tạo project lo ại "VB Application Wizard" và tr ả lời các bướ c Wizard để tạo Project.  Ch ọn Tools.Menu Editor để tạo menu bar theo đặ c tả của slide tr ướ c. Qui trình dùng Menu Editor đượ c gi ới thi ệu trong ch ươ ng 4.  Cũng đọ c lại ch ươ ng 4 để bi ết qui trình tạo/hi ệu ch ỉnh Toolbar.  tạo (v ẽ) ComboBox nh ập URL mới và li ệt kê các URL đã truy xu ất.  tạo (v ẽ) control "WebBrowser". Không cần vẽ ComboBox và WebBrowser chính xác vì code sẽ xác đị nh độ ng mỗi lần cửa sổ ch ươ ng trình thay đổ i.  tạo th ủ tục xử lý sự ki ện cho các menu option và toolbar button rồi vi ết code cho chúng. Code của các th ủ tục này ch ủ yếu làm "cò" và gọi các method tươ ng ứng trong đố i tượ ng WebBrowser th ực thi. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 330
  10. Phân tích & thi ết kế giao di ện (tt)  Lưu ý rằng tr ướ c khi thi ết kế đượ c giao di ện của trình MyIE, bạn cần 'add' các linh ki ện ActiveX Control sau đây:  Microsoft Common Dialog Control 6.0.  Microsoft Internet Control.  Microsoft Windows Common Controls 6.0.  Lưu ý rằng qui trình Wizard cho lo ại Project SDI đã tạo sẵn cho ta 1 form của ch ươ ng trình tên là frmMain. Form này đã ch ứa sẵn 1 menu bar, 1 Toolbar. Chúng ta ch ỉ cần hi ệu ch ỉnh lại 2 thành ph ần này ch ứ không cần ph ải tạo mới chúng. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 331
  11. 12.3 Tổng quát về truy xuất database  Trong ch ươ ng 11, chúng ta đã gi ới thi ệu qui trình truy xu ất dữ li ệu trên các file. Một trong các dạng file đã gi ới thi ệu là Random File, file này là danh sách các record dữ li ệu có cấu trúc và độ dài gi ống nhau, mỗi record ch ứa nhi ều field dữ li ệu, thí dụ file ch ứa các hồ sơ sinh viên, file ch ứa các hồ sơ nhà, file ch ứa các hồ sơ đườ ng xá  Hầu hết các ứng dụng hi ện nay (nh ất là các ứng dụng nghi ệp vụ) đề u ph ải truy xu ất các random file. Vi ệc qu ản lý các random file bao gồm nhi ều tác vụ nh ư tạo file mới với cấu trúc record cụ th ể, thêm/b ớt/hi ệu ch ỉnh/duy ệt các record, tìm ki ếm các record th ỏa mãn 1 tiêu chu ẩn nào đó, Để th ực hi ện các tác vụ trên (nh ất là tìm ki ếm record) hi ệu qu ả, tin cậy, ta cần nhi ều ki ến th ức khác nhau và ph ải tốn nhi ều công sức.  Random file (v ới 1 số sự cải ti ến và tăng cườ ng) đượ c gọi là database quan hệ. Có nhi ều format database quan hệ khác nhau đang đượ c dùng. Để gi ải phóng các ứng dụng kh ỏi vi ệc qu ản lý database, ng ườ i ta đã xây dựng ứng dụng đặ c bi ệt: DBMS (Database Management System). Ứng dụng sẽ nh ờ DBMS để truy xu ất database đượ c dễ dàng. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 332
  12. Các giao ti ếp l ập trình truy xuất database  Về nguyên tắc, ứng dụng VB (hay vi ết bằng ngôn ng ữ khác) có th ể truy xu ất 1 database bằng 1 trong các giao ti ếp lập trình sau đây: ADO (ActiveX Data Objects) DAO (Data Access Objects) ODBC (Open Database Connectivity) DBMS-Specific Language Direct to database (file)  Trong các giao ti ếp truy xu ất database trên ch ỉ có ADO là dễ dàng hơn cả, đạ i đa số tr ườ ng hợp ta ch ỉ tạo tr ực quan các ActiveX Control và khai báo các thu ộc tính của chúng là đã truy xu ất đượ c database mà không cần vi ết code. Trong tr ườ ng hợp ph ải vi ết code thì cũng rất ng ắn và dễ dàng. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 333
  13. Truy xu ất database dùng ADO thông qua các ActiveX Control  Truy xu ất database dùng ADO thông qua các ActiveX Control là ph ươ ng pháp truy xu ất database tr ực quan và dễ dàng nh ất.  Đa số các database trên Windows do Access tạo ra trong đó mỗi file database ch ứa nhi ều table, mỗi table là danh sách n record có cấu trúc chung nào đó. Qui trình điển hình truy xu ất các record của 1 table trong 1 database Access có th ể dùng các đố i tượ ng sau:  Dùng đố i tượ ng ADODB trong th ư vi ện "Microsoft ActiveX Data Objects 2.x Library" để có th ể li ệt kê các table trong 1 database Access.  Dùng đố i tượ ng Microsoft Data Control 6.0 để qu ản lý 1 RecordSet ch ứa tập các record của 1 table th ỏa mãn 1 điều ki ện nào đó.  Dùng đố i tượ ng Microsoft DataGrid Control 6.0 để hi ển th ị các record của 1 Data Control và cho phép user thêm/b ớt/hi ệu ch ỉnh các record.  Để th ấy rõ vi ệc truy xu ất database là rất dễ dàng, ta hãy vi ết 1 ứng dụng truy xu ất database dạng Access có giao di ện nh ư slide sau: Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 334
  14. Giao di ện đề ngh ị c ủa ứng d ụng truy xu ất database TextEdit qui đị nh file cần truy xu ất. ComboBox li ệt kê các Table trong file. ADODC qu ản lý các record th ỏa mãn 1 điều ki ện mong mu ốn (có th ể ẩn đí). DataGrid hi ển th ị các record trong ADODC để user kh ảo sát và hi ệu ch ỉnh. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 335
  15. Qui trình xây dựng ứng dụng của slide tr ước  Ta có th ể tạo project dạng "Standard EXE", để dùng các điều khi ển trong Form ta cần 'add' các ActiveX Control sau vào Project:  Microosft Data Control 6.0 để qu ản lý 1 RecordSet ch ứa tập các record trong 1 table.  Microsoft DataGrid Control 6.0 để hi ển th ị các record của 1 Data Control và cho phép user thêm/b ớt/hi ệu ch ỉnh các record.  Microsoft Common Dialog Control 6.0 để hi ển th ị cửa sổ duy ệt file và ch ọn file cần truy xu ất.  Để dùng đượ c đố i tượ ng ADODB trong Project, ta ch ọn menu Project.References để ch ọn th ư vi ện sau:  Microsoft ActiveX Data Objects 2.x Library, với x =1 | 2 | 3 | 4 | 5  Thi ết kế tr ực quan form theo slide tr ướ c, tạo các th ủ tục xử lý sự ki ện cho button Browse và sự ki ện Click cho ComboBox. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 336
  16. Chi ti ết các thủ t ục xử lý sự ki ện ' Th ủ t ục x ử lý click button Browse Private Sub cmdBrowse_Click() ' hi ển th ị dialog box duy ệt và ch ọn file CommonDialog1.ShowOpen ' hi ển th ị file đượ c ch ọn vào textbox txtFileName.Text = CommonDialog1.FileName ' duy ệt các table và hi ển th ị tên c ủa chúng vào ComboBox ListAccessTables (txtFileName.Text) End Sub ' Th ủ t ục x ử lý khi user ch ọn Table trong danh sách Private Sub cbTable_Click() Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;_ Data Source=" & txtFileName.Text Adodc1.RecordSource = cbTable.Text Adodc1.Refresh End Sub ' Th ủ t ục ph ục v ụ s ự ki ện form b ị thay đổ i kích th ướ c. Private Sub Form_Resize() ' v ẽ l ại DataGrid để phù h ợp v ới kích th ướ c m ới c ủa form ScaleMode = vbPixels RsList.Move 5, 60, Me.ScaleWidth - 10, Me.ScaleHeight - 65 End Sub Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 337
  17. Chi ti ết th ủ t ục hi ển th ị danh sách các Table c ủa database Private Sub ListAccessTables(strDBPath As String) Dim adoConnection As ADODB.Connection, adoRsFields As ADODB.Recordset While cbTable.ListCount <> 0 ' Xóa danh sách hi ện hành cbTable.RemoveItem 0 Wend ' T ạo 1 connection đế n file database Set adoConnection = New ADODB.Connection adoConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBPath ' Duy ệt các tables, 'add' tên c ủa t ừng table vào danh sách ComboBox. Set adoRsFields = adoConnection.OpenSchema(adSchemaTables) With adoRsFields Do While Not .EOF If .Fields("TABLE_TYPE") = "TABLE" Then cbTable.AddItem .Fields("TABLE_NAME") End If .MoveNext Loop End With adoRsFields.Close ' đóng và xóa recordset ch ứa các table Set adoRsFields = Nothing adoConnection.Close ' đóng và xóa connection đế n file database Set adoConnection = Nothing End Sub Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 338
  18. Lập trình truy xuất database dùng ADO  Đị nh ngh ĩa DSN (Data source name) miêu tả file database, nếu có bướ c này, ứng dụng truy xu ất database thông qua tên lu ận lý DSN mà không cần bi ết chính xác vị trí đườ ng dẫn file database và máy ch ứa file database. Dùng icon "ODBC " trong Control Panel của Windows để đị nh ngh ĩa DSN.  Trong ứng dụng ta dùng đố i tượ ng ADODB để truy xu ất database theo qui trình điển hình sau: 1. tạo 1 đố i tượ ng Connection miêu tả database cần truy xu ất. 2. gọi method OpenSchema trên đố i tượ ng Connection để tìm các Table trên database. 3. khi user ch ọn 1 Table (hay dùng lệnh SQL để miêu tả điều ki ện xác đị nh các record), ta gọi method Execute trên đố i tượ ng Connection để tạo 1 đố i tượ ng RecordSet ch ứa các record tìm đượ c. 4. duy ệt các record trong RecordSet và xử lý chúng theo yêu cầu. 5. đóng và xóa RecordSet và lập lại các bướ c 3, 4 để xử lý Table khác. 6. đóng và xóa các đố i tượ ng đã tạo ra để gi ải phóng bộ nh ớ do chúng chi ếm. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 339
  19. Thí dụ l ập trình truy xuất database dùng ADO TextEdit qui đị nh file cần truy xu ất. Button duy ệt và ch ọn file database. ComboBox li ệt kê các Table trong file. Listbox hi ển th ị các record trong 1 Table đã ch ọn ( để xem ch ứ không hi ệu ch ỉnh). Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 340
  20. Chi ti ết các thủ t ục xử lý sự ki ện Dim adoConnection As ADODB.Connection ' bi ến tham kh ảo đế n Connection Dim adoRsFields As ADODB.Recordset ' bi ến tham kh ảo đế n RecordSet ' Th ủ t ục x ử lý click button Browse Private Sub cmdBrowse_Click() ' hi ển th ị dialog box duy ệt và ch ọn file CommonDialog1.ShowOpen ' hi ển th ị file đượ c ch ọn vào textbox txtFileName.Text = CommonDialog1.FileName ' duy ệt các table và hi ển th ị tên c ủa chúng vào ComboBox ListAccessTables (txtFileName.Text) End Sub ' Th ủ t ục ph ục v ụ s ự ki ện form thay b ị thay đổ i kích th ướ c. Private Sub Form_Resize() ' v ẽ l ại ListBox để phù h ợp v ới kích th ướ c m ới c ủa form ScaleMode = vbPixels RsList.Move 5, 60, Me.ScaleWidth - 10, Me.ScaleHeight - 65 End Sub Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 341
  21. Chi ti ết th ủ t ục hi ển th ị danh sách các Table c ủa database Private Sub ListAccessTables(strDBPath As String) While cbTable.ListCount <> 0 ' Xóa danh sách hi ện hành cbTable.RemoveItem 0 Wend ' 1. T ạo 1 connection đế n file database Set adoConnection = New ADODB.Connection adoConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBPath ' 2. Duy ệt các tables, 'add' tên c ủa t ừng table vào danh sách ComboBox. Set adoRsFields = adoConnection.OpenSchema(adSchemaTables) With adoRsFields Do While Not .EOF If .Fields("TABLE_TYPE") = "TABLE" Then cbTable.AddItem .Fields("TABLE_NAME") End If .MoveNext Loop End With adoRsFields.Close ' đóng và xóa recordset ch ứa các table Set adoRsFields = Nothing ' l ưu ý v ẫn để m ở Connection đế n file database h ầu truy xu ất l ại End Sub Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 342
  22. Chi ti ết các thủ t ục xử lý sự ki ện ' Th ủ t ục x ử lý click ch ọn table trong ComboBox Private Sub cbTable_Click() Dim fcount As Integer, rcount As Integer, strBuf As String ' 3. T ạo đố i t ượ ng RecordSet ch ứa các record c ủa Table đượ c ch ọn Set adoRsFields = adoConnection.Execute("SELECT * FROM " & cbTable.Text) ' 4. Duy ệt các record trong RecordSet và hi ển th ị chúng trong ListBox With adoRsFields rcount = 0 ' ch ỉ s ố record fcount = .Fields.Count ' s ố field trong t ừng record Do While Not .EOF ' duy ệt t ừng record trong recordset rcount = rcount + 1 strBuf = Str(rcount) & ": " & .Fields(0).Value For idx = 1 To fcount - 1 ' duy ệt t ừng field và n ối k ết vào chu ỗi strBuf strBuf = strBuf & ", " & .Fields(idx).Value Next RsList.AddItem strBuf ' add chu ỗi k ết qu ả vào Lisbox .MoveNext ' di chuy ển đế n record k ế ti ếp Loop End With adoRsFields.Close ' đóng và xóa recordset Set adoRsFields = Nothing End Sub Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 343
  23. 12.4 Tổng quát về hoạt động debug ứng dụng  Sau khi vi ết code cho ứng dụng xong, ta sẽ th ử ch ạy nó để xác đị nh xem nó gi ải quy ết đúng yêu cầu không. Th ườ ng ứng dụng ch ứa nhi ều lỗi sai thu ộc 1 trong 2 lo ại sau:  các lỗi về từ vựng (tên các ph ần tử, từ dành riêng, ) và cú pháp của các ph ần tử cấu thành ứng dụng. VB sẽ phát hi ện các lỗi này dễ dàng và hi ển th ị thông báo lỗi cho ta xem xét và sửa ch ữa. Th ườ ng sau khi đượ c VB thông báo về các lỗi này, ta dễ dàng sửa chúng.  các lỗi về gi ải thu ật của ứng dụng. VB không th ể phát hi ện các lỗi này vì chúng thu ộc ph ạm trù ng ữ ngh ĩa. Ứng dụng sẽ ch ạy theo gi ải thu ật đượ c miêu tả, ta ph ải tự đánh giá tính đúng/sai về gi ải thu ật, nh ưng vi ệc tìm lỗi gi ải thu ật th ườ ng rất khó. Để giúp đỡ ng ườ i lập trình dễ dàng tìm ra các lỗi gi ải thu ật, VB cung cấp công cụ cho phép họ ki ểm soát đượ c qui trình ch ạy ứng dụng và truy xu ất các bi ến dữ li ệu của ch ươ ng trình, công cụ này đượ c gọi là 'Debug'. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 344
  24. Tổng quát về hoạt động debug ứng dụng Trong quá trình debug, ứng dụng sẽ ở 1 trong 2 tr ạng thái sau:  Pause : tr ạng thái của ứng dụng tr ướ c khi ch ạy hay khi dừng lại theo 1 điều ki ện dừng nào đó của ng ườ i debug. VB sẽ ghi nh ớ lệnh sắp thi hành tr ướ c khi dừng (l ệnh đầ u tiên của ứng dụng nếu nó ch ưa bắt đầ u ch ạy). Do tính lịch sử, ta dùng thu ật ng ữ PC - program counter để nói về lệnh này. Ở tr ạng thái này, ng ườ i debug có th ể xem giá tr ị của các bi ến dữ li ệu để bi ết ứng dụng ch ạy đúng hay sai theo yêu cầu rồi điều khi ển vi ệc thi hành ti ếp theo của ứng dụng, lúc này ứng dụng sẽ chuy ển sang tr ạng thái Running.  Running : tr ạng thái mà ứng dụng đang ch ạy các lệnh của nó đế n khi nó gặp 1 điều ki ện dừng đã thi ết lập tr ướ c, lúc này ứng dụng sẽ chuy ển về tr ạng thái Pause . Trong quá trình debug, ứng dụng ở tr ạng thái Pause ch ủ yếu th ời gian và ng ườ i debug tươ ng tác với ứng dụng ch ủ yếu ở tr ạng thái này. Mỗi khi ứng dụng đượ c ch ạy ti ếp, nó chuy ển qua tr ạng thái Running, nh ưng sẽ nhanh chóng ch ạy đế n lệnh dừng và chuy ển về tr ạng thái Pause (tr ừ phi bị 'block' ch ờ I/O hay bị 'loop' trong các vòng lặp vô tận). Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 345
  25. Các thao tác để xem và hi ệu chỉnh bi ến dữ li ệu Để xem nội dung của 1 bi ến dữ li ệu, ng ườ i debug có th ể:  Ch ọn menu Debug.Add Watch để thêm 1 bi ểu th ức (th ườ ng là bi ến dữ li ệu) vào cửa sổ Watch để xem nội dung của nó.  Ch ọn menu Debug.Edit Watch để hi ệu ch ỉnh bi ểu th ức (th ườ ng là bi ến dữ li ệu) hi ện hành ở cửa sổ Watch (context, watch type).  Dời chu ột đế n tên bi ến trong cửa sổ code, 1 cửa sổ nh ỏ ch ứa giá tr ị của bi ến đó sẽ đượ c hi ển th ị để ng ườ i debug xem xét. Để hi ển th ị cửa sổ ch ứa danh sách các th ủ tục đang th ực hi ện dỡ dang (các th ủ tục lồng nhau theo th ứ tự), ng ườ i debug có th ể:  Ch ọn menu View.Call Stacks. Để xem vị trí PC hi ện hành (l ệnh sắp th ực hi ện kế ti ếp), ng ườ i debug có th ể:  Ch ọn menu Debug.Show Next Statement (th ườ ng khi ứng dụng dừng lại, nó sẽ hi ển th ị lệnh ch ạy kế ti ếp - lệnh bị dừng với màu tô đặ c bi ệt và có dấu mũi tên ở lề trái của lệnh).  Ch ọn menu Debug.Set Next Statement để thi ết lập lệnh ch ứa cursor hi ện hành là lệnh ch ạy kế ti ếp (thay vì lệnh bị dừng tr ướ c đó) Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 346
  26. Các l ệnh thi ết l ập điều ki ện dừng Nếu điều ki ện dừng là vị trí lệnh cụ th ể thì ng ườ i debug có th ể:  Ch ọn menu Debug.Clear All Breakpoints để xóa tất cả các điểm dừng (breakpoint) hi ện tại. Điểm dừng là lệnh mà khi ứng dụng ch ạy đế n, ứng dụng sẽ dừng lại và chuy ển về tr ạng tháo Pause để ng ườ i debug ki ểm soát nội dung dữ li ệu của ứng dụng.  Ch ọn menu Debug.Toggle Breakpoint để thi ết lập/xóa điểm dừng ở lệnh ch ứa cursor hi ện hành (có th ể th ực hi ện nhanh ch ức năng này bằng cách dời cursor đế n lề trái của lệnh cần thi ết lập/xóa điểm dừng rồi click chu ột). Nếu điều ki ện dừng là bi ến dữ li ệu/bi ểu th ức nào đó bị thay đổ i hay có giá tr ị True thì ng ườ i debug có th ể:  Ch ọn menu Debug.Add Watch, nh ập bi ểu th ức (th ườ ng là 1 bi ến dữ li ệu) rồi ch ọn điều ki ện dừng "Break when value is True" hay "Break when value changes".  Ch ọn menu Debug.Edit Watch, hi ệu ch ỉnh bi ểu th ức hi ện hành (th ườ ng là 1 bi ến dữ li ệu) rồi ch ọn điều ki ện dừng "Break when value is True" hay "Break when value changes". Ta có th ể (và nên) thi ết lập nhi ều điều ki ện dừng đồ ng th ời để 'rào ch ắn' lu ồng thi hành của ch ươ ng trình. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 347
  27. Các l ệnh điều khi ển chạy ti ếp ứng dụng Để ch ạy ti ếp ứng dụng từ vị trí PC hi ện hành, ng ườ i debug có th ể: o ch ọn menu Run.Start để bắt đầ u ch ạy ứng dụng, ứng dụng ch ỉ dừng lại khi gặp điều ki ện dừng nào đó đã đượ c thi ết lập. o ch ọn menu Run.Continue để ch ạy ti ếp từ vị trí PC hi ện hành, ứng dụng ch ỉ dừng lại khi gặp điều ki ện dừng nào đó đã đượ c thi ết lập. o ch ọn menu Debug.Step Over để ch ạy ti ếp 1 lệnh rồi dừng lại (Pause), nếu lệnh thi hành là lệnh gọi th ủ tục thì toàn bộ th ủ tục sẽ đượ c ch ạy. Đây là lệnh cho phép th ực hi ện từng lệnh theo mức vĩ mô. o ch ọn menu Debug.Step Into để ch ạy ti ếp 1 lệnh rồi dừng lại (Pause), nếu lệnh thi hành là lệnh gọi th ủ tục thì ứng dụng sẽ dừng lại ở lệnh đầ u tiên của th ủ tục. Đây là lệnh cho phép th ực hi ện từng lệnh theo mức vi mô. o ch ọn menu Debug.Step Out để ch ạy ti ếp các lệnh còn lại của th ủ tục hi ện hành rồi quay về và dừng lại sau lệnh gọi th ủ tục này (Pause). o ch ọn menu Debug.Run to Cursor để ch ạy ti ếp ứng dụng từ vị trí PC hi ện hành đế n lệnh ch ứa cursor hi ện hành rồi dừng lại (Pause). Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 348
  28. Các l ệnh điều khi ển khác Khi ứng dụng ở tr ạng thái 'Pause', ng ườ i debug có th ể th ực hi ện các lệnh sau:  Ch ọn menu Run.End để kết thúc vi ệc ch ạy ứng dụng.  Ch ọn menu Run.Restart để kết thúc vi ệc ch ạy ứng dụng rồi bắt đầ u ch ạy lại từ đầ u.  Ch ọn menu Run.Break để dừng độ t ng ột vi ệc ch ạy ứng dụng, lệnh đang th ực hi ện sẽ đượ c đánh dấu để ta dễ theo dõi. Ch ức năng này giúp ta bi ết ứng dụng đang bị 'loop' ở đoạn lệnh nào. Nếu ứng dụng đang bị 'block' ch ờ bi ến cố I/O, sẽ không có lệnh nào đượ c dánh dấu cả. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 12: Linh ki ện ph ần m ềm & truy xu ất database Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 349