Chương 1 THIẾT KẾ BIỂU MẪU DÙNG CÁC ĐIỀU KHIỂN
Mục tiêu:
Chương này gồm các bài tập nhằm rèn luyện cho sinh viên các thao tác cần thiết cho phép thiết kế các ứng dụng đơn giản trong môi trường lập trình Visual Basic cũng như một số kỹ năng lập trình cơ bản khi làm việc với Visual Basic.
Học xong chương này, sinh viên phải nắm bắt được các vấn đề sau:
- Sử dụng các điều khiển để thiết kế giao diện trong Visual Basic.
- Vận dụng các cấu trúc lập trình trong Visual Basic để viết mã lệnh.
- Sử dụng một số cấu trúc dữ liệu trong Visual Basic.
Kiến thức có liên quan:
- Giáo trình “Visual Basic”; Chương 1, 2, 3, 4, 5.
Tài liệu tham khảo:
- Visual Basic 6 Certification Exam Guide - Chapter 1, Page 1; Chapter 2, Page 41; Chapter 4, Page 89 - Dan Mezick & Scot Hillier - McGraw-Hill - 1998.
TT. Visual Basic
I. SỬ DỤNG MỘT SỐ ĐIỀU KHIỂN
I.1 Bài tập có hướng dẫn
Bài tập 1I-1
THAO TÁC TRÊN LISTBOX
Bước 1: Tạo thư mục Basic\Bt1-1. Tạo một dự án mới kiểu Standard EXE, lưu vào trong thư mục trên.
Bước 2: Thêm 2 List Box và một Button vào form (hình 1). Nhấn đúp lên form để mở ra cửa sổ Code, nhập các đoạn mã sau trong sự kiện Form_Load:
Form1.List1.AddItem “Thing 3”
Form1.List1.AddItem “Thing 2”
Form1.List1.AddItem “Thing 1”
Trang 2
90
Hình 1.1: Thao tác với List Box
Bước 3: Chạy ứng dụng bằng cách chọn Run/Start. List1 hiển thị 3 phần tử vừa thêm vào ở bước 2. Chấm dứt chương trình bằng cách chọn Run/End trên menu để trở về môi trường soạn thảo.
Bước 4: Nhấp đúp lên Button Command1 để hiển thị sự kiện Click của Command1.
Bước 5: Mục đích của Command1 là chuyển những phần tử được chọn từ List1 sang List2. Thêm đoạn mã sau vào thủ tục sự kiện Click của Command1:
' Kiem tra neu mot phan tu duoc chon
If Form1.List1.ListIndex = -1 Then Exit Sub
' Chep cac phan tu duoc chon tu List1 sang List2
Form1.List2.AddItem Form1.List1.List(Form1.List1.ListIndex)
Bước 6: Chạy ứng dụng. Nhấp phần tử thứ nhất của List1, sau đó nhấp Command1. Điều gì xảy ra? Phần tử được chọn của List1 phải được hiển thị bên List2. Chấm dứt ứng dụng và trở về môi trường soạn thảo.
Bước 7: Tìm trong phần trợ giúp các thuộc tính sau của ListBox:
114 trang |
Chia sẻ: thanhnguyen | Lượt xem: 6560 | Lượt tải: 3
Bạn đang xem trước 20 trang tài liệu Bài tập visualbasic đầy đủ hết các dạng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Private Sub Form_Load()
AppFolder = App.Path
If Right(AppFolder, 1) "\" Then AppFolder = AppFolder & "\"
Set myDB = OpenDatabase(AppFolder & "BIBLIO.MDB")
Set myRS = myDB.OpenRecordset("Select * from Titles ORDER BY Title")
If myRS.RecordCount > 0 Then
myRS.MoveFirst
Displayrecord
End If
End Sub
TT. Visual Basic
Trang 71
Bước 5: Sau khi dùng hàm MoveFirst của Recordset để định vị mẩu tin hiện thời là
mẩu tin đầu tiên, ta hiển thị trị số các trường của mẩu tin bằng cách gán chúng vào các
textboxes của Form như sau:
Private Sub Displayrecord()
With myRS
txtTitle.Text = .Fields("Title")
txtYearPublished.Text = .Fields("[Year Published]")
txtISBN.Text = .Fields("ISBN")
txtPublisherID.Text = .Fields("PubID")
End With
End Sub
Để ý vì trường Year Published gồm có hai từ nên ta phải đặt tên của trường ấy giữa
hai dấu ngoặc vuông ([]). Để tránh bị phiền phức như trong trường hợp nầy, khi đặt tên
các trường tcủa table trong lúc thiết kế cơ sở dữ liệu hãy dán dính các chữ lại với nhau,
đừng để rời ra. Thí dụ như dùng YearPublished thay vì Year Published.
CÁC NÚT DI CHUYỂN
Bước 6: Muốn có các nút Navigators giống như của một Control Data, ta hãy đặt lên
Form 4 buttons mang tên CmdFirst, CmdPrevious, CmNext và CmdLast với
captions: , >>.
Bước 7: Mã lệnh cho các nút nầy cũng đơn giản, nhưng ta phải coi chừng khi người
dùng muốn di chuyển quá mẩu tin cuối cùng hay mẩu tin đầu tiên. Ta phải kiểm tra
xem EOF có trở thành True khi người dùng nhấp CmdNext, hay BOF có trở thành
True khi người dùng nhấp CmdPrevious.
Các sự kiện này được xử lý như sau:
Private Sub CmdNext_Click()
myRS.MoveNext
If Not myRS.EOF Then
Displayrecord
Else
myRS.MoveLast
End If
End Sub
Private Sub CmdPrevious_Click()
myRS.MovePrevious
If Not myRS.BOF Then
Displayrecord
Else
myRS.MoveFirst
End If
End Sub
Private Sub CmdFirst_Click()
myRS.MoveFirst
Displayrecord
End Sub
TT. Visual Basic
Trang 72
Private Sub CmdLast_Click()
myRS.MoveLast
Displayrecord
End Sub
Bước 7: Chạy chương trình. Khi chạy chương trình ta sẽ thấy nó hiển thị chi tiết của
mẩu tin đầu tiên khác với các bài trước đây vì các mẩu tin đã được sắp xếp.
Ta hãy thử dùng các nút di chuyển , >> xem chúng làm việc có đúng
không.
Tới đây, ta nhận thấy rằng dù người dùng có vô tình sửa đổi một chi tiết nào
trong các textboxes, không có mẩu tin nào bị cập nhật hóa trong cơ sở dữ liệu khi
người dùng di chuyển từ mẩu tin nầy đến mẩu tin khác. Lý do là các Texboxes không
có ràng buộc dữ liệu (Data Bound) với các trường của Recordset.
THÊM BỚT CÁC RECORDS
Bước 8: Giống như chương trình trong bài rồi, ta sẽ thêm công cụ để thêm (add), bớt
(delete) các mẩu tin. Hãy thêm vào Form 5 buttons tên: cmdEdit, cmdNew,
cmdDelete, cmdUpdate và cmdCancel.
Bước 9: Chỗ nào trong chương trình 4-1 ta dùng Data1.Recordset thì bây giờ ta dùng
myRS.
Ta sẽ dùng lại Sub SetControls với tham số Editing có trị số False hay True
tùy theo người dùng đang xem (Browse) hay sửa đổi (Edit). Trong Browse mode, các
Textboxes bị Locked (khóa) và các nút cmdUpdate và cmdCancel bị vô hiệu lực.
Trong Edit mode, các Textboxes được unlocked (mở khóa) và các nút cmdNew,
cmdDelete và cmdEdit bị vô hiệu lực.
Do đó ta chỉ cần nhớ là khi người dùng đang sửa đổi một mẩu tin hiện hành hay
thêm một mẩu tin mới. Ta chứa trị số Boolean ấy trong biến AddNewRecord. Nếu
user sắp thêm một record mới thì AddNewRecord = True, nếu User sắp Edit một
record hiện hữu thì AddNewRecord = False.
Ngoài ra, khi người dùng sắp thêm một mẩu tin mới bằng cách nhấp nút New
thì ta phải tự xóa hết các textboxes bằng cách gán chuỗi rỗng cho các TextBox đó.
Ta có các đoạn mã sau:
Dim AddNewRecord As Boolean
Private Sub ClearAllFields()
txtTitle.Text = ""
txtYearPublished.Text = ""
txtISBN.Text = ""
txtPublisherID.Text = ""
End Sub
Private Sub cmdNew_Click()
TT. Visual Basic
Trang 73
AddNewRecord = True
ClearAllFields
SetControls (True)
End Sub
Private Sub CmdEdit_Click()
SetControls (True)
AddNewRecord = False
End Sub
Bước 10: Khi người dùng nhấp Cancel trong khi đang sửa đổi các textboxes, ta không
cần gọi hàm vì Recordset chưa bị đặt vào AddNew hay Edit mode. Ở đây ta chỉ cần
hiển thị lại chi tiết của mẩu tin hiện hành, tức là hủy bỏ những gì người dùng đang
đánh vào:
Private Sub CmdCancel_Click()
SetControls (False)
Displayrecord
End Sub
Bước 11: Lúc người dùng nhấp Update, ta sẽ kiểm tra dữ liệu xem có trường nào bị bỏ
trống (nhất là khóa chính ISBN bắt buộc phải có trị số) hay có gì không hợp lệ bằng
cách gọi hàm GoodData. Nếu GoodData trả lại một trị số False thì ta không xúc tiến
với việc Update. Nếu GoodData trả về trị số True thì ta đặt Recordset vào AddNew
hay Edit mode tùy theo trị số của biến AddNewRecord là True hay False.
Giống như khi hiển thị chi tiết của một Record ta phải gán từng trường vào
textbox, thì bây giờ khi Update ta phải làm ngược lại, tức là gán nội dung của từng
textbox vào các trường tương ứng. Sau cùng ta gọi hàm Update của recordset và cho
các điều khiển trở lại Browse mode:
Private Function GoodData() As Boolean
GoodData = True
End Function
Private Sub CmdUpdate_Click()
If Not GoodData Then Exit Sub
With myRS
If AddNewRecord Then
.AddNew
Else
.Edit
End If
.Fields("Title") = txtTitle.Text
.Fields("[Year Published]") = txtYearPublished.Text
.Fields("ISBN") = txtISBN.Text
.Fields("PubID") = txtPublisherID.Text
.Update
End With
SetControls (False)
TT. Visual Basic
Trang 74
End Sub
TÌM MỘT RECORD
Bước 11: Tiếp theo đây, ta muốn liệt kê các sách có tiêu đề chứa một chữ hay câu nào
đó, thí dụ như chữ "Guide". Kế đó người dùng có thể chọn một sách bằng cách chọn
tiêu đề sách ấy và nhấp nút Go. Chương trình sẽ locate (tìm ra) record của sách ấy và
hiển thị chi tiết của nó.
Bây giờ bạn hãy cho vào Form một textbox tên txtSearch và một Image tên
ImgSearch. Kế đó đặt một frame tên fraSearch vào Form. Để lên frame nầy một
listbox tên List1 để tựa các sách.
Ta sẽ cho ImgSearch hiển thị hình một ống nhòm nên bạn hãy click vào bên
phải property Picture trong Properties Window để chọn Icon BINOCULR.ICO từ
folder E:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Misc.
Khi người dùng nhấp vào ImgSearch, chương trình sẽ tự động tìm kiếm các
sách có tựa được người dùng đánh vào trong TextBox. Sự kiện ImgSearch được xử lý
như sau:
Private Sub ImgSearch_Click()
fraSearch.Visible = True
Dim SrchRS As DAO.Recordset
Dim SQLCommand As String
SQLCommand = "Select * from Titles where Title LIKE '" & "*" & txtSearch & "*"
& "' ORDER BY Title"
Set SrchRS = myDB.OpenRecordset(SQLCommand)
If SrchRS.RecordCount > 0 Then
List1.Clear
With SrchRS
Do While Not SrchRS.EOF
List1.AddItem .Fields("Title")
.MoveNext
Loop
End With
End If
End Sub
Trong câu SELECT trên ta dùng toán tử LIKE, nội dung của TextBox, có dấu *
ở hai bên. Dấu * là chỗ có (hay không có) chữ gì cũng được.
Bước 12: Lưu dự án và chạy chương trình. Kiểm tra kết quả.
TT. Visual Basic
Bài tập 4-4
THÍ DỤ VỀ SỬ DỤNG DAO
Bài tập này nhằm mục đích giới thiệu về cách thức sử dụng điều khiển dữ liệu
và thư viện DAO trong việc thiết kế một Form nhập liệu hoàn chỉnh cho bảng
THangHoa trong CSDL HangHoa.mdb. Giao diện cùng với mã lệnh chỉ mang tính
chất gợi ý; sinh viên có thể thực hiện theo ý riêng của mình.
Bước 1: Thiết kế form như sau:
Trang 75
+
*
Hình IV.13: Sử
dụng Data
Control
Với *: DataControl: Điều khiển dữ liệu
DatabaseName: HangHoa.MDB
RecordSource: THangHoa
Name: datHH
Bước 2: Thiết lập các thuộc tính cho các TextBox & ComboBox.
DataSource: DatHH
DataField:
Bước 3: Đặt điều khiển lưới lên Form (+) sau khi đã tham chiếu đến nó
(Project\Components\Microsoft Data Bound Grid Control 5.0 SP3).
DataSource: datHH
Chạy chương trình, ta được kết quả như trên.
TT. Visual Basic
Trang 76
Bước 4: Sự kiện cmdThem_Click
Private Sub cmdThem_Click()
datHH.Recordset.AddNew
DoiTThai False
End Sub
Trong đó:
Private Sub DoiTThai(ByVal TThai As Boolean)
cmdThem.Enabled = TThai
cmdSua.Enabled = TThai
cmdXoa.Enabled = TThai
cmdHuy.Enabled = Not TThai
cmdLuu.Enabled = Not TThai
End Sub
Bước 4: Sự kiện cmdSua_Click & sự kiện cmdXoa_Click:
Private Sub cmdSua_Click()
datHH.Recordset.Edit
DoiTThai False
End Sub
Private Sub cmdXoa_Click()
On Error GoTo Xuly
datHH.Recordset.Delete
Exit Sub
Xuly:
MsgBox Err.Description, vbCritical + vbSystemModal, "Loi"
End Sub
Bước 5: Sự kiện cmdLuu_Click & cmdHuy_Click
Private Sub cmdHuy_Click()
'dathh.Database =
datHH.Recordset.CancelUpdate
DoiTThai True
End Sub
Private Sub cmdLuu_Click()
datHH.Recordset.Update
DoiTThai True
End Sub
Bước 6: Sự kiện Form_Load:
Private Sub Form_Load()
DoiTThai True
End Sub
TT. Visual Basic
Trang 77
- Có nhận xét gì nếu khi chạy chương trình, ta thêm mới một mẩu tin có khóa là
Mahang trùng với một MaHang đã có. Để giái quyết ta làm thế nào?
II. BÀI TẬP TỰ LÀM
Sử dụng CSDL HangHoa.mdb, anh (chị) hãy:
1) Cải tiến Form nhập ở bài 4-4, sao cho trường MaLoai phải được lấy từ các MaLoai
của bảng TLoaiHang. Hơn nữa thay vì hiển thị MaLoai, ta hiển thị TenLoai cho dễ
theo dõi; nhưng khi thêm vào bảng THangHoa, ta lại thêm vào MaLoai của TenLoai
đó.
2) Bằng cách sử dụng DAO (tương tự 4-3), anh (chị) hãy:
a. Thiết kế Form nhập liệu cho bảng THANGHOA.
b. Thiết kế Form nhập liệu cho bảng TNHANVIEN.
TT. Visual Basic
Trang 78
Chương 5 ĐỐI TƯỢNG DỮ LIỆU TỪ XA
Mục tiêu:
Chương này nhằm giới thiệu cho sinh viên cách thức sử dụng thư
viện đối tượng RDO để truy cập dữ liệu, cách thức truy cập dữ liệu trước đây
đối với cơ sở dữ liệu ở máy từ xa.
Học xong chương này, sinh viên phải nắm được các vấn đề sau:
- Thiết lập tên nguồn dữ liệu (Data Source Name) trên Windows.
- Sử dụng Remote Data Control để truy cập dữ liệu.
- Đối tượng UserConnection cũng như thư viện đối tượng RDO.
Kiến thức có liên quan:
Giáo trình Visual Basic, Chương 10.
Tài liệu tham khảo:
- Visual Basic 6 Certification Exam Guide - Chapter 11, Page 309 -
Dan Mezick & Scot Hillier - McGraw-Hill - 1998.
- Microsoft Visual Basic 6.0 & Lập trình cơ sở dữ liệu – Chương 23,
trang 735 - Nguyễn Thị Ngọc Mai (chủ biên) - Nhà xuất bản Giáo dục -
2000.
- Tự học Lập trình cơ sở dữ liệu với Visual Basic 6 trong 21 ngày
(T2) - Chương 17, trang 227 - Nguyễn Đình Tê (chủ biên), Nhà xuất bản
Giáo dục - 2001.
TT. Visual Basic
I. HƯỚNG DẪN
Bài tập 5-1
ĐỐI TƯỢNG USER CONNECTION
THIẾT LẬP NGUỒN DỮ LIỆU ODBC
Bước 1: Trong bài tập này, ta sẽ thao tác với CSDL Access BIBLIO.MDB thông qua
VB.
Trước tiên ta phải thiết lập nguồn dữ liệu nhờ tiện ích ODBC Administrator của
Windows. Chọn ODBC Administrator trong Control Panel (icon tên là ODBC). Nhấp
đúp vào icon này để khởi động ODBC Administrator.
Bước 2: Một hộp thoại hiện ra hiển thị tất cả các nguồn dữ liệu ODBC hiện thời trên
máy tính. Để tạo một nguồn dữ liệu mới, ta chọn mục System DSN. Nhấp vào nút
Add. Hộp thoại cho phép tạo nguồn dữ liệu mới với tất cả các điều khiển (drivers)
ODBC có sẵn trên máy. Ở đây, ta chọn Microsoft Access ODBC driver trong danh
sách và chọn Finish.
Bước 3: Hộp thoại cài đặt ODBC xuất hiện. Trong hộp thoại này, định nghĩa một
nguồn dữ liệu mới. Nhưng trước tiên ta phải xác định tên của nguồn dữ liệu. Ta có thể
đặt với bất cứ một tên nào, chẳng hạn BIBLIO.
Sau đó, nhấp nút Select để tìm đến CSDL BIBLIO.MDB trong máy tính, chọn
tập tin này; nhấp OK. Lúc này nguồn dữ liệu đã được định nghĩa xong.
TẠO GIAO DIỆN CHƯƠNG TRÌNH
Bước 4: Tạo một dự án mới trong thư mục Basic\Bt5-1. Tạo giao diện chương trình
như hình dưới:
Trang 79
98 76
5
4
3
2
1
Hình V.1: Giao diện
1: TextBox
Name: txtTitle
2: TextBox
Name: txtAuthor
3: TextBox
TT. Visual Basic
Trang 80
Name: txtName
4: TextBox
Name: txtYear
5: TextBox
Name: txtISBN
6: CommandButton
Name: cmdDau
Caption: Đầu
7: CommandButton
Name: cmdCuoi
Caption: Cuối
8: CommandButton
Name: cmdSau
Caption: Sau
9: CommandButton
Name: cmdTruoc
Caption: Trước
ĐỐI TƯỢNG USER CONNECTION
Bước 5: Ở đây, ta sử dụng đối tượng User Connection để truy xuất RDO. Chọn
Project\Components… trên menu; sau đó chọn mục Designers. Trong mục này, đánh
dấu check vào Microsoft UserConnection. Sau đó ta thêm UserConnection vào dự án
bằng cách chọn Project\More ActiveX Designers\Microsoft UserConnection trên
menu.
Bước 6: Đối tượng UserConnection cung cấp cho ta giao diện đồ họa để truy xuất đến
nối kết kiểu RDO và làm tiện lợi hơn khi xác định nối kết ODBC, nhất là truy xuất đến
các câu truy vấn hay các thủ tục lưu trữ sẵn trong CSDL mà không cần đến một đoạn
mã nào.
Bước 7: Trong cửa sổ thuộc tính của UserConnection, liên kết với nguồn dữ liệu
BIBLIO ODBC vừa định nghĩa ở trên. Khi nối kết được thiết lập, đóng cửa sổ
Properties lại.
Bước 8: Nhấp chuột phải vào icon UserConnection, một menu hiện ra, chọn Insert
Query trên menu để thêm một câu truy vấn vào UserConnection. Hộp thoại tạo truy
vấn mới xuất hiện cho phép định nghĩa câu truy vấn mới. Đặt tên cho câu truy vấn này
là AllTiles.
Chọn tùy chọn Base on User-Defined SQL và thêm câu SQL sau vào cửa sổ
soạn thảo:
SELECT Titles.Title, Titles.ISBN, Authors.Author, Titles.[Year Published],
Publishers.[Company Name]
FROM Publishers, Titles, Authors, [title author]
WHERE ((((Authors.Au_ID = [title author].Au_ID)
AND ([title author].ISBN = Titles.ISBN))
AND (Titles.PubID = Publishers.PubID)))
TT. Visual Basic
Trang 81
ORDER BY Titles.Title
Bước 9: Đóng cửa sổ thiết kế câu truy vấn để lưu vào UserConnection.
VIẾT MÃ LỆNH CHO ỨNG DỤNG
Bước 10: Mở cửa sổ Code của Form1, trong phần [General]\[Declarations], định
nghĩa các biến sau cho đối tượng nối kết RDO và ResultSet.
Private m_noiket As UserConnection1
Private m_ketqua As RDO.rdoResultset
Bước 11: Ta sẽ tạo nối kết trong sự kiện Form_Load, sau khi nối kết được tạo, ta chạy
câu SQL vừa định nghĩa trong UserConnection. Thêm đoạn mã sau vào sự kiện
Form_Load để truy xuất đến nguồn dữ liệu:
Set m_noiket = New UserConnection1
m_noiket.EstablishConnection
' Lay ket qua
Set m_ketqua = _
m_noiket.rdoQueries("AllTitles").OpenResultSet(rdOpenDynamic)
' Dien vao Form
Call Hienthi
Thủ tục Hienthi dùng để hiển thị thông tin của các trường tương ứng của mỗi
mẩu tin lên TextBox, thủ tục này được viết như sau:
Public Sub Hienthi()
txtTitle.Text = m_ketqua!Title
txtAuthor.Text = m_ketqua!Author
txtName.Text = m_ketqua![Company Name]
txtYear.Text = m_ketqua![Year Published]
txtISBN.Text = m_ketqua!ISBN
End Sub
Bước 12: Phần còn lại của chương trình của ta là thêm phần xử lý sự kiện Click cho
các nút nhấn. Mã lệnh cho các sự kiện này như sau:
Private Sub cmdCuoi_Click()
m_ketqua.MoveLast
Call Hienthi
End Sub
TT. Visual Basic
Trang 82
Private Sub cmdDau_Click()
m_ketqua.MoveFirst
Call Hienthi
End Sub
Private Sub cmdSau_Click()
m_ketqua.MoveNext
If m_ketqua.EOF Then
Beep
m_ketqua.MoveLast
Else
Call Hienthi
End If
End Sub
Private Sub cmdTruoc_Click()
m_ketqua.MovePrevious
If m_ketqua.BOF Then
Beep
m_ketqua.MoveFirst
Else
Call Hienthi
End If
End Sub
Bước 13: Lưu dự án và chạy chương trình.
TT. Visual Basic
Bài 5-2
SỬ DỤNG REMOTE DATA CONTROL
Bước 1: Tạo dự án mới trong thư mục Basic\Bt5-2. Đăng ký một DSN với tên là
DBHH.
Bước 2: Trong bài tập này ta sử dụng Remote Data Control và lưới hiển thị dữ liệu, do
đó ta tham chiếu đến các thành phần này bằng cách chọn Project\Components…, thiết
lập tham chiếu đến Microsoft Remote Data Control và Microsoft Data Bound Grid
Control. Nhấp OK.
Bước 3: Thiết kế Form có dạng sau:
1
1
Hình V.2: Sử dụng RDC
1: RemoteDataControl. Name: rdcHangHoa
2: DBGrid. Name: dbgHangHoa.
Bước 4: Đặt thuộc tính DataSourceName của điều khiển rdcHangHoa là DBHH (DSN
đã tạo trước đây).
Bước 5: Định thuộc tính SQL của điều khiển rdcHangHoa là:
Select * From THANGHOA
Bước 6: Chỉ định thuộc tính DataSource của điều khiển dbgHangHoa là rdcHangHoa.
Bước 7: Thực thi chương trình.
Trang 83
TT. Visual Basic
Bài 5-3
ODBC DIRECT
Bước 1: Tạo dự án mới lưu trong Basic\Bt5-3.
Bước 2: Tham chiếu đến điều khiển lưới Microsoft Data Bound Grid Control trong
mục Project\Components.
Bước 3: Tạo Form có dạng sau:
2
1
Hình V.3: Sử dụng ODBC Direct
1: DBGrid. Name: DbGrid1.
2: Data Control. Name: Data1.
Bước 4: Đổi thuộc tính DefaultType của DataControl là 1 - Use ODBC.
Bước 5: Thuộc tính Connect của Data1 là: ODBC;DSN=DBHH.
Bước 6: Đặt thuộc tính Record Source của Data Control:
Select * From THANGHOA.
Bước 7: Đặt thuộc tính Data Source của DBGrid1 là: Data1.
Bước 8: Lưu dự án và thực thi chương trình.
II. BÀI TẬP TỰ LÀM
Sử dụng CSDL HangHoa.mdb và thư viện đối tượng RDO, anh (chị) hãy:
1) Thiết kế Form nhập liệu cho bảng THANGHOA.
2) Thiết kế Form nhập liệu cho bảng TNHANVIEN.
Trang 84
TT. Visual Basic
Trang 85
Chương 6 ĐỐI TƯỢNG DỮ LIỆU ACTIVEX
Mục tiêu:
Chương này gồm các bài tập nhằn rèn luyện cho sinh viên cách thức
lập trình cơ sở dữ liệu bằng cách sử dụng thư viện đối tượng ADO, giao diện
lập trình phổ biến hiện nay.
Học xong chương này, sinh viên phải nắm bắt được các vấn đề sau:
Các thành phần trong mô hình đối tượng ADO gồm có:
- Đối tượng Connection.
- Đối tượng Recordset.
- Đối tượng Command.
- Đối tượng Field.
Cách thức sử dụng các đối tượng này trong ứng dụng viết bằng VB.
Kiến thức có liên quan:
- Giáo trình Visual Basic - Chương 11
Tài liệu tham khảo:
Visual Basic 6 Certification Exam Guide - Dan Mezick & Scot Hillier
- Chapter 12, Page 345 - McGraw-Hill - 1998.
TT. Visual Basic
I. HƯỚNG DẪN
Bài tập 6-1
SỬ DỤNG ADO DATA CONTROL
Bước 1: Khởi động một dự án VB6 mới, thêm điều khiển Data ADO vào hộp
ToolBox nhờ chọn Menu Command Project | Components..., rồi Microsoft ADO
Data Control 6.0 (OLEDB) như dưới đây:
Hình VI.1: Tham chiếu thư viện ADO
Bước 2: Đặt tên dự án là ADODataControl. Sửa thuộc tính Name của form chính
thành frmADO, Caption: ADO DataControl Demo.
Đặt một Control Data ADO tên Adodc1 lên Form. Muốn cho nó nằm bên dưới Form,
thiết lập thuộc tính Align của nó trong cửa sổ Properties thành 2 - vbAlignBottom.
Bước 3: Nhấp bên phải hàng property (Custom), kế đó click lên nút browse có ba
chấm để hộp thoại Property Pages hiện ra. Trong hộp thoại nầy, trên Tab General
chọn Radio (Option) Button Use Connection String rồi nhấp nút Build....
Trong hộp 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.
Trang 86
TT. Visual Basic
Trang 87
Mục Select or enter a database name ta chọn E:\Program Files\Microsoft
Visual Studio\VB98\BIBLIO.MDB, trên máy tính khác có thể nằm trên ổ C hay D.
Hình VI.2: Thiết lập Connection
TT. Visual Basic
Sau đó, click nút Test Connection phía dưới để thử xem connection có được thiết lập
tốt không.
Hình VI.3: Lựa chọn CSDL
Bước 4: Lập connection xong rồi, ta chỉ định muốn lấy gì về làm Recordset bằng cách
chọn thuộc tính 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.
Hình VI.4: RecordSource
Chọn trị số 2-adOpenDynamic cho thuộc tính Cursor Type của Adodc1:
Trang 88
TT. Visual Basic
Trang 89
Hình VI.5: CursorType
Bước 5: Bây giờ đặt lên Form 4 điều khiển nhãn 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, chọn textbox txtYearPublished (năm xuất bản), rồi thiết
lập thuộc tính Datasource của nó thành Adodc1. Khi chọn thuộc tính DataField của
txtYearPublished và mở ComboBox ra ta 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 việ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.
Hình VI.6: Xác lập DataField
TT. Visual Basic
Đến đây, mặc dù chưa viết một dòng lệnh nào, bạn có thể chạy chương trình và nó sẽ
hiển thị như dưới đây:
Hình VI.7: Kết quả ứng dụng
Bài tập 6-2
TẠO TẬP TIN LIÊN KẾT DỮ LIỆU (DATALINK FILE)
Tập tin liên kết dữ liệu là tập tin Windows dùng để chứa các thông tin về chuỗi kết nối
đến một CSDL nào đó. Chúng ta sẽ sử dụng tập tin này trong việc thiết lập đối tượng
kết nối (Connection) đến CSDL.
Bước 1: DataLink File được tạo trong cửa sổ Windows Explorer. Do đó khởi động
Windows Explorer, vào thư mục \Program Files\Common Files\System\Ole DB\Data
Links. Đây là nơi thường chứa các tập tin DataLink.
Bước 2: Chọn New\Microsoft Data Link từ Windows Explorer.
Bước 3: Đổi tên tập tin này thành Biblio.UDL.
Bước 4: Nhấp chuột phải lên tập tin mới này và chọn PROPERTIES từ menu.
Bước 5: Nhấp chuột chọn mục PROVIDER & chọn Microsoft JET 3.51 OLEDB
Provider. Nhấp Next.
Bước 6: Chọn đường dẫn đến tập tin BIBLIO.MDB (C:\Program Files\Microsoft
Visual Studic\VB98\Biblio.mdb) trong mục Select or Enter Database Name.
Bước 7: Nhấp mục Test Connection để kiểm tra kết nối có thành công hay không?
Bước 8: Chọn OK để lưu lại kết nối dữ liệu này.
Bài tập 6-3
ĐỐI TƯỢNG ADO RECORDSET
Bước 1: Trước khi bắt đầu, cần kiểm tra tập tin DataLink của bài 6-2 có được tạo ra
hay là không?
Bước 2: Tạo một dữ án mới trong VB ở thư mục Basic\Bt6-3.
Trang 90
TT. Visual Basic
Trang 91
Bước 3: Tham chiếu đến thư viện ADO bằng cách chọn Project\References\ActiveX
Data Object 2.0 Library. Chọn OK.
Bước 4: Đặt một điều khiển ListBox lên Form (Name: lstName)
Bước 4: Xử lý sự kiện Form_Load như sau:
Set m_Connection = New ADODB.Connection
m_Connection.ConnectionString = _
"File Name=C:\Program Files\Common Files\System\Ole DB\Biblio.udl"
m_Connection.Open
Set m_RecordSet = New ADODB.Recordset
m_RecordSet.Open "Select Name FROM Publishers", m_Connection
Do While Not m_RecordSet.EOF
lstName.AddItem m_RecordSet!Name
m_RecordSet.MoveNext
Loop
Bước 5: Chạy chương trình, điều gì xảy ra?
Đoạn mã trên là một ví dụ điển hình về việc sử dụng phương thức Open để nhận về
một tập hợp các Records từ cơ sở dữ liệu.
Bước 6: Thay vì khởi tạo đối tượng Connection nhờ đặt thuộc tính ConnectionString
như trên (dùng tập tin DataLink), hãy khởi tạo đối tượng này như trong phần mô tả ở
lý thuyết (sử dụng thuộc tính Provider & ConnectionString). Sau đó chạy chương
trình. Nhận xét.
Bài tập 6-4
LƯU RECORSET RA TẬP TIN
Bước 1: Trước khi bắt đầu, cần kiểm tra tập tin DataLink của bài 6-2 có được tạo ra
hay là không?
Bước 2: Tạo một dự án mới trong VB ở thư mục Basic\Bt6-4.
Bước 3: Tham chiếu đến thư viện ADO bằng cách chọn Project\References\ActiveX
Data Object 2.0 Library. Chọn OK.
Bước 4: Thêm một điều khiển mở rộng vào hộp công cụ Toolbox nhờ chọn
Project\Components. Chọn Microsoft Common Dialog Control 6.0 và Microsoft
DataGrid Control 6.0. Chọn OK.
Bước 5: Tạo giao diện như sau:
TT. Visual Basic
Trang 92
5
4
3
2
1
Hình VI.8: Lưu
Recordset ra tập tin
1: TextBox:
Name: txtSQL; MultiLine: True.
2: CommandButton:
Name: cmdTT; Caption: Thực thi.
3: CommandButton:
Name: cmdLuu; Caption: Lưu tập tin
4: CommandButton:
Name: cmdMo; Caption: Mở tập tin
5: DataGrid: Name: grdResult
Ngoài ra, chương trình còn có sử dụng hộp thoại mở & lưu tập tin; do đó, ta
thêm vào một Common Dialog vào ứng dụng với thuộc tính Name: dlgFile.
Bước 6: Khi chương trình thực thi, mỗi khi người dùng nhập vào một câu lệnh SQL
vào TextBox rồi nhấp chọn Thực thi, câu SQL này sẽ thực thi và hiển thị kết quả ở
lưới bên phải. Do đó sự kiện cmdTT_Click dược xử lý như sau:
Private Sub cmdTT_Click()
Dim m_RecordSet As ADODB.Recordset
Set m_RecordSet = New ADODB.Recordset
m_RecordSet.CursorLocation = adUseClient
m_RecordSet.CursorType = adOpenStatic
m_RecordSet.Open txtSQL.Text, _
"File Name=C:\Program Files\Common Files\System\OLE DB\Biblio.udl"
Set grdResult.DataSource = m_RecordSet
End Sub
Bước 7: Lưu RecordSet vào tập tin sẽ được thực hiện nhờ hàm Save. Ở đây, ta sử
dụng hộp thoại CommonDialog để mở và lưu tập tin. Sự kiện cmdLuu_Click được xử
lý:
Private Sub cmdLuu_Click()
On Error GoTo xuly
Dim m_RecordSet As ADODB.Recordset
Set m_RecordSet = grdResult.DataSource
TT. Visual Basic
Trang 93
Set grdResult.DataSource = Nothing
Dim strFileName As String
dlgFile.Filter = "Record Set Files (*.dat)|*.dat"
dlgFile.ShowSave
strFileName = dlgFile.FileName
' Luu cac mau tin
m_RecordSet.Save strFileName
Exit Sub
xuly:
MsgBox Err.Description, vbCritical + vbSystemModal, "Loi"
End Sub
Bước 8: Mỗi khi tập hợp mẩu tin được lưu lên tập tin, chúng sẽ không phụ thuộc vào
vào các nối kết với nguồn dữ liệu. Để mở dữ liệu được lưu, sử dụng hàm Open với tên
tập tin là đối số. Sự kiện cmdOpen_Click được xử lý:
Private Sub cmdMo_Click()
On Error GoTo xuly
Dim strFileName As String
dlgFile.Filter = "Record Set Files (*.dat)|*.dat"
dlgFile.ShowOpen
strFileName = dlgFile.FileName
Dim m_RecordSet As ADODB.Recordset
Set m_RecordSet = New ADODB.Recordset
m_RecordSet.Open strFileName
Set grdResult.DataSource = m_RecordSet
Exit Sub
xuly:
MsgBox Err.Description, vbCritical + vbSystemModal, "Loi"
End Sub
Bước 9: Chạy chương trình, nhập câu lệnh SQL vào TextBox, nhấp Thực thi. Sau đó
lưu tập mẩu tin này lên đĩa. Mỗi khi muốn mở lại tập tin nào đó, sử dụng Mở tập tin.
II. BÀI TẬP TỰ LÀM
1) Sử dụng ADO, thiết kế Form nhập liệu cho bảng THangHoa (hình dưới). Ở đây
thay vì hiển thị MaLoai, ta lại hiển thị TenLoai:
TT. Visual Basic
Hình VI.9: Form nhập liệu
2) Sử dụng ADO, thiết kế Form nhập liệu cho bảng TNhanVien.
3) Sử dụng ADO, thiết kế Form cho phép nhập (sửa, xóa) thông tin về một phát sinh
về một mặt hàng nào đó trong ngày. Lưu ý: Trường STT là kiểu AutoNumber
(Access), Ngay: lấy ngày hệ thống (hàm Now).
Trang 94
TT. Visual Basic
Trang 95
Chương 7 MÔI TRƯỜNG DỮ LIỆU
Mục tiêu:
Chương này gồm các bài tập nhằm rèn luyện cho sinh viên cách thức
sử dụng môi trường dữ liệu (Data Environment) của VB để lập trình CSDL.
Học xong chương này, sinh viên phải nắm bắt được các vấn đề sau:
Sử dụng thành thạo môi trường dữ liệu gồm:
- Tạo đối tượng Connection.
- Tạo đối tượng Command.
- Viết mã lệnh thao tác với môi trường dữ liệu.
Kiến thức có liên quan:
- Giáo trình Visual Basic, Chương 12.
Tài liệu tham khảo:
- Visual Basic 6 Certification Exam Guide – Chapter 10, Page 277 -
Dan Mezick & Scot Hillier - McGraw-Hill - 1998.
- Tự học Lập trình cơ sở dữ liệu với Visual Basic 6.0 trong 21 ngày
(T1) - Chương 9, trang 395 - Nguyễn Đình Tê (chủ biên) – Nhà xuất bản
Giáo dục - 2001.
TT. Visual Basic
Trang 96
I. HƯỚNG DẪN
Bài 7-1
DATA ENVIRONMENT
Data Environment cho phép chúng ta tạo ứng dụng cơ sở dữ liệu với OLEDB
một cách nhanh chóng và hiệu quả. Trong bài tập này, ta sẽ tìm hiểu về Data
Environment và Report Designer của VB.
Bước 1: Tạo thư mục Basic\Bt7-1. Tạo một dự án kiểu Stardard EXE lưu vào trong
thư mục đó.
Bước 2: Nếu mục Data Environment không có sẵn trong Project Explorer, ta chọn
Project\Components…, đánh dấu vào mục Data Environment trong tùy chọn
Designers, nhấp OK. Chọn Project\More ActiveX Designers… để thêm Data
Environment vào môi trường soạn thảo.
Bước 3: Trong Data Environment, nhấp chuột phải vào đối tượng Connection1, chọn
Properties…, chọn Microsoft Jet 3.51 OLE DB Provider.
Bước 4: Trong mục chọn Connection, chọn cơ sở dữ liệu mình muốn thao tác trong
mục Select or Enter a Database Name Box; ở đây ta chọn CSDL BIBLIO.MDB
(thường ở đường dẫn C:\Program Files\Microsoft Visual
Studio\VB98\BIBLIO.MDB). Nhấp nút Test Connection để kiểm tra nối kết với
CSDL có bị lỗi hay không? Ta sẽ nhấp OK nếu nối kết này thành công (nếu không ta
phải kiểm tra lại).
Bước 5: Trong Data Environment, nhấp chuột phải vào đối tượng Connection1 và
chọn RENAME để đổi tên thành BIBLIO.
Bước 6: Nhấp chuột phải vào BIBLIO và chọn ADD COMMAND trên menu, một đối
tượng command được tạo ra với tên là Command1 trong Data Environment. Nhấp
chuột phải vào đối tượng mới tạo này, chọn RENAME để đổi tên thành Publishers.
Bước 7: Nhấp chuột phải vào Publishers và chọn mục Properties, một hộp thoại quy
định các thuộc tính cho đối tượng Publishers được mở ra. Trong mục chọn General,
chọn Source Data là SQL Statement và ta nhập câu SQL sau vào khung nhập:
SELECT PubID, Name FROM Publishers WHERE Name LIKE ?
Câu SQL trên phải nhận vào một tham số từ chương trình gọi nó (dấu chấm
hỏi). Nghĩa là để câu SQL này thực thi được, ta cần cung cấp một tham số đầu vào cho
nó.
Bước 8: Để định nghĩa tham số, ta chuyển sang mục chọn Parameters, ta thấy có một
tham số đã được định nghĩa tên là Param1. Mặc nhiên của tham số này là kiểu số, tuy
nhiên ta sẽ đổi chúng thành kiểu chuỗi với các thuộc tính như sau:
Data Type adVarChar
Host Data Type String
Size 255
Bước 9: Tạo một recordset con cho đối tượng Publishers command bằng cách nhấp
chuột phải vào vào đối tượng này và chọn ADD CHILD COMMAND trên menu. Các
TT. Visual Basic
câu truy vấn này dùng để tìm thông tin về các sách dựa vào nhà xuất bản nào đó. Khi
một command con được thêm vào, nó có tên là COMMAND1.
Bước 10: Trong command con này, nó cần phải có một câu SQL để truy xuất thông
tin. Câu truy vấn này có nhiệm vụ kết nối thông tin từ các bảng Title và Author đối với
từng loại nhà xuất bản.
Bước 11: Mở cửa sổ Data View bằng cách chọn View\Data View Window trên menu.
Trong Data View, xác định thư mục Data Environment Connections. Đối tượng
connection BIBLIO được hiển thị trong thư mục này. Mở đối tượng
connection và xác định thư mục Tables. Trong thư mục này, chọn bảng
Titles. Nhấp đúp vào bảng Titles này để hiển thị nội dung của bảng.
Bước 12: Khi đã hiển thị nội dung của bảng, ta mở Data Tools bằng cách
chọn VIEW\SHOW PANES trên menu. Chọn tất cả các mục trong phần này
(Diagram, Grid, SQL, Results).
Bước 13: Khi tất cả các mục của Data Tool được chọn, ta kéo các bảng Title Author
và Authors vào khung diagram của Data Tools. Sau đó ta phải kiểm tra các liên kết của
các bảng: bảng Titles có liên kết với bảng Title Author bởi trường ISBN không? Bảng
Title Author có liên kết với bảng Authors bởi trường Au_ID không? Nếu không có các
mối liên kết này ta phải chọn đúng trường trong bảng Title Author và kéo chúng vào
trường tương ứng trong 2 bảng Titles và Authors.
Bước 14: Để tạo ra câu truy vấn, ta đánh dấu chọn vào trường PubID, Title trong bảng
Titles; trường Author trong bảng Authors. Kế tiếp, kiểm tra khung Grid ta thấy có một
dòng có dấu * (như hình dưới) biểu thị là ta đã chọn tất cả các trường của tất cả các
bảng. Ta không cần chọn tất cả thông tin, do đó ta nhấp vào dòng có dấu * và bấm
phím Delete để xóa chúng. Lúc đó trong khung SQL ta thấy có câu SQL sau:
SELECT Titles.PubID AS Expr1, Titles.Title AS Expr2,
Authors.Author AS Expr3
FROM Titles, `Title Author`, Authors
WHERE Titles.ISBN = `Title Author`.ISBN AND
`Title Author`.Au_ID = Authors.Au_ID
Trang 97
TT. Visual Basic
Hình VII.1: SQL Builder
Bước 15: Chọn câu SQL hiển thị bên trên rồi nhấp Edit\Copy.
Bước 16: Nhấp đúp trở lại vào Data Environment, nhấp chuột phải vào command con
đã có và chọn PROPERTIES trên menu. Sau đó đổi tên của command trong mục
General thành Titles. Chọn Source Data là SQL Command; sau đó dán nội dung câu
SQL đã copy ở trên vào khung nhập câu SQL (chọn Edit\Paste).
Bước 17: Chọn mục RELATION , ta thấy trường PubID của cả hai bảng Publishers và
Titles được hiển thị. Nhấp nút ADD để xác định liên kết giữa câu command cha và
command con.
Bước 18: Đóng các cửa sổ và lưu dự án lại.
XÂY DỰNG GIAO DIỆN CHƯƠNG TRÌNH
Bước 19: Thêm vào một điều khiển vào dự án bằng cách chọn Project\Components
trên menu; tìm đến mục Microsoft Hierachial Flexgrid Control 6.0 (OLEDB). Đánh
dấu tùy chọn này và nhấp OK.
Bước 20: Mở Form1, tạo giao diện cho chương trình như dạng sau (hình bên dưới):
Item 1: Label
Name: lblCompany
Caption: Company Name
Item 2: TextBox
Name: txtCompany
Text: micro
Item 3: CommandButton
Name: cmdGO
Caption: GO
Default: TRUE
Item 4: Hierarchial FlexGrid
Name: grdTitles
AllowUserResizing: 1-flexResizeColumns
DataSource: DataEnvironment1
DataMember: Publishers
FixedCols: 0
Hình VII.2: Giao diện ứng dụng
Trang 98
TT. Visual Basic
Bước 21: Nhấp chuột vào phải vào Hierarachical FlexGrid trên Form1, hộp thoại
thuộc tính của Hierarachical được mở ra. Chọn mục BANDS trong hộp thoại này.
Chọn Band0 (Publishers) sau đó không đánh dấu vào trường PubID (với tên là Expr1)
để nó không hiển thị khi thực hiện câu SQL. Cũng vậy, không đánh dấu vào trường
PubID của Band1 (hình dưới):
Hình VII.3: Chọn trường hiển thị trên lưới
Bước 22: Đổi tên của các cột trong Band1 từ Expr2, Expr3 thành Title và Author bằng
cách: Nhấp chuột 2 lần vào mục cần đổi tên trong Column Caption, nhập tên mới vào;
sau đó chọn OK.
Bước 23: Mục đích của chương trình này là: Khi chương trình thực thi, trong TextBox
có một từ là micro, từ được đề nghị tìm kiếm. Khi nhấp chuột vào nút nhấn; đoạn văn
bản trong TextBox được dùng để thực thi câu SQL Publishers; câu SQL này sẽ truy
tìm tất cả các công ty mà tên của chúng chứa chuỗi được nhập vào trong TextBox; kết
quả trả về được hiển thị trên lưới. Do đó, ta sẽ xử lý sự kiện cmdGO_Click bằng đoạn
mã sau:
MousePointer = vbHourglass
With DataEnvironment1
.rsPublishers.Close
.Publishers "%" & txtCompany.Text & "%"
End With
' Thiet lap tren luoi
Set grdTitles.DataSource = DataEnvironment1
grdTitles.CollapseAll
MousePointer = vbDefault
Bước 24: Lưu dự án và chạy chương trình. Sử dụng micro để tìm kiếm (ta có thể thử
với từ khác như: hill hay mill)
TẠO BÁO CÁO (REPORT)
Trang 99
TT. Visual Basic
Trang 100
Bước 25: Nếu Data Report Designer không hiển thị dưới menu PROJECT, mở hộp
thoại COMPONENTS, chọn Data Report Designer trong mục chọn Designers. Sau đó
ta thêm Data Report Designer vào dự án bằng cách chọn PROJECT\ADD DATA
REPORT trên menu.
Bước 26: Liên kết Data Report Designer với Data Environment nhờ việc thiết lập
thuộc tính DataSource của Data Report là DataEnvirronment1 và thuộc tính
DataMember là Publishers.
Bước 27: Nhấp chuột phải trên Data Report Designer và chọn RETRIEVE
STRUCTURE trên menu. Một hộp thoại xác nhận hiện lên và ta chọn YES.
Bước 28: Ta nhận thấy trên report gồm các phần: report header, page header,
publisher information, title information, page footer, và report footer.
Bước 29: Chọn phần Report Header, trong phần này, thêm một Report Label vào, đặt
Caption là Book Report; ta có thể đổi Font chữ và kích thước Font tương ứng.
Bước 30: Chọn Group header, trong phần này thêm một Report TextBox vào; đặt
thuộc tính DataMember là Publishers và DataField là Name.
Bước 31: Chọn phần Detail của Report. Trong phần này, thêm 2 Report TextBox vào,
đặt 2 điều khiển này cạnh nhau trong phần Detail; chọn TextBox thứ nhất và đặt thuộc
tính DataMember là Titles và DataField là Expr2, đối với TextBox thứ hai:
DataMember: Titles, DataField: Expr3.
Bước 32: Lưu dự án lại.
Bước 33: Chọn Form1 trong môi trường soạn thảo; tạo một menu trong Form1 bằng
cách chọn Tools\Menu Editor; trong Menu Editor, tạo một Report menu với các phần
tử là Preview và Print với các thuộc tính sau:
Item 1 – Menu
Name: mnuReport
Caption: Report
Item 2 – Menu
Name: mnuPreview
Caption: Preview
Item 3 – Menu
Name: mnuPrint
Caption: Print
Bước 34: Ta có thể xem báo cáo trước khi in nhờ hàm Show của đối tượng Report.
Trong hàm xử lý sự kiện mnuPreview, thêm đoạn mã sau:
DataReport1.Show
Bước 35: In báo cáo được thực hiện nhờ hàm PrintReport của đối tượng Report. Trong
hàm xử lý sự kiện mnuPrint, thêm đoạn mã sau:
DataReport1.PrintReport
Bước 36: Lưu và chạy chương trình. Thử hiển thị và in report.
TT. Visual Basic
Bài 7-2
BIỂU MẪU NHẬP LIỆU VỚI DATA ENVIRONMENT
o Tạo một dự án mới; bổ sung Data Enviroment vào dự án của ta nhờ chọn
Project/Add Data Environment. Khi lựa chọn mục này, môi trường DED sẽ hiển thị;
sử dụng cửa sổ Properties để thiết lập thuộc tính Name là: datHH. Ở đây, ta sẽ sử dụng
DED để kết nối với CSDL HANGHOA.MDB.
o Sửa lại thuộc tính Name của Connection1 là conHH; sau đó chuột phải lên
conHH, chọn Properties.
Ở hộp thoại đầu tiên, ta phải chọn một trình cung cấp dữ liệu, ở đây chọn
Microsoft Jet 4.0 OLE DB Provider, nhấn Next để tiếp tục.
Tiếp theo ta cần nhập chính xác đường dẫn đến tập tin CSDL, chẳng hạn
ở đây là: H:\Visual Basic\HangHoa.Mdb.
Cuối cùng, nhấn nút Test Connection để kiểm tra việc nối kết dữ liệu
chính xác hay không?
Hình VII.4: Tạo Connection
Tạo đối tượng Command:
o Xây dựng một đối tượng Command kết nối trực tiếp với Table (bảng)
THANGHOA trong file dữ liệu HangHoa.mdb.
o Nhấp chuột phải trên kết nối dữ liệu conHH & chọn Add Command; sửa
Command Name là: comHH; chọn Table từ Combo Box Database Object, chọn
THANGHOA từ Combo Box Object Name.
o Trước khi đóng hộp thoại này, ta chuyển qua nhãn Advanced & thiết lập
LockType là 3 – Optimistic (mặc nhiên là 1 – Read Only); Cursor Location: Use
client-side cursor. Nhờ vậy ta mới có thể cập nhật Record Set từ chương trình của ta.
Trang 101
TT. Visual Basic
o Trở lại giao diện DED, ta được:
Hình VII.5: Đối
tượng Command
Tạo một ứng dụng nhập liệu với DED
o Ở môi trường DED, ta kéo các trường của Command comHH vào Form1,
chỉnh sửa lại cho thích hợp.
o Ở đây ta có sử dụng một lưới để hiển thị dữ liệu; do vậy ta chọn
Project\Component; chọn Microsoft DataGrid Control 6.0 (OLE DB); sau đó kéo điều
khiển này vào Form, thiết lập các thuộc tính cho thích hợp.
Name: grdHH.
DataSource: datHH
DataMember: comHH
o Nhấp chuột phải lên điều khiển DataGrid, chọn Retrieve Structure. Sau đó,
lưu dự án & chạy chương trình ta được:
Hình VII.6: Kết quả thực thi ứng dụng
Trang 102
TT. Visual Basic
o Thêm các nút hành động (Thêm, Sửa, Xóa,…). Chẳng hạn các sự kiện
cmd_Them_Click, cmdXoa_Click, cmdLuu_Click, cmdHuy_Click được xử lý:
Hình VII.7: Giao diện đầy đủ
Private Sub cmdThem_Click()
With datHH.rscomHH
.AddNew
End With
End Sub
Private Sub cmdXoa_Click()
With datHH.rscomHH
.Delete
.Update
Me.Refresh
End With
End Sub
Private Sub cmdHuy_Click()
With datHH.rscomHH
.CancelUpdate
Me.Refresh
End With
End Sub
Private Sub cmdLuu_Click()
On Error GoTo Xuly
With datHH.rscomHH
.Update
Trang 103
TT. Visual Basic
End With
Me.Refresh
Exit Sub
Xuly:
MsgBox Err.Description, vbCritical + vbSystemModal,
"Error"
End Sub
Như vậy, ta đã thiết kế xong một Form cho phép hiển thị thông tin các hàng hóa, Form
này cho phép sửa đổi, thêm mới các mẩu tin trong bảng THANGHOA của CSDL
HANGHOA.MDB.
II. BÀI TẬP TỰ LÀM
1) Sử dụng DataEnviroment, thiết kế Form nhập liệu cho bảng THangHoa (hình dưới).
Ở đây thay vì hiển thị MaLoai, ta lại hiển thị TenLoai:
Hình VII.8: Form nhập liệu
2) Sử dụng DataEnviroment, thiết kế Form nhập liệu cho bảng TNhanVien.
3) Sử dụng DataEnviroment, thiết kế Form cho phép nhập (sửa, xóa) thông tin về một
phát sinh về một mặt hàng nào đó trong ngày. Lưu ý: Trường STT là kiểu
AutoNumber (Access), Ngay: lấy ngày hệ thống (hàm Now).
Trang 104
TT. Visual Basic
Trang 105
Chương 8 THIẾT LẬP BÁO CÁO VÀ XUẤT
THÔNG TIN
Mục tiêu:
Chương này nhằm giới thiệu cho sinh viên cách thức để tạo báo biểu,
thành phần không thể thiếu trong các ứng dụng cơ sở dữ liệu.
Học xong chương này, sinh viên phải nắm bắt được các vấn đề sau:
Sử dụng Data Report để tạo các loại báo biểu sau:
- Báo cáo dạng bình thường.
- Báo cáo có phân nhóm dữ liệu.
- Báo cáo dạng phân cấp.
Kiến thức có liên quan:
- Giáo trình Visual Basic, chương 13.
Tài liệu tham khảo:
- Visual Basic 6.0 và Lập trình cơ sở dữ liệu - Chương 21, trang 636
- Nguyễn Ngọc Mai (chủ biên) – Nhà xuất bản Giáo dục - 2000.
- Tự học Lập trình cơ sở dữ liệu với Visual Basic 6.0 trong 21 ngày
(T1) - Chương 5, trang 183 - Nguyễn Đình Tê (chủ biên) - Nhà xuất bản Giáo
dục - 2001.
TT. Visual Basic
I. HƯỚNG DẪN
TẠO KẾT NỐI VỚI CƠ SỞ DỮ LIỆU
Bước 1: Tạo một dự án trong thư mục Basic\Bt8-1.
Bước 2: Để tạo một report, ta phải xác định dữ liệu nào sẽ sử dụng trong report, đó là
nhiệm vụ của Data Environment.
Ta chèn một Data Environment vào dự án nhờ việc chọn Project\More ActiveX
Designer\Data Environment.
Ta sử dụng Data Environment để lưu trữ các tập dữ liệu sẽ dùng trong report.
Bước 3: Nhấp đúp vào trình thiết kế Data Environmenr trong cửa sổ Project Explorer
để mở trình thiết kế. Sau đó nhấp vào Connection1 và thay đổi thuộc tính Name của nó
thành cnHangHoa; nhấp chuột phải vào cnHangHoa và chọn mục Properties, hộp thoại
Properties hiện ra:
Trang 106
Hình VIII.1: Tạo nối kết đến CSDL
Bước 4: Ta sẽ tạo kết nối đến cơ sở dữ liệu DBHH.MDB có sẵn trên máy. Do đó ta
nhấp nút Next sau khi chọn Microsoft OLEDB Provider for ODBC. Trong tùy chọn
này ta chọn mục Use data source name; rồi chọn nguồn dữ liệu DBHH đã tạo ra từ
trước đó.
Bước 5: Nhấp nút Test Connection để kiểm tra xem nối kết có thành công hay không?
TẠO ĐỐI TƯỢNG COMMAND
Bước 6: Sau khi đã xác định Data Environment Connection, ta có thể xác định
Command, Command lưu kết nối tới bảng dữ liệu và những trường sẽ được dùng trong
TT. Visual Basic
report. Nhấp nút phải chuột vào Command trong cửa sổ thiết kế Data Environment và
chọn mục Add Command, một hộp thoại xuất hiện như hình bên dưới.
Bước 7: Thiết lập thuộc tính Name của Command là comHangHoa, chọn Connection
là cnHangHoa. Trong phần DataBase Object chọn kiểu lấy dữ liệu là Table; sau đó
trong ComboBox Object Name chọn Table THANGHOA.
Hình VIII.2: Đối tượng Command
XÂY DỰNG MỘT BÁO CÁO (REPORT) ĐƠN GIẢN
Bước 8: Bây giờ ta sẽ tạo một báo cáo để hiển thị dữ liệu đã xác định trong Data
Environment. Để làm điều này, nhấp phải chuột vào Project trong cửa sổ Project
Explorer; rồi chọn Add\Data Report; sau đó đặt tên của report này lại là drHangHoa,
DataSource: DataEnvironment1, DataMember: cnHangHoa (trong cửa sổ Properties).
Bước kế tiếp ta đóng tất cả các cửa sổ ngoại trừ 2 cửa sổ DataEnvironment và
drHangHoa.
Bước 9: Bước này chỉ đơn giản là nhấp chọn và kéo các trường từ Data Environment,
mục command comHangHoa vào Data Report. Đối với report này, nhấp chọn và kéo
các trường tên MaHang, TenHang, DVTinh, MaLoai. Khi thực hiện xong, màn hình
tương tự như hình dưới:
Trang 107
TT. Visual Basic
Hình VIII.3: Thiết kế Report
Ở đây, ta chỉ kéo chọn các trường vào mục Detail của report, còn các tiêu đề cột
(tương ứng với các trường); ta đặt chúng trong phần Page Header của report. Có một
ghi nhận rằng, khi ta kéo thả các trường vào trong phần Detail của report, một report
Label chứa tên trường và một report TextBox cho phép nhập liệu xuất hiện trong phần
Detail. Do đó, trong phần Detail ta chỉ giữ lại TextBox, còn report Label ta chuyển
chúng lên phần Page Header. Vì vậy coi như ta đã thiết lập xong phần hiển thị của
report. Vấn đề còn lại chỉ là trang trí sao cho đạt yêu cầu về mặt thẩm mỹ.
CHÈN CÁC TIÊU ĐỀ ĐẦU TRANG VÀ CUỐI TRANG
Bước 10: Tất cả các report hoàn chỉnh đều phải có một số đặc điểm nào đó; nhất là
report phải có một tên, số trang của report được hiển thị rõ ràng. Các mục này đặt tốt
nhất là trong phần Report Header và Report Footer.
Ta cần phải thêm Report Header và Report Footer vào trong report của mình;
đơn giản chỉ cần nhấp chuột phải vào report và chọn Show Report Header | Footer. Hai
phần mới này sẽ được tạo ra.
Bước 11: Thêm một report Label vào phần Header của report; sau đó thay đổi thuộc
tính Caption của nó thành Chi tiết hàng hóa các loại. Ở đây có thể chọn Font chữ với
kích thước lớn (VD: 20) để tiêu đề của report được hiển thị lớn.
Trang 108
TT. Visual Basic
Bước 12: Nhấp chuột phải vào mục report Footer và chọn tùy chọn Insert Control |
Current Page Number để chèn số trang vào; tiếp đến chọn Insert Control | Total
Number of Pages để chèn tổng số trang của report.
Bước 13: Đến đây, phần thiết kế report coi như hoàn tất; ta lưu report lại.
Bước 14: Tạo giao diện cho chương trình như sau:
Hình VIII.4: Giao diện chính
Bước 15: Khi chọn Chi tiết hàng hóa, report vừa thực hiện sẽ được hiển thị; do đó ta
xử lý sự kiện này như sau:
Private Sub mnuChiTiet_Click()
drHangHoa.Show
End Sub
Bước 16: Lưu dự án và chạy chương trình.
TẠO REPORT BẰNG CÂU LỆNH SQL
Bước 17: Data Report cho phép ta tạo các report bằng cách sử dụng các câu lệnh SQL
như là nền tảng của đối tượng Command. Trong phần này ta sẽ sử dụng câu lệnh
SELECT để lấy dữ liệu từ các bảng TPHATSINH, THANGHOA, TLOAIHANG và
chọn những trường sau: PhatSinh.SOTT, TPhatSinh.NGAY, TPhatSinh.LOAI,
TPhatSinh.FIEU, TPhatSinh.HTEN, TPhatSinh.SOLG, TPhatSinh.DGIA,
THangHoa.TENHANG, TLoaiHang.TENLOAI.
Bước 18: Chọn mục Data Enviroment1 trong Project Explorer, sau đó nhấp chuột phải
vào đối tượng cnHangHoa, chọn Add Command. Ta điền vào các thuộc tính như hình
dưới:
Trang 109
TT. Visual Basic
Hình VIII.5: Command là SQL
Bước 19: Trong mục Source of Data, thay vì chọn DatabaseObject như bài trước, ở
đây ta chọn SQL Statement và nhập câu SQL tương ứng vào, rồi chọn OK.
Bước 20: Thêm một DataReport vào dự án với Name: drHHPS, DataSource:
DataEnvironment, DataMember: comHHPS. Sau đó kéo thả các trường tương ứng vào
report rồi trang trí lại chúng.
Bước 21: Lưu report lại. Ta sẽ gọi thực thi report này trong phần xử lý tình huống khi
chọn mục Hàng Hóa Phát Sinh của menu.
Private Sub mnuHHPS_Click()
drHHPS.Show
End Sub
Bước 22: Lưu dự án và chạy chương trình.
NHÓM DỮ LIỆU
Bước 23: Ta có thể nhóm dữ liệu lại theo một nội dung nào đó. Ở đây, trong
DataEnvironment1, thêm vào một đối tượng Command mới tên comHHNgay. Trong
phần này ta sẽ lấy dữ liệu từ các bảng TPhatSinh, ThangHoa, TLoaiHang và lấy ra các
trường TPhatSinh.SOTT, TPhatSinh.NGAY, TPhatSinh.LOAI, TPhatSinh.FIEU,
TPhatSinh.HTEN, TPhatSinh.SOLG, TPhatSinh.DGIA, THangHoa.TENHANG,
TLoaiHang.TENLOAI.
Bước 24: Ta sẽ nhóm dữ liệu trên lại theo từng ngày, do đó ta làm theo các bước như
trong hình dưới:
Trang 110
TT. Visual Basic
Hình VIII.6: Nhóm dữ liệu
Chọn Grouping, chọn trường để nhóm lại là Ngay; sau đó nhấp OK.
Bước 25: Trong phần Aggregates, ta điền thông tin như hình:
Hình VIII.8: Hàm thao tác trên nhóm
Ở đây ta sử dụng các hàm tập hợp để tính tổng số lượng bán được trong ngày.
Do đó ta chọn mục Aggregate, chọn mục thích hợp và nhấp Add để thêm vào một hàm
tính trên nhóm.
Bước 25: Chèn một DataReport mới vào tên drHHNgay, DataSource:
DataEnvironment1, DataMember: comHHNgay_Grouping. Sau đó nhấp chuột phải
vào Report và chọn mục Show Group Header | Footer.
Bước 26: Ta kéo trường ngày trong phần Sumary Fields in comHHNgay_Grouping
vào phần Group Header. Trong phần Detail ta kéo thả các trường khác. Còn phần
Group_Header, ta lại kéo TongSolg và đặt vào.
Trang 111
TT. Visual Basic
Hình VIII.9: Thiết kế Report
Bước 27: Lưu report lại. Ta sẽ gọi report hiển thị khi nhấp vào mục Phat sinh theo
ngay trên menu:
Private Sub mnuPsngay_Click()
drHHNgay.Show
End Sub
Bước 28: Lưu dự án lại, chạy chương trình, ta có thể in thử ra giấy.
Bước 29: Còn một report nữa ta sẽ thực hiện với điều kiện là tìm các phát sinh hàng
hóa theo từng nhân viên (tương tự như ở report trên) và ta sẽ gọi thực thi ở mục menu
còn lại.
Bước 30: Xử lý sự kiện mnu_Thoat:
Private Sub mnuThoat_Click()
End
End Sub
Trang 112
TT. Visual Basic
II. BÀI TẬP TỰ LÀM
1) Tạo báo cáo (Report) cho phép in ra giấy thông tin của các hàng hóa, các thông
tin này bao gồm: Mã hàng hóa, tên hàng hóa, đơn vị tính, tên loại hàng tương
ứng.
2) Tạo báo cáo (Report) cho phép in ra giấy thông tin chi tiết về các phát sinh theo
từng ngày, các thông tin này bao gồm: Ngày lập, loại, Fieu, họ tên khách hàng, lý
do, số lượng, đơn giá, thành tiền (với Thành tiền = Số lượng * Đơn giá), tên hàng
hóa và họ tên nhân viên tương ứng. (Hình VIII.10)
Hình VIII.10: Phát sinh theo ngày
3) Tạo báo cáo (Report) cho phép in ra giấy thông tin chi tiết về các phát sinh theo
từng nhân viên, các thông tin này bao gồm: Ngày lập, loại, Fieu, họ tên khách
hàng, lý do, thành tiền (với Thành tiền = Số lượng * Đơn giá), tên hàng hóa và
loại hàng tương ứng. (Hình dưới)
Trang 113
TT. Visual Basic
Hình VIII.11: Phát sinh theo nhân viên
LỜI KẾT
Chương Thiết lập báo cáo cũng là chương kết thúc của giáo
trình TT. Visual Basic. Tuy nhiên lập trình sự kiện và lập trình cơ sở
dữ liệu với VB chỉ là một phần trong những khả năng mà VB mang
lại. Hy vọng chúng tôi sẽ gặp lại bạn đọc trong những chuyên đề
khác của VB.
Trang 114
Các file đính kèm theo tài liệu này:
- Bai tap Visual Basic.pdf