MSFlexGrid : Điều khiển này cho ta trình bày dữ liệu dưới dạng lưới. Ta còn có thể sử dụng điều khiển để xử lý dữ liệu, gộp nhóm và sắp xếp. Phiên bản thương phẩm của điều khiển này là VideoSoft VSLEX.
5.4. Truy xuất dữ liệu thông qua Data Control
Để làm việc với CSDL ta có thể dùng điều khiển Data. Điều khiển này cho phép ta truy cập đến một CSDL bất kì trong Windows. Để có thể truy cập đến CSDL ta thực hiện như sau:
Trong hộp công cụ ToolBox, ta chọn điều khiển Data và đặt nó lên Form.
Xác định các thuộc tính cho điều khiển.
Viết các lệnh để truy xuất dữ liệu.
5.4.1. Các thuộc tính
Điều khiển Data có các thuộc tính sau:
Name: Tên của điều khiển, nếu ta không đặt lại tên thì tên của nó là Data1, Data2...
Connect: Thuộc tính này qui định môi trường CSDL mà ta muốn truy cập, môi trường ngầm định là Access. Ta có thê thay đổi thuộc tính này để kết nối đến các CSDL khác như Foxpro, Excel, Dbase v.v...
DataBase: Tên CSDL mà ta muốn truy cập. Muốn làm việc với CSDL nào đó ta phải gán tên cùng đường dẫn của nó cho thuộc tính này. Các CSDL ngầm định là được tạo bởi Access. Các CSDL trong Access có đuôi là *.mdb. Ví dụ ta chọn QTKD.mdb. Để gán cho điều khiển một CSDL nào đó khi thiết kế thì tại thuộc tính này ta kích nút Build và chọn CSDL trong một thư mục nào đó. Nếu khi thi hành đề án mà ta muốn thay đổi CSDL thì ta có thể dùng lệnh sau:
Data1.DataBase = TenCSDL
Trong đó TenCSDL là một chuỗi kí tự chứa đường dẫn và tên của CSDL cần mở. Ví dụ:
Data1.DataBase = “D:DH SPKT NDQTKD.mdb”
RecordSource: Sau khi chọn CSDL ta phải chọn một bảng cụ thể trong CSDL. Mỗi CSDL có tập hợp các bảng khác nhau. Ta chỉ việc mở thuộc tính này và chọn một bảng nào đó. Nếu không muốn chọn ta có thể bỏ trống thuộc tính này và viết câu lệnh sau:
Data1.RecordSource = TableName
Trong đó Data1 là tên của điều khiển, còn TableName là tên của một bảng nào đó trong CSDL. Ngoài ra ta có thể gán cho thuộc tính này một biểu thức là một câu lệnh SQL.
RecordSetType: Xác định kiểu tệp dữ liệu của điều khiển dữ liệu. Thuộc tính này có thể nhận một trong 3 giá trị sau: Table, Dynaset, SnapShot. Nếu ta chọn thuộc tính này là Table thì ta có thể thao tác với một bảng của CSDL. Nếu ta chọn Dynaset thì ta có thể thao tác với một Query thành lập từ nhiều bảng của CSDL và có thể thay đổi tập dữ liệu (RecordSet). Còn nếu ta chọn SnapShot thì ta có thể làm việc với tệp các bảng dữ liệu tĩnh mà không thay đổi được chúng. Giá trị ngầm định của thuộc tính này là Dynaset.
ReadOnly: Thuộc tính này có 2 giá trị là True và False (ngầm định). Nếu chọn True thì ta không thể cập nhật được dữ liệu của RecordSet.
Visible: Thuộc tính này cho phép (True) hay không cho phép (False) hiện ra điều khiển dữ liệu. Nếu ta không muốn điều khiển dữ liệu hiện ra khi thi hành thì ta gán thuộc tính này là False.
Exclusive: Thuộc tính này dùng để cho phép (False) hay không cho phép (True) nhiều người dùng CSDL hiện tại.
5.4.2. Cách sử dụng điều khiển Data
a) Thao tác với CSDL
Khi thay đổi một CSDL (thay DataBaseName, thay Connect) hoặc thay một bảng mới (thay đổi tính chất của RecordSource) hoặc thay đổi tính chất của ReadOnly, Exclusive... thì ta phải kích hoạt phương pháp Refresh của điều khiển dữ liệu như sau:
Data1.Refresh
Sự thay đổi trong CSDL của điều khiển dữ liệu được thực hiện bằng lệnh trong thời gian thực hiện project. Sự thay đổi được thực hiện bằng cách gán các thuộc tính DataBaseName, Connect, RecordSetType, RecordSource của Data Control bằng một giá trị mới. Mỗi khi có sự thay đổi như thế thì phải Refresh( ) lại điều khiển dữ liệu.
b) Đối tượng RecordSet
Tập hợp các dữ liệu được chọn thông qua thuộc tính RecordSource được gọi là RercodSet của điều khiển dữ liệu. Hay nói cách khác RecordSet là tập dữ liệu đã chọn của điều khiển dữ liệu. Dù thuộc tính RecordSource có thay đổi như thế nào thì tập dữ liệu của điều khiển dữ liệu vẫn là RecordSet. Đây là một đối tượng quan trọng nhất của điều khiển dữ liệu.
Điều khiển CSDL chính là thực hiện thao tác trên RecordSet. Để điều khiển RecordSet ta sử dụng các phương pháp và thuộc tính của nó.
Sau đây ta xét một số phương thức và thuộc tính của nó:
Thuộc tính BOF và EOF
Các thuộc tính EOF và BOF của RecordSet cho ta biết trạng thái cuối hay đầu của RecordSet. Nếu con trỏ đang ở cuối File thì giá trị RecordSet.EOF = True. Còn nếu con trỏ đang ở đầu RecordSet thì giá trị RecordSet.BOF = True.
Ví dụ:
If not Data1.RecordSet.BOF Then Data1.RecordSet.MovePrevious
hoặc
If not Data1.RecordSet.EOF Then Data1.RecordSet.MoveNext
Các phương thức di chuyển trong CSDL
Muốn di chuyển trong CSDL ta sử dụng các phương pháp sau:
MoveFirst: Chuyển đến đầu RecordSet
MoveLast: Chuyển đến cuối RecordSet MovePrevious: chuyển đến bản ghi trước RecordSet MoveNext: Chuyển đến bản ghi sau RecordSet
Đối tượng Fields
RecordSet có các đối tượng con khác nhau trong đó có một đối tượng quan trọng và hay được dùng đó là đối tượng Fields. Đối tượng này của RecordSet cho phép ta truy cập đến từng trường của bảng dữ liệu. Để trỏ tới trường thứ i nào đó ta viết Fields(i). Số hiệu của các trường bắt đầu từ 0 đến n-1, trong đó n là số lượng các trường. Ngoài ra ta có thể thay đổi số hiệu trường bằng tên trường. Ví dụ trường số 1 có tên là Makh thì 2 lệnh sau là tương đương.
Print Data1.RecordSet.Fields(1)
Print Data1.RecordSet.Fields(“Makh”)
Cả 2 lệnh này đều cho ta nội dung trường “Makh” của bản ghi hiện thời
Thuộc tính RecordCount
Số lượng các bản ghi trong một bảng được lưu trữ trong thuộc tính RecordCount.
Số hiệu các bản ghi được bắt đầu từ 0 đến RecordCount – 1
Sửa và bổ sung dữ liệu
Để thêm mới, bổ sung, sửa chữa các bản ghi của CSDL ta dùng các phương thức sau:
AddNew: Thêm bản ghi mới vào cuối bảng. Khi thực hiện phương pháp này thì ta sẽ có một bản ghi trống và ta có thể bổ sung dữ liệu cho bản ghi này.
Edit: Cho phép sửa bản ghi hiện hành. Sau phương pháp này ta có thể thay đổi nội dung của bản ghi hiện tại.
Update: Cập nhật bản ghi vừa được tạo hoặc sửa chữa.
Delete: Xoá bản ghi hiện hành. Sau khi xoá bản ghi ta phải di chuyển đến bản ghi khác bằng các phương pháp di chuyển đã nêu ở trên.
Close: Dùng để đóng một bảng.
5.4.3. Ví dụ minh hoạ
Tạo cơ sở dữ liệu qltv.mdb gồm 3 bảng: Sach(Mas, Tens, Tacgia, Nhaxb, Namxb) Docgia(Madg, Tendg, Diachi, Dienthoai) Muontra(Madg, Mas, Ngaym, Ngayht, Ngayt)
sử dụng Visual Data Manager. Sau đó, lập một chương trình gồm 3 form: Sách- thao tác trên bảng Sach, Độc giả- thao tác trên bảng Docgia, Mượn trả- thao tác trên bảng Muontra theo mẫu:
Yêu cầu:
Form Sách tạo bằng công cụ tạo form tự động
Form Độc giả sử dụng công cụ Data ở mức độ đơn giản
Form Mượn trả lập trình sử dụng các thuộc tính, phương thức của điều khiển Data, đối tượng Recordset, đối tượng Fields
Giải:
Bước 1.Tạo cơ sở dữ liệu qltv.mdb sử dụng Visual Data Manager (VisData)
Bước 2. Tạo các bảng: Sach, Docgia, Muontra, trong đó: Mas là khoá chính của bảng Sach, Madg là khoá chính của bảng Docgia, Mas và Madg là khoá ngoại của bảng Muontra. Khi tạo xong cơ sở dữ liệu qltv.mdb, ta thu được kết quả sau trong cửa sổ VisData.
Bước 3. Tạo form Sach sử dụng công cụ Data Form Designer
- Từ cửa sổ VisData chọn Utility/Data Form Designer
- Trên cửa sổ Data Form Designer, nhập tên form trong mục Form name, chọn bảng sach trong mục RecordSource, đưa tất cả các trường trong bảng Sach trong mục Available Fields sang mục Included Fields, như hình sau:
- Nhấn nút Build Form, sau đó nhấn Close ta thu được form sau
- Gán lại giá trị thuộc tính Caption của form frmSach và các label, ta thu được form sau:
Bước 4. Tạo form Độc giả và lập trình sự kiện cho các nút lệnh
Từ menu hệ thống chọn Project/Add Form/Open để bổ sung một form mới vào project hiện hành, sau đó bổ sung vào form các điều khiển và gán cho một số điều khiển các giá trị theo bảng sau:
Điều khiển | Thuộc tính | Giá trị | Ghi chú | |
1 | Form | Name | frmDocgia | |
Caption | Độc giả | |||
2 | CommandButton | Name | cmdfirst | |
Caption | Về đầu | |||
3 | CommandButton | Name | cmdpre | |
Caption | Về trước | |||
4 | CommandButton | Name | cmdadd | |
Caption | Thêm | |||
5 | CommandButton | Name | cmdedit | |
Caption | Sửa | |||
6 | CommandButton | Name | cmddel | |
Caption | Xóa | |||
7 | CommandButton | Name | cmdnext | |
Caption | Về sau |
Có thể bạn quan tâm!
- Lập trình Window - 16
- Nhắc Lại Một Số Khái Niệm Về Cơ Sở Dữ Liệu
- Lập trình Window - 18
- Tham Chiếu Đến Thư Viện Đối Tượng Của Dao
- Lập trình Window - 21
- Lập trình Window - 22
Xem toàn bộ 248 trang tài liệu này.
CommandButton | Name | cmdlast | ||
Caption | Về cuối | |||
9 | Label | Caption | Mã độc giả | |
10 | Label | Caption | Họ và tên | |
11 | Label | Caption | Địa chỉ | |
12 | Label | Caption | Điện thoại |
8
Data | Databasename | D:Bai tap VB QLTVqltv.mdb | ||
Name | DataDocgia | |||
RecordSource | Docgia | |||
Visible | False | |||
14 | TextBox | Name | txtmadg | |
DataSource | DataDocgia | |||
DataField | Madg | |||
15 | TextBox | Name | Txttendg | |
DataSource | DataDocgia | |||
DataField | Tendg | |||
16 | TextBox | Name | txtDiachi | |
DataSource | DataDocgia | |||
DataField | Diachi | |||
17 | TextBox | Name | txtDienthoai | |
DataSource | DataDocgia | |||
DataField | Dienthoai |
Sau khi thiết lập giá trị cho các thuộc tính ta thu được form kết quả như sau:
Lập trình sự kiện cho các nút lệnh: Mở cửa sổ Code của form frmDocgia và gò vào các dòng lệnh sau:
Private Sub cmdAdd_Click()
If cmdadd.Caption = "Thêm" Then datadocgia.Recordset.AddNew cmdadd.Caption = "Lưu" txtmadg.SetFocus
Else
datadocgia.UpdateRecord
datadocgia.Recordset.Bookmark = datadocgia.Recordset.LastModified cmdadd.Caption = "Thêm"
End If End Sub
„-------------------------------------------------------------------------------
Private Sub cmddel_Click()
Dim traloi As Byte
traloi = MsgBox("Bạn muốn xoá bản ghi này", vbYesNo + vbQuestion, "Xoá dữ liệu")
If traloi = 6 Then
If cmddel.Caption = "Xoá" Then datadocgia.Recordset.Delete cmddel.Caption = "Lưu"
Else
datadocgia.UpdateRecord cmddel.Caption = "Xoá" cmdnext_Click
End If End If
End Sub
„---------------------------------------------------------------------------------------Private
Sub cmdedit_Click()
If cmdedit.Caption = "Sửa" Then datadocgia.Recordset.Edit cmdedit.Caption = "Lưu" txtmadg.SetFocus
Else datadocgia.UpdateRecord
datadocgia.Recordset.Bookmark = datadocgia.Recordset.LastModified cmdedit.Caption = "Sửa"