Giáo trình Visual Basic 6

Context Sensitive Help (trợgiúp trong ñúng tình huống)

Nhiều phần của VB6 là context sensitive, có nghĩa là lúc bối rối chỉcần ấn nút F1 hoặc highlight

keyword rồi nhấn F1 là ñược thông tin những gì liên hệtrực tiếp với tình huống hiện giờcủa bạn.

Bạn có thểnhấn F1 từbất kỳphần context sensitive nào của giao diện VB6 ñểdisplay thông tin Help

vềphần ñó. Các phần context sensitive là:

• Các Windows của VB6 nhưProperties, Code .v.v.

• Các control trong Toolbox.

• Các Object trên một form hoặc Object tài liệu.

• Các ñặc tính trong Window Properties.

• Các keywords của VB6

• Các thông báo lỗi (error messages)

pdf222 trang | Chuyên mục: Visual Basic 6.0 | Chia sẻ: dkS00TYs | Lượt xem: 1967 | Lượt tải: 5download
Tóm tắt nội dung Giáo trình Visual Basic 6, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
LEDB) từ giao diện Components như dưới ñây: 
Bạn hãy bắt ñầu một dự án VB6 mới, cho nó tên ADODataControl bằng cách click tên project 
trong Project Explorer bên phải rồi edit property Name trong Properties Window. Sửa tên của 
form chính thành frmADO, và ñánh câu ADO DataControl Demo vào Caption của nó. 
DoubleClick lên Icon của Control Data ADO trong Toolbox. Một Control Data ADO tên 
Adodc1 sẽ hiện ra trên Form. Muốn cho nó nằm bên dưới Form, giống như một StatusBar, hãy 
set property Align của nó trong Properties Window thành 2 - vbAlignBottom. 
Click bên phải hàng property (Custom), kế ñó click lên nút browse có ba chấm ñể giao thoại 
Property Pages hiện ra. Trong giao thoại nầy, trên Tab General chọn Radio (Option) Button 
Use Connection String rồi click nút Build.... 
 212 
Trong giao thoại Data Link Properties, Tab Provider, chọn Microsoft Jet 3.51 OLE DB 
Provider, rồi click nút Next >> hay Tab Connection. 
 213 
Ở chỗ Select or enter a database name ta chọn E:\Program Files\Microsoft Visual 
Studio\VB98\BIBLIO.MDB, trong computer của bạn có thể file ấy nằm trên disk C hay D. 
Sau ñó, bạn có thể click nút Test Connection phía dưới ñể thử xem connection có ñược thiết 
lập tốt không. 
Lập connection xong rồi, ta chỉ ñịnh muốn lấy gì về làm Recordset bằng cách click property 
Recordsource của Adodc1. Trong giao diện Property Pages của nó chọn 2-adCmdTable làm 
Command Type, kế ñó mở Combo box cho Table or Stored Procedure Name ñể chọn table 
Titles. 
Tùy theo cách ta dùng Recordset trong ADO, nó có ba loại và ñược gọi là Cursor Type. 
Cursor chẳng qua là một tên khác của Recordset: 
• Static Cursor: Static Cursor cho bạn một static copy (bản sao cứng ngắc) của các 
records. Trong lúc bạn dùng Static Cursor, nếu có ai khác sửa ñổi hay thêm, bớt gì vào 
recordset bạn sẽ không thấy. 
• Keyset Cursor: Keysey Cursor hơn Static Cursor ở chỗ trong lúc bạn dùng nó, nếu có 
ai sửa ñổi record nào bạn sẽ biết. Nếu ai delete record nào, bạn sẽ không thấy nó nữa. Tuy 
nhiên bạn sẽ không biết nếu có ai thêm một record nào vào recordset. 
 214 
• Dynamic Cursor: Như chữ sống ñộng (dynamic) hàm ý, trong lúc bạn ñang dùng một 
Dynamic Cursor, nếu có ai khác sửa ñổi hay thêm, bớt gì vào recordset bạn sẽ thấy hết. 
Bạn hãy chọn trị số 2-adOpenDynamic cho property Cursor Type của Adodc1: 
Bây giờ bạn hãy ñặt lên Form 4 labels với 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. 
ðể thực hiện Data Binding, bạn hãy chọn textbox txtYearPublished (năm xuất bản), rồi set 
property Datasource của nó trong Properties Window thành Adodc1. Khi click lên property 
DataField của txtYearPublished và mở ComboBox ra bạn sẽ thấy liệt kê tên các Fields trong 
table Titles. ðó là vì Adodc1 ñược coi như trung gian lấy table Titles từ database. Ở ñây ta sẽ 
chọn cột Year Published. 
Lập lại công tác nầy cho 3 textboxes kia, và chọn các cột Title (Tiêu ñề), ISBN (số lý lịch trong 
thư viện quốc tế), và PubID (số lý lịch nhà xuất bản) làm DataField cho chúng. 
 215 
