intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN - CHƯƠNG 5

Chia sẻ: Nguyen Nhi | Ngày: | Loại File: PDF | Số trang:48

137
lượt xem
33
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

KẾT NỐI VÀ THAO TÁC VỚI CSDL MỤC TIÊU: SAU KHI HOÀN THÀNH CÁC BÀI TẬP, NGƯỜI HỌC CÓ THỂ Kết nối đến CSDL bằng điều khiển ADO Data Control và Connection Truy cập (Select, Update, Delete, Insert) dữ liệu sử dụng Connection Gắn kết dữ liệu giữa các điều khiển với đối tượng Connection Viết được một số ứng dụng quản trị CSDL đơn giản Tạo và trình bày báo cáo (Report) để in ra máy in.

Chủ đề:
Lưu

Nội dung Text: BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN - CHƯƠNG 5

  1. BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005 ch−¬ng v kÕt nèi vµ thao t¸c víi csdl MỤC TIÊU: SAU KHI HOÀN THÀNH CÁC BÀI TẬP, NGƯỜI HỌC CÓ THỂ Kết nối đến CSDL bằng điều khiển ADO Data Control và Connection Truy cập (Select, Update, Delete, Insert) dữ liệu sử dụng Connection Gắn kết dữ liệu giữa các điều khiển với đối tượng Connection Viết được một số ứng dụng quản trị CSDL đơn giản Tạo và trình bày báo cáo (Report) để in ra máy in. A - ĐỀ BÀI TẬP Qui ước Các bài tập trong chương này đều liên quan đến việc kết nối và thao tác với một Cơ sở dữ liệu (CSDL) nhất định, do vậy để đảm bảo sự thống nhất cũng như tránh hiểu sai trong một số tình huống, Ở đây chúng ta chủ yếu sử dụng cơ sở dữ liệu sẵn có khi cài bộ Visual Studio 6.0, có tên là : Nwind.mdb. Sở dĩ chúng ta chọn CSDL này làm mẫu trong hầu hết các bài tập vì mấy lý do sau: • Sẵn có trong máy tính khi cài Visual Basic. • Đây là một cơ sở dữ liệu được xây dựng thực tế từ quản lý bán hàng của hãng North Wind, do vậy các bài tập liên quan sẽ sát với thực tiễn hơn. • Số lượng bản ghi trong CSDL này tương đối nhiều, đủ để minh hoạ trong rất nhiều trường hợp, do đó không phải mất công sức để lại. • Trong CSDL này có nhiều bảng và đã được chuẩn hoá. • Có đầy đủ các mối quan hệ 1-nhiều, nhiều-nhiều để có thể thực hành với các truy vấn nâng cao, truy vấn trên nhiều bảng đồng thời. Cơ sở dữ liệu Nwind.mdb thường được lưu trong thư mục cùng với thư mục VB: C:\Program Files\Microsoft Visual Studio\VB98\NWIND.MDB. Với đường dẫn rất dài như trên, nói chung là không được thuận tiện trong khi viết chương trình. Ta sẽ giả thiết rằng, với mỗi chương trình, tệp Nwind.mdb sẽ được Copy vào trong cùng thư mục với tệp dự án. Ví dụ, nếu ta có một dự án tên là : QLHSSV.VBP, đặt trong thư mục C:\Projects\QLHSSV thì tệp Nwin.mdb cũng phải được đặt trong thư mục này: Hình 5.1 – Qui ước về việc copy và lưu tệp CSDL Nwind.mdb Trang 126
  2. BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005 Ở đây cũng xin được cung cấp danh sách tất cả 8 bảng và mối quan hệ giữa các bảng này để chúng ta tiện theo dõi và tham khảo trong quá trình làm bài tập. Hình 5.2 – Các bảng và sơ đồ liên kết giữa chúng trong CSDL Nwind.mdb Kiểu dữ liệu của mỗi trường trong từng bảng cũng xin được cung cấp tại đây: Hãy lưu ý là chi tiết của từng kiểu dữ liệu (độ rộng) trong mỗi bảng có thể tham khảo bằng cách mở trực tiếp bảng đó ở chế độ Design View. Hình 5.3 - Bảng Suppliers (Nhà cung cấp) Trang 127
  3. BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005 Hình 5.4 - Bảng Products (Sản phẩm) Hình 5.5 - Bảng Order Details (Chi tiết đơn hàng) Hình 5.6 - Bảng Orders (Đơn hàng) Hình 5.7 - Bảng Customers (Khách hàng) Trang 128
  4. BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005 Hình 5.8 - Bảng Categories (Chủng loại sản phẩm) Hình 5.9 - Bảng Employees (Nhân viên bán hàng) Hình 5.10 - Bảng Shippers (Công ty vận chuyển) Các bài tập (từ 1-11) sử dụng điều khiển ADO Data Bài 1: Viết chương trình xem thông tin về khách hàng (Version 1). a. Giao diện: Hình 5.11 – Xem thông tin về khách hàng bằng ADO Data control và Textbox b. Yêu cầu: • Xây dựng giao diện chương trình như hình 11 • Có thể xem thông tin về khách hàng (gồm mã, họ tên, địa chỉ, số điện thoại) bằng cách click vào các nút trên điều khiển ADO Data control. Trang 129
  5. BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005 Bài 2: Viết chương trình xem thông tin về khách hàng (Version 2) a. Giao diện Hình 5.12 – Xem thông tin về khách hàng sử dụng các phương thức của ADO b. Yêu cầu • Xây dựng giao diện như hình 12 • Chương trình có thể di chuyển đến các bản ghi thông qua các nút nhấn • Có cập nhật trạng thái (Enable/Disable) các nút khi đến BOF, EOF của bảng. • Nội dung trong các textbox không được phép thay đổi. Bài 3: Viết chương trình xem thông tin về khách hàng (Version 3) a. Giao diện Hình 5.13 – Danh sách khách hàng hiển thị trong Data Grid Control b. Yêu cầu : Hiển thị tất cả các bản ghi trong bảng Customers trong một DataGrid Bài 4: Viết chương trình xem thông tin về khách hàng (Version 4) a. Giao diện Hình 5.14 – Thông tin hiển thị chỉ gồm 4 trường b. Yêu cầu: Như bài 3 nhưng thông tin hiển thị chỉ gồm 4 trường Trang 130
  6. BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005 Bài 5: Viết chương trình xem một bảng CSDL bất kỳ trong CSDL NWind a. Giao diện Hình 5.15 – Nạp một bảng bất kỳ trong CSDL NWind vào Data Grid b. Yêu cầu: Khi người dùng chọn tên bảng và click vào nút "Xem bảng này" thì chương trình nạp và hiển thị bảng vừa được chọn trong một Data Grid. Bài 6: Viết chương trình nạp tất cả mã nhà cung cấp vào một hộp Combo a. Giao diện Hình 5.16 -Nạp các mã nhà cung cấp vào một ComboBox b. Yêu cầu: Nạp tất cả các Mã nhà cung cấp (SupplierID) trong bảng Suppliers vào một hộp Combo như hình 16 Bài 7: Viết chương trình liệt kê các sản phẩm do 1 công ty cung cấp (ver 1) a. Giao diện Hình 5.17 - Chỉ hiển thị các sản phẩm ứng với mã NCC được chọn Trang 131
  7. BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005 b. Yêu cầu: • Nạp tất cả các mã nhà cung cấp (Supplier) vào hộp Combo (Như bài số 6) • Khi người dùng chọn một mã nhà cung cấp trong Hộp Combo và click nút "Liệt kê các sản phẩm của NCC này" thì hiển thị tất cả các sản phẩm mà nhà cung cấp này đã cung ứng (Như hình 17). Bài 8: Viết chương trình liệt kê các sản phẩm do 1 công ty cung cấp (ver 2) a. Giao diện Hình 5.18 – Liệt kê các sản phẩm sử dụng TreeView và DataGrid b. Yêu cầu • Nạp Mã (SupplierID) và tên Công ty (CompanyName) trong bảng Suppliers vào một cây (TreeVIew), trong đó Mã được lưu trong trường Key và Tên công ty được lưu trong trường Text của mỗi nút thuộc cây. • Khi người dùng click chuột lên một nút (tên công ty) trong cây thì hiển thị tất cả các sản phẩm mà công ty đó cung cấp (Hiển thị tất cả các trường trong bảng Products) trong một Datagrid control như hình 18. Bài 9: Như bài 8 nhưng các sản phẩm được hiển thị trong một ListView. (Để cho ngắn gọn, hãy liệt kê 3 trường là ProductName,CategoryID,UnitPrice) như H.19. a. Giao diện: Hình 5.19 - Hiển thị sản phẩm trong ListView Trang 132
  8. BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005 b. Yêu cầu: Khi người dùng click vào tên nhà cung cấp thì hiển thị SP trong ListView Bài 10: Xây dựng cây nhiều mức để xem thông tin về những sản phẩm đã bán a. Giao diện: Hình 5.20 – Xem thông tin bán hàng của mỗi sản phẩm b. Yêu cầu: • Nạp tên các công ty cung cấp sản phẩm vào cây (Nạp vào mức 1, sau gốc) • Ứng với mỗi công ty, nạp các sản phẩm mà công ty sản xuất • Khi người dùng click vào tên một sản phẩm (như hình 20) thì hiển thị các hoá đơn có xuất hiện sản phẩm này. Thông tin hiển thị gồm Mã, giá, số lượng. Bài 11: Bổ sung thêm một trường mới trong câu lệnh SELECT Hình 5.21 – Thêm một cột (trường) trong câu lệnh SELECT Yêu cầu: Như bài 10 nhưng thông tin hiển thị có thêm trường "Giá trị", trường này được dẫn xuất từ việc tính : Giá trị = Giá * Số lượng. Trang 133
  9. BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005 Các bài tập sử dụng đối tượng connection và Recordset -------------------------------------- Bài 12: Thực hiện yêu cầu như bài tập 5 nhưng chỉ sử dụng đối tượng Connection và đối tượng Recordset để thao tác với CSDL. Bài tập 13: Làm lại bài 10 với sử dụng đối tượng Connection và Recordset Bài tập 14: Thao tác CSDL trên nhiều Form a. Mô tả chương trình Trong chương trình này, chúng ta sẽ xây dựng một ứng dụng gồm 3 Form để minh hoạ việc sử dụng đối tượng kết nối Connection. Đối tượng Connection sẽ được sử dụng chung trong tất cả các form (không giống với điều khiển ADO Data trước đây). Ứng dụng này sẽ có 3 Form và một Module: • Form thứ nhất có tên là frmNhapNCC: Để nhập thêm các nhà cung cấp vào bảng Suppliers. • Form thứ hai có tên là frmNhapSP để nhập các sản phẩm mà một Nhà cung cấp sản xuất. • Form chính: Tên là frmMain. Form này sẽ hiển thị danh sách các nhà cung cấp và sản phẩm (như bài tập số 9). Ngoài ra, trong form này có 2 nút lệnh là "Nhập NCC" và "Nhập sản phẩm", khi click vào nút thứ nhất thì hiển thị frmNhapNCC, khi Click vào nút thứ hai thì hiển thị frmNhapSP. • Module có tên là modKetNoi: Trong module này sẽ khai báo biến toàn cục là đối tượng Connection tên là Cn. Đối tượng Cn này sẽ được sử dụng chung trong các form. b. Giao diện khi chạy chương trình (Hình 22,23,24) Hình 5.22 – Giao diện của form : frmMain Trang 134
  10. BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005 Hình 5.23 – Giao diện form: frmNhapNCC Hình 5.24 – Giao diện form: frmNhapSP Bài 15: Thiết kế báo cáo và kết xuất ra máy in danh sách các sản phẩm (ver 1) Hình 5.25 – Báo cáo danh sách các sản phẩm để in ra máy in Trang 135
  11. BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005 Bài 16: Thiết kế báo cáo và kết xuất ra máy in danh sách các sản phẩm (ver 2) Hình 5.26 – Báo cáo có thêm khung viền (Border) B- HƯỚNG DẪN - GIẢI MẪU Bài 1: Viết chương trình xem thông tin về khách hàng (Version 1). a. Thiết kế giao diện Hình 5.27 - Đặt tên cho các điều khiển trên Form b. Hướng dẫn : Sử dụng từ khoá SET để gắn kết các Textbox với ADO data Control. Có 2 cách để gắn kết, là gắn kết trong lúc thiết kế hoặc gắn kết thông qua mã lệnh. Để gắn kết, chỉ cần đặt 2 thuộc tính là DataSource và DataField. Datasource cho biết là lấy dữ liệu từ nguồn nào còn Datafield cho biết là lấy (hiển thị) trường nào ? c. Chương trình mẫu Option Explicit Private Sub Form_Load() Dim strConn As String strConn = "Provider=Microsoft.jet.oledb.4.0; Data Source=" & App.Path & "\Nwind.mdb" adoDSKH.ConnectionString = strConn adoDSKH.CommandType = adCmdTable '/// Sẽ lấy một bảng adoDSKH.RecordSource = "Customers" '/// Bảng có tên là Customers adoDSKH.Refresh Set txtMaKH.DataSource = adoDSKH '/// Nguồn dữ liệu lấy từ adoDSKH txtMaKH.DataField = "CustomerID" '/// Trường hiển thị là CustomerID Set txtHoTenKH.DataSource = adoDSKH Trang 136
  12. BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005 txtHoTenKH.DataField = "ContactName" Set txtDiaChiKH.DataSource = adoDSKH txtDiaChiKH.DataField = "Address" Set txtDienThoaiKH.DataSource = adoDSKH txtDienThoaiKH.DataField = "Phone" End Sub d. Ghi chú: Nếu thuộc tính CommandType của adoDSKH là adCmdTable thì thuộc tính RecourceSource phải chứa tên của bảng, còn nếu thuộc tính adCmdTable là adCmdText thì thuộc tính RecordSource phải là một câu lệnh SQL (ví dụ Select, Update, Delete, Insert...) Bài 2: Viết chương trình xem thông tin về khách hàng (Version 2) a. Thiết kế giao diện Hình 5.28 – Đặt tên cho các điều khiển trên Form b. Hướng dẫn : Sử dụng các phương thức di chuyển bản ghi có sẵn của đối tượng con Recordset trong điều khiển ADO Data. Tuy nhiên cần kiển tra trước khi di chuyển (thông qua việc kiểm tra thuộc tính EOF và BOF) c. Chương trình mẫu Option Explicit Private Sub Form_Load() Dim strConn As String strConn="Provider=Microsoft.jet.oledb.4.0;Data Source=" & App.Path & "\Nwind.mdb" adoDSKH.ConnectionString = strConn adoDSKH.CommandType = adCmdTable adoDSKH.RecordSource = "Customers" adoDSKH.Refresh Set txtMaKH.DataSource = adoDSKH txtMaKH.DataField = "CustomerID" Set txtHoTenKH.DataSource = adoDSKH txtHoTenKH.DataField = "ContactName" Set txtDiaChiKH.DataSource = adoDSKH txtDiaChiKH.DataField = "Address" Set txtDienThoaiKH.DataSource = adoDSKH txtDienThoaiKH.DataField = "Phone" Trang 137
  13. BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005 Dim Cmd As Object For Each Cmd In Controls If TypeOf Cmd Is TextBox Then Cmd.Locked = True Next adoDSKH.Visible = False '/// Ẩn điều khiển ADO Data, sử dụng nút nhấn End Sub '------------------------------------------------------------------------------------------------------------------------ '/// Cập nhật lại trạng thái (Enable/Disable) của các nút nhất khi đã hết bản ghi (EOF và BOF) Sub CapNhatNutNhan() cmdPrevious.Enabled = (adoDSKH.Recordset.BOF = False) cmdNext.Enabled = (adoDSKH.Recordset.EOF = False) End Sub '------------------------------------------------------------------------------------------------------------------------ '/// Trở về bản ghi đầu tiên Private Sub cmdFirst_Click() adoDSKH.Recordset.MoveFirst Call CapNhatNutNhan End Sub '------------------------------------------------------------------------------------------------------------------------ '/// Trở về bản ghi cuối cùng Private Sub cmdLast_Click() adoDSKH.Recordset.MoveLast Call CapNhatNutNhan End Sub '------------------------------------------------------------------------------------------------------------------------ '/// Trở về bản ghi tiếp theo Private Sub cmdNext_Click() If adoDSKH.Recordset.EOF = False Then adoDSKH.Recordset.MoveNext Call CapNhatNutNhan End Sub '------------------------------------------------------------------------------------------------------------------------ '/// Trở về bản ghi đứng trước Private Sub cmdPrevious_Click() If adoDSKH.Recordset.BOF = False Then adoDSKH.Recordset.MovePrevious Call CapNhatNutNhan End Sub Bài 3: Viết chương trình xem thông tin về khách hàng (Version 3) a. Thiết kế giao diện Hình 5.29 – Giao diện và tên các điều khiển b. Hướng dẫn: Sử dụng câu lệnh SET để gắn kết Datagrid với ADO Data c. Chương trình mẫu: Trang 138
  14. BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005 Option Explicit Private Sub Form_Load() Dim strConn As String strConn="Provider=Microsoft.jet.oledb.4.0;Data Source=" & App.Path & "\Nwind.mdb" adoDSKH.ConnectionString = strConn adoDSKH.CommandType = adCmdTable adoDSKH.RecordSource = "Customers" adoDSKH.Refresh Set dgrDSKH.DataSource = adoDSKH '/// (gắn) Hiển thị dữ liệu trong adoDSKH adoDSKH.Visible = False '/// Ẩn điều khiển adoDSKH End Sub d. Ghi chú: Khi gắn kết DataGrid với ADO và thuộc tính CommandType của ADO Data là adcmdTable thì người dùng có thể sửa, thêm bản ghi trực tiếp trên DataGrid. (Với điều kiện thuộc tính AllowUpdate, AllowAddNew). Nói chung, không nên cho phép điều này bởi vì khi người dùng cập nhật trực tiếp như vậy, chúng ta rất khó có thể kiểm soát được dữ liệu nhập vào này. Bài 4: Viết chương trình xem thông tin về khách hàng (Version 4) a. Thiết kế giao diện: Giống như bài số 3 b. Hướng dẫn: Vì ở đây chỉ hiển thị 3 trường chứ không phải tất cả, do vậy phải sử dụng đến câu lệnh SQL. Như vậy cần đặt lại thuộc tính CommandType=adcmdTable và thuộc tính Recordsource là câu lệnh SELECT. c. Chương trình mẫu Option Explicit Private Sub Form_Load() Dim strConn As String, strSQL As string strConn="Provider=Microsoft.jet.oledb.4.0;Data Source=" & App.Path & "\Nwind.mdb" adoDSKH.ConnectionString = strConn strSQL = "SELECT Customerid,ContactName, Address, Phone from Customers" adoDSKH.CommandType = adCmdText adoDSKH.RecordSource= strSQL adoDSKH.Refresh Set dgrDSKH.DataSource = adoDSKH adoDSKH.Visible = False End Sub d. Ghi chú: Khi sử dụng câu lệnh SELECT để lấy dữ liệu về thì người dùng không thể sửa đổi dữ liệu trực tiếp trên DataGrid. Trang 139
  15. BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005 Bài 5: Viết chương trình xem một bảng CSDL bất kỳ trong CSDL NWind a. Thiết kế giao diện Hình 5.30 – Giao diện chương trình b. Hướng dẫn: Vẫn sử dụng cách trước đây là thay đổi tên bảng cho thuộc tính Recordsource. Tuy nhiên, vì một ADO Data được sử dụng nhiều lần và mở nhiều bảng do vậy trước khi mở bảng mới cần kiểm tra và đóng lại. c. Chương trình mẫu Option Explicit Private Sub cmdXem_Click() If Not (adoBang.Recordset Is Nothing) Then adoBang.Recordset.Close adoBang.RecordSource = "[" & cboDSBang.Text & "]" '/// cần đặt trong [ ] adoBang.Refresh Set dgrHienThi.DataSource = adoBang End Sub '------------------------------------------------------------------------------------------------------------------------ Private Sub Form_Load() Dim strConn As String strConn="Provider=Microsoft.jet.oledb.4.0;Data Source=" & App.Path & "\Nwind.mdb" adoDSKH.ConnectionString = strConn adoBang.CommandType = adCmdTable adoBang.RecordSource = "Customers" adoBang.Refresh Set dgrHienThi.DataSource = adoBang cboDSBang.AddItem "Customers" cboDSBang.AddItem "Products" cboDSBang.AddItem "Employees" cboDSBang.AddItem "Categories" cboDSBang.AddItem "Suppliers" cboDSBang.AddItem "Orders" cboDSBang.AddItem "Order details" '/// Tên của bảng này chứa dấu cách cboDSBang.AddItem "Shippers" cboDSBang.Text = "Customers" adoBang.Visible = False End Sub d. Ghi chú: Trang 140
  16. BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005 • Có thể sử dụng câu lệnh dạng ... Is Nothing ... để kiểm tra xem một đối tượng có rỗng hay không (tức chưa trỏ tới đối tượng nào trước đó). • Tên bảng trong Access có thể chứa dấu cách, khi đó để không bị lỗi thì tên bảng đó phải đặt trong cặp ngoặc [ ] trước khi gán cho thuộc tính Recordsource, giống như trong bài này. Với các bảng mà tên không chứa dấu cách thì bạn có thể thêm vào hoặc không. • Khi thiết kế CSDL, không nên đặt tên bảng chứa dấu cách. Bài 6: Viết chương trình nạp tất cả mã nhà cung cấp vào một hộp Combo a. Thiết kế giao diện Hình 5.31 – Giao diện chương trình b. Hướng dẫn: Sử dụng vòng lặp để duyệt các bản ghi trong Recordset c. Chương trình mẫu Option Explicit Private Sub Form_Load() Dim strConn As String strConn="Provider=Microsoft.jet.oledb.4.0;Data Source=" & App.Path & "\Nwind.mdb" adoDSKH.ConnectionString = strConn adoMaNCC.CommandType = adCmdTable adoMaNCC.RecordSource = "Suppliers" adoMaNCC.Refresh Do While adoMaNCC.Recordset.EOF = False cboMaNCC.AddItem adoMaNCC.Recordset!SupplierID adoMaNCC.Recordset.MoveNext Loop End Sub d. Ghi chú: Đây là công việc rất hay gặp phải, do vậy chúng ta nên nắm rõ. Bài 7: Viết chương trình liệt kê các sản phẩm do 1 công ty cung cấp (ver 1) a. Thiết kế giao diện Hình 5.32 – Giao diện chương trình Trang 141
  17. BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005 b. Hướng dẫn: Do phải nạp dữ liệu vào 2 nơi (Combo và DataGrid) nên cần 2 điều khiển ADO Data. c. Chương trình mẫu Option Explicit Private Sub cmdLietKe_Click() Dim strSQL As String, strConn As String strConn="Provider=Microsoft.jet.oledb.4.0;Data Source=" & App.Path & "\Nwind.mdb" adoDSKH.ConnectionString = strConn adoSanPham.CommandType = adCmdText If Not (adoSanPham.Recordset Is Nothing) Then adoSanPham.Recordset.Close strSQL = "Select * FROM Products WHERE SupplierID =" & cboMaNCC.Text adoSanPham.RecordSource = strSQL adoSanPham.Refresh Set dgrSanPham.DataSource = adoSanPham End Sub '------------------------------------------------------------------------------------------------------------------------ Private Sub Form_Load() Dim strConn As String strConn="Provider=Microsoft.jet.oledb.4.0;Data Source=" & App.Path &"\Nwind.mdb" adoMaNCC.ConnectionString = strConn adoMaNCC.CommandType = adCmdText adoMaNCC.RecordSource = "SELECT SupplierID FROM Suppliers" adoMaNCC.Refresh cboMaNCC.Clear Do While adoMaNCC.Recordset.EOF = False cboMaNCC.AddItem adoMaNCC.Recordset!SupplierID adoMaNCC.Recordset.MoveNext Loop adoMaNCC.Visible = False adoSanPham.Visible = False End Sub d. Ghi chú : Đây là dạng bài toán rất hay gặp phải là : Click vào một mục thì sẽ hiển thị thông tin về các con của mục đó. Bài 8: Viết chương trình liệt kê các sản phẩm do 1 công ty cung cấp (ver 2) a. Thiết kế giao diện: Hình 5.33 – Giao diện và tên các điều khiển Trang 142
  18. BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005 b. Hướng dẫn: Nạp thông tin về nhà cung cấp (SupplierID và CompanyName) vào các nút của cây. Trong đó SupplierID nạp vào thuộc tính Key và Company nạp vào thuộc tính Text. Tuy nhiên, cần lưu ý rằng, Thuộc tính Key của mỗi nút trên cây phải không được là số, trong khi đó thuộc tính SupplierID là một số (Autonumber). Do vậy, khi thêm ta sẽ ghép thêm một xâu ký tự - ví dụ "M1" – vào thuộc tính Key. Khi người dùng click vào một nút thì ta phải xem đó có phải là click vào Tên một công ty nào đó hay không ? Nếu đúng thì lấy các sản phẩm tương ứng với công ty này và cho hiển thị trong DataGrid. Lưu ý là : trước đó, mỗi nút ta đã thêm "M1", nên khi chọn trong bảng CSDL cần phải bỏ xâu này trước khi so sánh. c. Chương trình mẫu Option Explicit Sub NapMaNhaCC() Dim strConn As String strConn="Provider=Microsoft.jet.oledb.4.0;Data Source=" & App.Path & "\Nwind.mdb" adoDSKH.ConnectionString = strConn adoMaNCC.CommandType = adCmdText adoMaNCC.RecordSource = "SELECT SupplierID, CompanyName FROM Suppliers" adoMaNCC.Refresh tvwNhaCC.Nodes.Clear '/// Xoá cây tvwNhaCC.LabelEdit = tvwManual '/// Không cho sửa đổi nhãn của nút tvwNhaCC.Nodes.Add , , "NUT_GOC", "Tên các nhà cung cấp" '/// Tạo nút gốc Do While adoMaNCC.Recordset.EOF = False tvwNhaCC.Nodes.Add "NUT_GOC", tvwChild, "M1" & adoMaNCC.Recordset!SupplierID, adoMaNCC.Recordset!CompanyName adoMaNCC.Recordset.MoveNext Loop tvwNhaCC.Nodes("NUT_GOC").Expanded = True '/// Mở rộng nút gốc End Sub '------------------------------------------------------------------------------------------------------------------------ Private Sub Form_Load() Call NapMaNhaCC '/// Nạp các nhà cung cấp vào các nút của Cây adoMaNCC.Visible = False '/// Ẩn adoMaNCC adoSanPham.Visible = False '/// Ẩn adoSanPham End Sub '------------------------------------------------------------------------------------------------------------------------ '/// Sự kiện này xuất hiện khi người dùng click lên một nút của cây Private Sub tvwNhaCC_NodeClick(ByVal Node As MSComctlLib.Node) If Node.Key = "NUT_GOC" Then Exit Sub '/// Nếu là nút gốc thì thoát Dim MaNCC As String MaNCC = Mid(Node.Key, 3) '///Bỏ xâu ký tự "M1" ở đầu đi, chỉ lấy phần Mã NCC thôi '/// Cần phải kiểm tra nếu adoSanPham đang mở 1 bảng thì cần phải đóng lại If Not (adoSanPham.Recordset Is Nothing) Then adoSanPham.Recordset.Close adoSanPham.ConnectionString = "Provider=Microsoft.jet.oledb.4.0; Data Source=" & App.Path & "\Nwind.mdb" adoSanPham.CommandType = adCmdText adoSanPham.RecordSource = "SELECT * FROM Products WHERE SupplierID=" & Trang 143
  19. BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005 MaNCC adoSanPham.Refresh Set dgrSanPham.DataSource = adoSanPham '/// Hiển thị các sản phẩm End Sub Bài 9: Sử dụng với TreeView a. Thiết kế giao diện Hình 5.34 - Hiển thị sản phầm trong ListView b. Hướng dẫn: Tham khảo chương IV, phần Listview, TreeView. Trong đó, lvwSanPham.ListItems.Add để thêm một hàng (bản ghi) mới. Sau đó trỏ tới bản ghi này và thêm nội dung của các cột 2, cột 3,..) c. Chương trình mẫu Option Explicit '------------------------------------------------------------------------------------------------------------------------ '/// Thủ tục Nạp mã nhà cung cấp vào Cây. Sub NapMaNhaCC() Dim strConn As String strConn="Provider=Microsoft.jet.oledb.4.0;Data Source=" & App.Path & "\Nwind.mdb" adoDSKH.ConnectionString = strConn adoMaNCC.CommandType = adCmdText adoMaNCC.RecordSource = "SELECT SupplierID, CompanyName FROM Suppliers" adoMaNCC.Refresh tvwNhaCC.Nodes.Clear tvwNhaCC.LabelEdit = tvwManual tvwNhaCC.Nodes.Add , , "NUT_GOC", "Tên các nhà cung cấp" Do While adoMaNCC.Recordset.EOF = False tvwNhaCC.Nodes.Add "NUT_GOC", tvwChild, "M1" & adoMaNCC.Recordset!SupplierID, adoMaNCC.Recordset!CompanyName adoMaNCC.Recordset.MoveNext Loop tvwNhaCC.Nodes("NUT_GOC").Expanded = True End Sub '------------------------------------------------------------------------------------------------------------------------ '/// Khởi tạo ListView, tạo 3 cột với các nhãn tương ứng. Sub KhoiTaoListView() lvwSanPham.ColumnHeaders.Add , , "Tên sản phẩm" lvwSanPham.ColumnHeaders.Add , , "Mã loại" lvwSanPham.ColumnHeaders.Add , , "Đơn giá" Trang 144
  20. BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005 lvwSanPham.View = lvwReport lvwSanPham.GridLines = True End Sub Private Sub Form_Load() Call NapMaNhaCC '/// Nạp mã nhà cung cấp Call KhoiTaoListView '/// Khởi tạo ListView adoMaNCC.Visible = False '/// Ẩn 2 điều khiển này đi vì không dùng đến. adoSanPham.Visible = False End Sub '------------------------------------------------------------------------------------------------------------------------ '/// Thủ tục này được kích hoạt khi người dùng click vào một nút trên cây Private Sub tvwNhaCC_NodeClick(ByVal Node As MSComctlLib.Node) If Node.Key = "NUT_GOC" Then Exit Sub '/// Nếu là nút gốc thì không xử lý Dim MaNCC As String, Nut As ListItem If Not (adoSanPham.Recordset Is Nothing) Then adoSanPham.Recordset.Close MaNCC = Mid(Node.Key, 3) '///Bỏ xâu ký tự "M1" ở đầu đi, chỉ lấy phần Mã NCC thôi adoSanPham.ConnectionString= "Provider=Microsoft.jet.oledb.4.0;Data Source=" & _ App.Path & "\Nwind.mdb" adoSanPham.CommandType = adCmdText adoSanPham.RecordSource = "SELECT * FROM Products WHERE SupplierID=" & MaNCC adoSanPham.Refresh lvwSanPham.ListItems.Clear Do While adoSanPham.Recordset.EOF = False With adoSanPham Set Nut=lvwSanPham.ListItems.Add(, "A" & .Recordset!ProductID, .Recordset!ProductID) Nut.SubItems(1) = .Recordset!CategoryID Nut.SubItems(2) = .Recordset!UnitPrice .Recordset.MoveNext End With Loop End Sub Bài 10: Xây dựng cây nhiều mức để xem thông tin về những sản phẩm đã bán a. Thiết kế giao diện Hình 5.35 – Tên của các điều khiển trong chương trình b. Hướng dẫn Trang 145
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2