I E= T*R
Chi tiết thủ tục hiển thị danh sách các Table của database
Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học
Slide 339 Đị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 Connectionmiê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 RecordSetchứ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.
Lập trình truy xuất database dùng ADO
Chương 12 : Linh kiện phần mềm & truy xuất database
Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học
Slide 340
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).
Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học
Slide 341
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
Chi tiết các thủ tục xử lý sự kiện
Chương 12 : Linh kiện phần mềm & truy xuất database
Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học
Slide 342
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
Chi tiết thủ tục hiển thị danh sách các Table của database
Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học
Slide 343
' 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
Chi tiết các thủ tục xử lý sự kiện
Chương 12 : Linh kiện phần mềm & truy xuất database
Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học
Slide 344
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'.
12.4 Tổng quát về hoạt động debug ứng dụng
Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học
Slide 345 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).
Tổng quát về hoạt động debug ứng dụng
Chương 12 : Linh kiện phần mềm & truy xuất database
Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học
Slide 346
Để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đó)
Các thao tác để xem và hiệu chỉnh biến dữ liệu
Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học
Slide 347 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.