ðến ñây, mặc dầu chưa viết một hàng code nào, bạn có thể chạy chương trình và nó sẽ hiển thị 
như dười ñây: 
Bạn có thể tải về chương trình dùng Control Data ADO nầy từ ñây ADODatacontrol.zip. 
Data Form Wizard 
ðể giúp lập trình viên thiết kế các data forms nhanh hơn, VB6 cho ta Data Form Wizard ñể 
generate (phát sinh) ra một form có hỗ trợ Edit, Add và Delete records. 
Bây giờ bạn hãy khởi ñộng một standard project VB6 mới, tên ADOClass và copy MS Access 
file BIBLIO.MDB, tức là database, vào trong cùng folder của dự án mới nầy. 
Muốn dùng Data Form Wizard, trước hết ta phải thêm nó vào môi trường phát triển (IDE) của 
VB6. Bạn hãy dùng IDE Menu Command Add-Ins | Add-In Manager.... Chọn VB6 Data 
Form Wizard trong giao thoại, rồi click Checkbox Loaded/Unloaded ñể chữ Loaded hiện bên 
phải hàng "VB6 Data Form Wizard" như trong hình dưới ñây: 
Nếu bạn muốn mỗi lần khởi ñộng VB6 IDE là có sẵn Data Form Wizard trong menu Add-Ins 
thì ngoài option Loaded, bạn click thêm check box Load on Startup. 
Một Add-In là một menu Item mới mà ta có thể thêm vào một chương trình ứng dụng có sẵn. 
 216 
Thường thường, người ta dùng Add-Ins ñể thêm chức năng cho một chương trình, làm như là 
chương trình ñã có sẵn chức năng ấy từ ñầu. Bạn hãy khởi ñộng Data Form Wizard từ IDE 
Menu Command mới Add-Ins | Data Form Wizard... 
Khi trang Data Form Wizard - Introduction hiện ra, click Next 
Trong trang kế ñó chọn Access làm Database Type. 
 217 
Trong trang Database, click Browse ñể chọn một MS Access database file. Ở ñây ta chọn file 
BIBLIO.MDB từ chính folder của chương trình nầy. ðoạn click Next. 
Trong trang Form, ta chọn Single Record cho Form Layout và Class cho Binding Type. 
ðoạn click Next. Nếu ta chọn ADO Data Control thì kết quả sẽ giống giống như khi ta dùng 
Control Data DAO như trong một bài trước. 
Trong trang Record Source ta chọn table Titles. Listbox của Available Fields sẽ hiển thị các 
fields của table Titles. Sau khi chọn một field bằng cách click lên tên field ấy trong Listbox, 
nếu bạn click hình tam giác chỉ qua phải thì tên field ấy sẽ ñược dời qua nằm dưới cùng trong 
Listbox Selected Fields bên phải. 
Nếu bạn click hình hai tam giác chỉ qua bên phải thì tất cả mọi fields còn lại bên trái sẽ ñược 
dời qua bên phải. Bạn cũng có thể sắp ñặt vị trí của các selected fields bằng cách click lên tên 
field ấy rồi click hình mũi tên chỉ lên hay xuống ñể di chuyển field ấy lên hay xuống trong 
danh sách các fields. 
 218 
Ngoài ra, bạn hãy chọn Title làm Column to Sort By trong cái Combobox của nó ñể các 
records trong Recordset ñược sắp xếp theo thứ tự ABC (alphabetical order) của field Tiêu ñề 
(Title). 
Trong trang Control Selection, ta sẽ ñể y nguyên ñể có ñủ mọi buttons. Bạn hãy click Next. 
Khi Data Form Wizard chấm dứt, nó sẽ generate form frmADODataForm. Bạn hãy remove 
Form1 và dùng Menu Command Project | ADODataControl Properties... ñể ñổi Startup 
Object thành frmADODataForm. Thế là tạm xong chương trình ñể Edit các records của table 
Titles. 
 219 
Chúng ta hãy quan sát cái Form và phần code ñược Data Form Wizard generated. Trong 
frmADODataForm, các textboxes làm thành một array tên txtFields. Mọi textbox ñều có 
property DataField ñịnh sẵn tên field của table Titles. Thí dụ như txtFields(2) có DataField là 
ISBN. Form chính không dùng Control Data ADO nhưng dùng một Object của class clsTitles. 
Phần Initialisation của class clsTitles là Open một Connection và lấy về một Dataset có tên 
DataMember là Primary như sau: 
Private Sub Class_Initialize() 
 Dim db As Connection 
 Set db = New Connection 
 db.CursorLocation = adUseClient 
 ' Open connection 
 db.Open "PROVIDER=Microsoft.Jet.OLEDB.3.51;Data 
Source=E:\Websites\Vovisoft\VisualBasic\ADOForm\BIBLIO.MDB;" 
 ' Instantiate ADO recordset 
 Set adoPrimaryRS = New Recordset 
 ' Retrieve data for Recordset 
 adoPrimaryRS.Open "select Title,[Year Published],ISBN,Description,Notes,PubID from 
Titles Order by Title", _ 
 db, adOpenStatic, adLockOptimistic 
 ' Define the only data member, named Primary 
 DataMembers.Add "Primary" 
End Sub 
Về vị trí của database, nếu bạn không muốn nó chết cứng ở một folder nào thì dùng App.Path 
ñể xác ñịnh mối liên hệ giữa vị trí của database và folder của chính chương trình ñang chạy, thí 
dụ như: 
db.Open "PROVIDER=Microsoft.Jet.OLEDB.3.51;Data Source=" & App.Path & 
"\BIBLIO.MDB;" 
Trong Sub Form_Load, ta có thể dùng For Each ñể ñi qua hết các textboxes trong array 
txtFields. Vì property Datasource của textbox là một Object nên ta dùng keyword Set ñể point 
 220 
nó ñến Object PrimaryCLS. ðồng thời ta cũng phải chỉ ñịnh tên của DataMember của mỗi 
textbox là Primary: 
Private Sub Form_Load() 
 ' Instantiate an Object of class clsTitles 
 Set PrimaryCLS = New clsTitles 
 Dim oText As TextBox 
 ' Iterate through each textbox in the array txtFields 
 'Bind the text boxes to the data source, i.e. PrimaryCLS 
 For Each oText In Me.txtFields 
 oText.DataMember = "Primary" 
 ' Use Set because property Datasource is an Object 
 Set oText.DataSource = PrimaryCLS 
 Next 
End Sub 
Khi sự di chuyển từ record nầy ñến record khác chấm dứt, chính Recordset có raise Event 
MoveComplete. Event ấy ñược handled (giải quyết) trong class clsTitles bằng cách lại raise 
Event MoveComplete ñể nó ñược handled trong Form. 
Muốn handle Event trong clsTitles ta phải declare recordset adoPrimaryRS với WithEvents: 
Dim WithEvents adoPrimaryRS As Recordset 
Private Sub adoPrimaryRS_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, 
_ 
 ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset 
As ADODB.Recordset) 
 ' Raise event to be handled by main form 
 RaiseEvent MoveComplete 
End Sub 
Và trong Form ta cũng phải declare (object clsTitles) PrimaryCLS với WithEvents: 
Private WithEvents PrimaryCLS As clsTitles 
Trong Form, Event MoveComplete sẽ làm hiển thị vị trí tuyệt ñối (Absolute Position) của 
record bằng code dưới ñây: 
Private Sub PrimaryCLS_MoveComplete() 
 'This will display the current record position for this recordset 
 lblStatus.Caption = "Record: " & CStr(PrimaryCLS.AbsolutePosition) 
End Sub 
 221 
Khi user clicks Refresh, các textboxes sẽ ñược hiển thị lại với chi tiết mới nhất của record từ 
trong recordset, nhỡ khi có ai khác ñã sửa ñổi record. Method Requery của clsTitles lại gọi 
method Requery của Recordset như sau: 
Private Sub cmdRefresh_Click() 
 'This is only needed for multi user applications 
 On Error GoTo RefreshErr 
 ' fetch the latest copy of Recordset 
 PrimaryCLS.Requery 
 Exit Sub 
RefreshErr: 
 MsgBox Err.Description 
End Sub 
'In Class clsTitles 
Public Sub Requery() 
 ' Fetch latest copy of record 
 adoPrimaryRS.Requery 
 DataMemberChanged "Primary" 
End Sub 

File đính kèm:

  • pdfVB6.pdf
Tài liệu liên quan