Lập trình VBA

Chia sẻ bởi Đinh Văn Năm | Ngày 10/05/2019 | 45

Chia sẻ tài liệu: Lập trình VBA thuộc Tin học 12

Nội dung tài liệu:

Chương 1: TỔNG QUAN VỀ VB
Chương 2: CÁC KHAI BÁO TRONG VB
Chương 3: CÁC CẤU TRÚC ĐIỀU KHIỂN VÀ KIỂU DỮ LIỆU CÓ CẤU TRÚC
Chương 4: THỦ TỤC CỦA NGƯỜI DÙNG
Chương 5: ĐỐI TƯỢNG VÀ BIẾN ĐỐI TƯỢNG
Phần 2: VISUAL BASIC FOR APPLICATION (VBA)
1
I. Giới thiệu chung
II. Module
III. Cấu trúc của Module
VI. Tạo và thực hiện các thủ tục
V. Một số hiệu ứng khi viết và sửa chữa mã lệnh
Chương 1: TỔNG QUAN VỀ VBA
2
Phạm Thị Kim Ngoan
Visual Basic là ngôn ngữ lập trình dùng để ràng buộc các đối tượng trong ứng dụng với nhau thành một hệ thống hợp nhất. Các chương trình của VBA (Visual Basic for Application) được tổ chức và hoạt động trong Access nhằm mục đích xây dựng các ứng dụng phức tạp.
Có thể dùng VB để thực hiện các công việc sau:
- Làm cho ứng dụng dễ bảo trì hơn
Tạo ra các hàm/thủ tục của người sử dụng để xử lý các thao tác phức tạp mà chưa được MS Access cung cấp sẵn.
Xử lý lỗi theo ý người sử dụng.
I. Giới thiệu chung
3
Phạm Thị Kim Ngoan
Tạo hay thao tác với các đối tượng
Thực hiện các thao tác cấp hệ thống : thực hiện một ứng dụng khác, liên kết giữa các ứng dụng.
Đặc điểm:
- Chương trình của VBA hoạt động chủ yếu theo hướng sự kiện : bấm chuột tại các nút lệnh, di chuyển vào hay ra đối tượng điều khiển của form, report …
Các thủ tục và hàm của VBA nằm rải rác trong các module của form, report hoặc module chung của CSDL và chúng có thể gọi lẫn nhau.
I. Giới thiệu chung
4
Phạm Thị Kim Ngoan
1. Khái niệm Module: Là tập các tuỳ chọn, các khai báo, các thủ tục cùng được lưu trữ trong một đơn vị chương trình.
2. Phân loại Module:
- Module chuẩn: Có thể thi hành bất cứ nơi nào trong ứng dụng.
- Module lớp: Các thủ tục định nghĩa trong Module lớp sẽ trở thành các phương thức của đối tượng này.
* Mỗi Form/Report đều có thể kết hợp với một Module lớp (Form Module/Report Module), Module lớp này được lưu cùng với Form/Report.
II. Module
5
Phạm Thị Kim Ngoan
1. Module chuẩn:
- Các tuỳ chọn
- Các khai báo toàn cục (Public)
- Các khai báo cấp module (Dim)
- Các thủ tục sử dụng toàn cục
- Các thủ tục sử dụng cấp module
2. Module loại:
- Các tuỳ chọn
- Các khai báo cấp module
- Các thủ tục xử lý sự kiện
- Các thủ tục sử dụng cấp module
III. Cấu trúc của Module
6
Phạm Thị Kim Ngoan
Module chuẩn
7
Phạm Thị Kim Ngoan
Module loại
8
Phạm Thị Kim Ngoan
3. Cấu trúc một thủ tục:
a. Cấu trúc Sub procedure :
Sub Tên_thủ _tục ([Các tham số])
Các lệnh
End Sub
b. Cấu trúc Function procedure :
Function Tên_hàm ([Các tham số]) [AS kiểu dữ liệu]
Các lệnh
Tên_hàm = biểu thức giá trị
End Sub
c. Cấu trúc thủ tục xử lý sự kiện :
Private Sub Tênđốitượng__tênsựkiện ([Các tham số])
Các lệnh
End Sub
III. Cấu trúc của Module
9
Phạm Thị Kim Ngoan
1. Thủ tục xử lý sự kiện: Thường là các thủ tục gắn với các điều khiển của Form (nút lệnh, …) đặt trong Module loại
- Tạo mới:
Mở Form có điều khiển cần gắc thủ tục ở dạng thiết kế.
Chọn Properties của điều khiển cần gắn thủ tục, chọn ngăn sự kiện (Event)
Chọn sự kiện cần gắn (On Click, …), chọn nút …, chọn Code Builder, MS Access đưa ra khuôn dạng của thủ tục với tên tương ứng, tại vị trí con trỏ: gõ các lệnh cần thực hiện trong thủ tục.
- Thực thi: Mở Form, tác động sự kiện vừa gắn lên nút lệnh.
VI. Tạo và thực hiện các thủ tục
10
Phạm Thị Kim Ngoan
2. Thủ tục Sub procedure và Function procedure: Đặt trong Module loại hoặc chuẩn.
- Tạo mới: Mở màn hình viết mã lệnh, viết thủ tục theo cấu trúc tương ứng.
- Thực thi:
Biên dịch cho đến khi không còn lỗi cú pháp
Menu Debug  Complie Loaded Modules
Chạy xem kết quả trong khung trực tiếp:
Mở mà hình trực tiếp: Menu View  DebugWindow / Immediate Window
VI. Tạo và thực hiện các thủ tục
11
Phạm Thị Kim Ngoan
Chạy thủ tục:
Thủ tục không có tham số:
Tên_Module.Tên_thủ_tục
Call Tên_Module.Tên_thủ_tục
Call Tên_Module.Tên_thủ_tục ()
Ví dụ: Tinhtoan.Tong
Call Tinhtoan.Tong
Call Tinhtoan.Tong()

VI. Tạo và thực hiện các thủ tục
12
Phạm Thị Kim Ngoan
Thủ tục có tham số:
Call Tên_Module.Tên_thủ_tục (Các tham số thực sự)
Ví dụ: Call Tinhtoan.Tongab(15, 56)
Hàm (Function procedure):
? Tên_Module.Tên_hàm ()
? Tên_Module.Tên_hàm
? Tên_Module.Tên_hàm (Các tham số thực sự)
Ví dụ: ?Tinhtoan.Tong1()
?Tinhtoan.Tong2(25, 35)
VI. Tạo và thực hiện các thủ tục
13
Phạm Thị Kim Ngoan
Gọi thủ tục từ các thủ tục khác:
Thủ tục:
Call Tên_Module.Tên_thủ_tục (Các tham số thực sự)
Hàm: đặt trong các biểu thức
Tên_Module.Tên_hàm (Các tham số thực sự)
VI. Tạo và thực hiện các thủ tục
14
Phạm Thị Kim Ngoan
- Tự động xây dựng các phát biểu:
Tools -> Options -> Module -> Auto list Members
- Thông tin nhanh:
Tools -> Options -> Module -> Auto QuickInfo
- Tự động kiểm tra cú pháp:
Tools -> Options -> Module -> Auto Syntax Check
- Di chuyển giữa các thủ tục trong module:
Ctrl + Page Down / Ctrl + Page Up
V. Một số hiệu ứng khi viết và sửa chữa mã lệnh
15
Phạm Thị Kim Ngoan
I. Các tuỳ chọn
II. Các kiểu dữ liệu cơ bản
II. Khai báo
IV. Các hàm/thủ tục nhập xuất dữ liệu
V. Một số hàm / thủ tục của VB
Chương 2: CÁC KHAI BÁO TRONG VB
16
Phạm Thị Kim Ngoan
Option Explicit: người dùng phải khai báo tường minh các biến
Option Compare Binary: phân biệt chữ thường và hoa khi viết chương trình
Option Compare Text: phân biệt chữ thường và hoa khi so sánh
Option Base n: qui định chỉ số đầu tiên trong kiểu dữ liệu mảng
I. Các tuỳ chọn
17
Phạm Thị Kim Ngoan
II. Các kiểu dữ liệu cơ bản
18
Phạm Thị Kim Ngoan
II. Các kiểu dữ liệu cơ bản
19
Phạm Thị Kim Ngoan
1. Khai báo hằng:
Public/Private CONST Tên_hằng [AS Kiểu dữ liệu] = Biểu thức giá trị
Ví dụ: Const Pi=3.14
Public Const S = “Đây là ví dụ”
Private Const so As Integer = 5
2. Khai báo biến:
Public/Private/Dim/Static Tên_biến [AS Kiểu dữ liệu]
Ví dụ: Public Hoten As String, DTB As Double
Private Diachi As String
III. Khai báo
20
Phạm Thị Kim Ngoan
Phạm vi sử dụng:
Mức thủ tục : Các khai báo bên trong thủ tục.
Mức module : Các khai báo Private Const trong phần khai báo của module.
Mức project : Khai báo Public
Tên:
Gồm chữ cái, chữ số và dấu gạch chân, bắt đầu là chữ cái.
Không trùng với từ khoá của Access.
Độ dài không vượt quá 40 ký tự.
III. Khai báo
21
Phạm Thị Kim Ngoan
1. Nhập dữ liệu: hàm InputBox, InputBox$
Cú pháp: INPUTBOX[$](Dòng nhắc [[,tiêu đề] [, giá trị mặc định][,x, y] ])
Hàm InputBox trả về giá trị Variant
Chức năng : Hiển thị dòng nhắc trong một hộp thoại, đợi nhập liệu và trả về giá trị trong textbox
Ví dụ: Nhập 1 số nguyên từ bàn phím và lưu trong biến a
Dim a as Integer
a = Inputbox(“Nhập a=”, “Nhập số liệu”)
IV. Các hàm/thủ tục nhập xuất dữ liệu
22
Phạm Thị Kim Ngoan
2. Xuất dữ liệu:
a. Thủ tục Msgbox
Cú pháp: MsgBox Dòng thông báo, kiểu hộp thoại, tiêu đề
b. Hàm Msgbox
Cú pháp: MsgBox (Dòng thông báo, kiểu hộp thoại, tiêu đề)
Kiểu hộp thoại: Giá trị cho biết các nút lệnh nào sẽ hiển thị và các biểu tượng sẽ hiển thị trong hộp thoại.
Chức năng : Hiển thị một thông điệp trong hộp hội thoại và đợi người sử dụng chọn một nút lệnh.
Khác nhau giữa hàm và thủ tục MsgBox : Hàm MsgBox trả về giá trị cho biết đã chọn nút lệnh nào, còn thủ tục thì không.
IV. Các hàm/thủ tục nhập xuất dữ liệu
23
Phạm Thị Kim Ngoan
* Tham số kiểu hộp thoại gồm 3 thành phần: Nút lệnh nào sẽ hiển thị, kiểu biểu tượng hiển thị, nút ngầm định.
- Nút lệnh hiển thị:
0 / vbOnlyOK OK
1 / vbOKCancel OK, Cancel
2 / vbAbortRetryIgnore Abort, Retry, Ignore
3 / vbYesNoCancel Yes, No, Cancel
4 / vbYesNo Yes, No
5 / vbRetryCancel Retry, Cancel
IV. Các hàm/thủ tục nhập xuất dữ liệu
24
Phạm Thị Kim Ngoan
- Xác định biểu tượng:
0 không
16 / vbCritical Critical (Stop)
32 / vbQuestion Warning query
48 / vbExclamation Warning Message
64 / vbInformation Information
IV. Các hàm/thủ tục nhập xuất dữ liệu
25
Phạm Thị Kim Ngoan
- Xác định nút ngầm định:
0 / vbDefaultButton1 nút thứ 1
256 / vbDefaultButton2 nút thứ 2
512 / vbDefaultButton3 nút thứ 3
* Giá trị của hàm khi nút lệnh được chọn:
1 OK 4 Retry
2 Cancel 5 Ignore
3 Abort 6 Yes 7 No
c. In ra màn hình trực tiếp: Debug.print biểu thức
IV. Các hàm/thủ tục nhập xuất dữ liệu
26
Phạm Thị Kim Ngoan
Ví dụ: In ra dưới dạng hộp thoại tổng của a+ b (dùng thủ tục)
Msgbox “Tổng của a+b=” & a+b, vbOkCancel + vbInformation, “Kết quả”
In ra dưới dạng hộp thoại tổng của a+ b có kiểm tra nút lệnh bấm (dùng hàm Msgbox)
IF Msgbox (“Tổng của a+b=” & a+b, vbOkCancel+vbInformation, “Kết quả”)= vbOk THEN
IV. Các hàm/thủ tục nhập xuất dữ liệu
27
Phạm Thị Kim Ngoan
Các hàm về chuỗi:
LTRIM(St) cắt các ký tự trắng bên trái chuỗi
RTRIM(St) cắt các ký tự trắng bên phải chuỗi
TRIM(St) cắt các ký tự trắng bên phải và bên trái chuỗi
LEN(St) độ dài chuỗi
LEFT(St,n) lấy n ký tự bên trái chuỗi
RIGHT(St,n) lấy n ký tự bên phải chuỗi
MID(St,i,n) lấy n ký tự bắt đầu từ vị trí i trong chuỗi
STR(n) đổi số thành chuỗi
V. Một số hàm / thủ tục của VBA
28
Phạm Thị Kim Ngoan
LCASE(St) đổi các ký tự trong chuỗi thành chữ thường
UCASE(St) đổi các ký tự trong chuỗi thành chữ in
Các hàm tính toán:
ABS(n) trị tuyệt đối
FIX(r) lấy phần nguyên của số thực
INT(r) lấy phần nguyên gần nhất và nhỏ hơn r
SQR(n) căn bậc 2 của n
EXP(n) hàm e mũ n
VAL(St) đổi chuỗi thành số
Các hàm về ngày, giờ:
NOW() lấy ngày giờ của hệ thống
DATE() ngày hệ thống
TIME() giờ hệ thống
V. Một số hàm / thủ tục của VB
29
Phạm Thị Kim Ngoan
DATEPART(dt) lấy một phần của ngày/tháng/năm
DATEPART(“d”, dt) lấy phần ngày
DAY(dt)
DATEPART(“m”, dt) lấy phần tháng
MONTH(dt)
DATEPART(“yyyy”, dt) lấy phần năm
YEAR(dt)
Các hàm kiểm tra:
ISNUMERIC(n) kiểm tra n có phải là một số không?
ISDATE(d) kiểm tra d có phải là kiểu ngày không?
Chú ý:
‘ dòng chú thích
Viết lệnh trên nhiều dòng dùng dấu space và gạch dưới ( _)
V. Một số hàm / thủ tục của VB
30
Phạm Thị Kim Ngoan
Các cấu trúc điều khiển:
1. Cấu trúc lựa chọn:
2. Cấu trúc lặp:
3. Lệnh Exit:
II. Kiểu dữ liệu có cấu trúc:
1. Mảng:
2. Bản ghi:
Chương 3: CÁC CẤU TRÚC ĐIỀU KHIỂN VÀ KIỂU DỮ LIỆU CÓ CẤU TRÚC
31
Phạm Thị Kim Ngoan
1. Cấu trúc lựa chọn:
a. IF .. THEN
Cú pháp1:
IF (điều kiện) THEN khối lệnh viết trên cùng 1 dòng
Cp2: IF (điều kiện) THEN
khối lệnh
ENDIF
I. Các cấu trúc điều khiển
32
Phạm Thị Kim Ngoan
Ví dụ:
Cp1: IF a >= b THEN Debug.Print a
Cp2: IF a >= b THEN
Debug.Print a
ENDIF
I. Các cấu trúc điều khiển
33
Phạm Thị Kim Ngoan
b. IF .. THEN .. ELSE
Cú pháp: IF (điều kiện) THEN
khối lệnh 1
ELSE
khối lệnh 2
ENDIF
c. IF .. THEN .. ELSEIF
Cú pháp: IF (điều kiện1) THEN
khối lệnh 1
ELSEIF (điều kiện2) THEN
khối lệnh 2

ELSE
khối lệnh
ENDIF
I. Các cấu trúc điều khiển
34
Phạm Thị Kim Ngoan
Ví dụ: IF a >= b THEN
Debug.Print a
ELSE
Debug.Print b
ENDIF
Ví dụ: IF (a >= b) and (a >=c) THEN
Debug.Print a
ELSEIF (b >= a) and (b >=c) THEN
Debug.Print b
ELSE
Debug.Print c
ENDIF
I. Các cấu trúc điều khiển
35
Phạm Thị Kim Ngoan
d. SELECT CASE … END SELECT:
Cú pháp: SELECT CASE biểu thức giá trị
CASE gtrị1: khối lệnh 1
CASE gtrị2: khối lệnh 2

CASE ELSE
khối lệnh
END SELECT
I. Các cấu trúc điều khiển
36
Phạm Thị Kim Ngoan
Ví dụ:
SELECT CASE n
CASE 1: Debug.Print “một”
CASE 2: Debug.Print “hai”
CASE 3: Debug.Print “ba”
CASE 4: Debug.Print “bốn”
CASE 5: Debug.Print “năm”
CASE ELSE
Debug.Print “lớn hơn năm”
END SELECT
I. Các cấu trúc điều khiển
37
Phạm Thị Kim Ngoan
2. Cấu trúc lặp:
a. FOR .. NEXT
Cú pháp:
FOR biến_đếm=giá trị đầu TO giá trị cuối [STEP bước lặp]
khối lệnh
NEXT biến_đếm
Ví dụ: Tính tổng 10 số nguyên dương đầu tiên
Tong = 0
FOR i =1 TO 10 [Step 1]
Tong = Tong + i
NEXT i
I. Các cấu trúc điều khiển
38
Phạm Thị Kim Ngoan
b. DO WHILE .. LOOP:
Cú pháp 1: DO WHILE (điều kiện)
khối lệnh
LOOP
Cú pháp 2: DO
khối lệnh
LOOP WHILE (điều kiện)
Cú pháp 3: WHILE (điều kiện)
khối lệnh
WEND
I. Các cấu trúc điều khiển
39
Phạm Thị Kim Ngoan
Ví dụ: Tính tổng 10 số nguyên dương đầu tiên
Tong = 0: i =1
DO WHILE (i < =10)
Tong = Tong + i : i =i + 1
LOOP
Tong = 0: i =0
DO
Tong = Tong + i : i =i + 1
LOOP WHILE (i < = 10)

I. Các cấu trúc điều khiển
40
Phạm Thị Kim Ngoan
c. DO UNTIL … LOOP:
Cú pháp 1: DO UNTIL (điều kiện)
khối lệnh
LOOP
Cú pháp 2: DO
khối lệnh
LOOP UNTIL (điều kiện)
3. Lệnh Exit:
Exit Do Exit For
Exit Function Exit Sub
I. Các cấu trúc điều khiển
41
Phạm Thị Kim Ngoan
Ví dụ: Tính tổng 10 số nguyên dương đầu tiên
Cp1:
Tong = 0: i =1
DO UNTIL (i > 10)
Tong = Tong + i : i =i + 1
LOOP
Cp2: Tong = 0: i = 0
DO
Tong = Tong + i : i =i + 1
LOOP UNTIL ( i > 10)
I. Các cấu trúc điều khiển
42
Phạm Thị Kim Ngoan
1. Mảng:
Khai báo:
DIM Tên_mảng (chỉ số1, chỉ số2, …) AS kiểu dữ liệu
Truy xuất:
Tên_mảng(chỉ số)
Ví dụ:
Option Base 1
Dim A (10) As Integer, B(3, 4) As Integer
Truy xuất đến phần tử thứ 4 của mảng A: A(4)
Truy xuất đến phần tử hàng 2, cột 3 của mảng B: B(2, 3)
II. Kiểu dữ liệu có cấu trúc
43
Phạm Thị Kim Ngoan
Mảng động:
Khai báo: DIM Tên_mảng() AS kiểu dữ liệu
Thay đổi kích thước:
REDIM Tên_mảng(chỉ số1, chỉ số2, …)
Ví dụ:
Option Base 1
Dim A () As Integer

REDIM A(5)
Xóa mảng: Erase Tên_mảng
II. Kiểu dữ liệu có cấu trúc
44
Phạm Thị Kim Ngoan
2. Bản ghi:
Định nghĩa kiểu:
TYPE Tên_kiểu_bản_ghi
Thành phần1 AS kiểu dliệu1
Thành phần2 AS kiểu dliệu2

END TYPE
Khai báo:
Public/Private/Dim Tên_biến AS Tên_kiểu_bản_ghi
Truy xuất thành phần:
Tên_biến.Tên_thành phần
II. Kiểu dữ liệu có cấu trúc
45
Phạm Thị Kim Ngoan
Ví dụ:
TYPE Hocsinh
Hoten as String
Ngaysinh as Date
Toan as Single
ENDTYPE
Khai báo một biến HS kiểu hocsinh
Dim HS as Hosinh
Truy xuất thành phần Hoten của biến HS
HS.Hoten
II. Kiểu dữ liệu có cấu trúc
46
Phạm Thị Kim Ngoan
I. Tham biến và tham trị
II. Đệ qui
III. Thi hành Macro trong VB
IV. Kích hoạt các ứng dụng khác
V. Gỡ rối mã VB
Chương 4: THỦ TỤC CỦA NGƯỜI DÙNG
47
Phạm Thị Kim Ngoan
- Truyền theo tham trị(ByVal): các tham số không thay đổi giá trị
- Truyền theo tham biến: giá trị các tham số thay đổi nếu thủ tục gọi có câu lệnh là thay đổi giá trị của chúng
Ví dụ truyền theo tham trị và tham biến

I. Tham biến và tham trị
48
Phạm Thị Kim Ngoan
Sub Thamso(ByVal a As Integer, b As Integer)
a = a + 1
b = a
End Sub
‘----------------------
Sub goi()
Dim a As Integer : Dim b As Integer
a = 5: b = 7
Call Thamso(a, b)
Debug.Print "a=", a
Debug.Print "b=", b
End Sub
I. Tham biến và tham trị
49
Phạm Thị Kim Ngoan
Trong thủ tục có lời gọi đến chính thủ tục đó
Ví dụ thủ tục đệ qui
Function Dequi(a As Byte, n As Byte)
If n = 0 Then
Dequi = 1
Else
Dequi = Dequi(a, n - 1) * a
End If
End Function
II. Đệ qui
50
Phạm Thị Kim Ngoan
Cú pháp: Docmd.Tên_phương_thức [các tham số]
Các phương thức của Docmd có tên và chức năng giống như các thao tác (Action) trong Macro
Sub Vedau_Click()
Docmd.GotoRecord , , ac First
EndSub
III. Thi hành Macro trong VB
51
Phạm Thị Kim Ngoan
Thiết kế Form đăng nhập hệ thống, yêu cầu người sử dụng phải nhập vào mật khẩu khi muốn sử dụng CSDL
52
Phạm Thị Kim Ngoan
Dim dem As Byte
‘-----------------
Private Sub Dongy_Click()
If matkhau = "TTTH" Then
DoCmd.OpenForm "Giaodien"
DoCmd.Maximize
ElseIf dem < 3 Then
MsgBox "Ban nhap sai roi!"
dem = dem + 1 : matkhau = ""
matkhau.SetFocus
Else
MsgBox "Ban da nhap 3 lan"
DoCmd.Quit acQuitPrompt
End If
End Sub
Private Sub Form_Load()
dem = 1
End Sub
Thiết kế Form đăng nhập hệ thống, yêu cầu người sử dụng phải nhập vào mật khẩu khi muốn sử dụng CSDL
53
Phạm Thị Kim Ngoan
1. Hàm Shell: thực hiện một tập tin chương trình
Cú pháp:
SHELL (đường dẫn đến tập tin chương trình [,kiểu của sổ])
2. Lệnh AppActivate: kích hoạt ứng dụng thành ứng dụng hiện hành
Cú pháp: APPACTIVATE tên ứng dụng
3. Hàm Sendkey: gửi các phím bấm đến một ứng dụng
Cú pháp: SENDKEY chuỗi các phím [,True/False]
IV. Kích hoạt các ứng dụng khác
54
Phạm Thị Kim Ngoan
Các loại lỗi có thể gặp:
Lỗi biên dịch:
Nguyên nhân: lệnh sai cấu trúc
Hạn chế: chọn “Auto Syntax Check”
Lỗi trong lúc thi hành:
Nguyên nhân: do cố gắng thực hiện một hành động không thể thực hiện được.
Xử lý: dùng phát biểu ON ERROR để đặt bẫy lỗi
Lỗi logic của chương trình: kết quả sai
Nguyên nhân: sai giải thuật
Phát hiện: Chạy từng bước để kiểm tra (Menu Debug -> Step Into)
V. Gỡ rối mã VB
55
Phạm Thị Kim Ngoan
Ví dụ dùng phát biểu On Error để đặt bẫy lỗi
Sub Vedau_Click()
On error goto err_VD
Docmd.GotoRecord , , ac First
err_VD:
Exit Sub
EndSub
V. Gỡ rối mã VB
56
Phạm Thị Kim Ngoan
I. Đối tượng và tập hợp:
II. Biến đối tượng:
III. Sử dụng các biến đối tượng:
Chương 5: ĐỐI TƯỢNG VÀ BIẾN ĐỐI TƯỢNG
57
Phạm Thị Kim Ngoan
Các nguồn cung cấp đối tượng trong MS Access:
MS Access: đối tượng hiển thị dữ liệu
MS DAO: đối tượng truy nhập dữ liệu
Visual Basic: đối tượng đem lại sự linh động trong lập trình
Tập hợp: là các đối tượng có cùng kiểu
Tham chiếu tới các đối tượng:
Các đối tượng riêng biệt: tên_đối_tượng
Các đối tượng thuộc về tập hợp:
C1: Tên_tập_hợp!tên_đối_tượng
C2: Tên_tập_hợp(tên_đối_tượng)
I. Đối tượng và tập hợp
58
Phạm Thị Kim Ngoan
C3: Tên_tập_hợp(chỉ số)
Tập thuộc tính:
Xác lập giá trị cho thuộc tính:
Tên_đối_tượng.tên_thuộc_tính = giá trị
Lấy giá trị của thuộc tính:
Tên_biến = tên_đối_tượng.tên_thuộc_tính
I. Đối tượng và tập hợp
59
Phạm Thị Kim Ngoan
Biến đối tượng: biến biểu thị một đối tượng cụ thể thuộc vào một kiểu đối tượng
Kiểu đối tượng: phần dữ liệu, các phương thức
Khai báo:
Cú pháp: Dim tên_biến AS tên_kiểu_đối_tượng
Gán các biến đối tượng:
Cú pháp: SET tên_biến = dạng biểu thị
Biểu thị các thành phần đối tượng:
Giữa các đối tượng: !
Thuộc tính, phương thức: .
II. Biến đối tượng
60
Phạm Thị Kim Ngoan
Sub Dkhien_Matkhau()
Dim Frm As Form
Dim n As Integer, i As Integer
DoCmd.OpenForm ”Matkhau"
Set Frm = Forms(”Matkhau")
n = Frm.Count
For i = 0 To n - 1
MsgBox Frm(i).Name
Next i
End Sub
In tên các điều khiển có trong Form Mật khẩu
61
Phạm Thị Kim Ngoan
SUB Inbang()
Dim db As Database
Dim t As TableDef
Set db = CurrentDb()
For Each t In db.TableDefs
MsgBox t.Name
Next t
ENDSUB
Liệt kê các bảng có trong CSDL hiện tại
62
Phạm Thị Kim Ngoan
1. Biến đối tượng Database:
Khai báo:
DIM Tên_biến_DB AS Database
Gán biến đối tượng:
SET Tên_biến_DB=DBEngine.Workspace(0).OpenDatabase(tập tin CSDL)
III. Sử dụng các biến đối tượng
63
Phạm Thị Kim Ngoan
Ví dụ: Khai báo một biến Db làm việc với CSDL hiện hành
C1: DIM Db AS Database
SET Db= DBEngine.Workspace(0).Database(0)
C2: DIM Db AS Database
SET Db= CurrentDB()
III. Sử dụng các biến đối tượng
64
Phạm Thị Kim Ngoan
2. Biến đối tượng Recordset: Lưu trữ tập các bản ghi.
Tạo đối tượng Recordset: Dùng phương thức OpenDatabase của đối tượng Database
Khai báo: DIM tên_biến_RS AS Recordset
Ví dụ: Dim Rs As Recordset
Tham chiếu vào một đối tượng cụ thể:
SET tên_biến_RS=tên_biến_DB.OpenRecordSet (“nguồn dl”, loại)
Nguồn dữ liệu: Tên của một bảng, truy vấn, câu lệnh SQL.

III. Sử dụng các biến đối tượng
65
Phạm Thị Kim Ngoan
Loại dùng 1 trong 3 hằng sau:
DB_OPEN_TABLE: Tham chiếu đến 1 bảng, dữ liệu có thể thay đổi được
DB_OPEN_DYNASET: Tham chiếu đến bảng, query, dliệu có thể thay đổi được
DB_OPEN_SNAPSHOT: Tham chiếu đến 1 bản sao của dliệu, không thay đổi dữ liệu được
Ví dụ:
Dim Db As Database
Dim Rs As Recordset
Set Rs = Db.OpenRecordset (“MONHOC”, DB_OPEN_TABLE)
III. Sử dụng các biến đối tượng
66
Phạm Thị Kim Ngoan
Tham chiếu đến các trường dữ liệu của biến RecordSet:
Tên_biến_RS!tên_trường
hoặc: Tên_biến_RS.fields(“tên_trường”)
Ví dụ: Truy xuất đến trường mã môn học trong bảng Môn học
Rs!MaMH
Hoặc Rs.fields(“MaMH”)
Tham chiếu đến các phương thức, thuộc tính của biến RecordSet:
Tên_biến_RS.tên_phương_thức/ tên_thuộc_tính
III. Sử dụng các biến đối tượng
67
Phạm Thị Kim Ngoan
Các phương thức di chuyển:
MOVEFIRST: Đến bản ghi đầu tiên trong biến Recordset
MOVEPREVIOUS
MOVENEXT
MOVELAST
MOVE(n): Đến bản ghi n trong biến Recordset
Ví dụ: Rs.MoveNext
Phương thức đóng : CLOSE
Tên_biến_RS.CLOSE
Ví dụ: Rs.Close
III. Sử dụng các biến đối tượng
68
Phạm Thị Kim Ngoan
Phương thức đếm số bản ghi: RECORDCOUNT
Ví dụ: Đếm số bản ghi trong bảng môn học
Rs.MoveLast
Rs.RecordCount
Thuộc phát hiện các giới hạn:
BOF = True : trước bản ghi đầu tiên, hoặc không có bản ghi EOF = True : sau bản ghi cuối cùng, hoặc không có bản ghi Tên_biến_RS.BOF
Ví dụ: Rs.BOF
III. Sử dụng các biến đối tượng
69
Phạm Thị Kim Ngoan
Ví dụ: In ra màn hình trực tiếp danh mục các môn học
SUB InMH()
Dim Db As Database
Dim Rs As Recordset
Set Rs = Db.OpenRecordset (“MONHOC”, DB_OPEN_TABLE)
DO WHILE (Rs.EOF = False)
Debug.Print Rs!MaMH, Rs!TenMH, Rs!Heso
Rs.MoveNext
LOOP
Rs.Close
ENDSUB
III. Sử dụng các biến đối tượng
70
Phạm Thị Kim Ngoan
III. Sử dụng các biến đối tượng
71
Phạm Thị Kim Ngoan
Viết thủ tục xử lý sự kiện gắn với nút Xem để khi nhập một mã MH  Xem: thông tin ứng với môn học hiển thị lên các Textbox của Form
Hiệu chỉnh 1 bản ghi:
- Chuyển đến bản ghi muốn hiệu chỉnh
- Dùng phương thức EDIT
- Tiến hành hiệu chỉnh
- Dùng phương thức UPDATE
Ví dụ: Sửa Tên môn học có Mã số AV1 thành Anh Văn 1
Tìm bản ghi có MaMH = “AV1”
Gọi phương thức EDIT
Thay TenMH = “Anh Văn 1”
Gọi phương thức UPDATE
III. Sử dụng các biến đối tượng
72
Phạm Thị Kim Ngoan
SUB SuaTenMH()
Dim Db As Database
Dim Rs As Recordset
Set Rs = Db.OpenRecordset (“MONHOC”, DB_OPEN_TABLE)
DO WHILE (Rs.EOF = False)
IF Rs!MaMH = “AV1” THEN
Rs.EDIT
Rs!TenMH = “Anh Văn 1”
Rs.UPDATE
EXIT DO
ELSE
Rs.MoveNext
LOOP
Rs.Close
ENDSUB
III. Sử dụng các biến đối tượng
73
Phạm Thị Kim Ngoan
III. Sử dụng các biến đối tượng
74
Phạm Thị Kim Ngoan
Viết thủ tục xử lý sự kiện gắn với nút Sửa để khi Xem thông tin môn học hiển thị lên các Textbox của Form, thay đổi thông tin  nút Sửa để lưu lại thông tin vừa sửa.
Thêm 1 bản ghi mới:
- Dùng phương thức ADDNEW
- Nhập dữ liệu cho bản ghi này
- Dùng phương thức UPDATE
Ví dụ: Thêm môn học mới vào bảng MONHOC
MaMH : AV2
TenMH : Anh Văn 2
Heso : 1

III. Sử dụng các biến đối tượng
75
Phạm Thị Kim Ngoan
SUB ThemMH()
Dim Db As Database
Dim Rs As Recordset
Set Rs = Db.OpenRecordset (“MONHOC”, DB_OPEN_TABLE)
Rs.ADDNEW
Rs!MaMH = “AV2”
Rs!TenMH = “Anh Văn 2”
Rs!Heso = 1
Rs.UPDATE
Rs.Close
ENDSUB
III. Sử dụng các biến đối tượng
76
Phạm Thị Kim Ngoan
III. Sử dụng các biến đối tượng
77
Phạm Thị Kim Ngoan
Viết thủ tục xử lý sự kiện gắn với nút Thêm để thêm vào bảng môn học với các thông tin của môn học được nhập vào các Textbox trên Form
Xoá 1 bản ghi:
- Chuyển đến bản ghi cần xoá
- Dùng phương thức DELETE
Ví dụ: Xóa từ bảng MONHOC môn học có mã “AV1”
III. Sử dụng các biến đối tượng
78
Phạm Thị Kim Ngoan
SUB XoaMH()
Dim Db As Database , Rs As Recordset
Set Rs = Db.OpenRecordset (“MONHOC”, DB_OPEN_TABLE)
DO WHILE (Rs.EOF = False)
IF Rs!MaMH = “AV1” THEN
Rs.DELETE
EXIT DO
ELSE
Rs.MoveNext
LOOP
Rs.Close
ENDSUB
III. Sử dụng các biến đối tượng
79
Phạm Thị Kim Ngoan
III. Sử dụng các biến đối tượng
80
Phạm Thị Kim Ngoan
Viết thủ tục xử lý sự kiện gắn với nút Xóa để xóa từ bảng môn học một môn học có mã được nhập vào Textbox trên Form.
Tìm kiếm 1 bản ghi:
Phương thức SEEK (áp dụng với loại mở nguồn dữ liệu là DB_OPEN_TABLE)
- Chỉ ra tên chỉ mục
- Tên_biến_RS.SEEK “toán tử so sánh”,”giá trị so sánh”
Thuộc tính kiểm tra: NOMATCH
NOMATCH=True: không tìm thấy bản ghi

III. Sử dụng các biến đối tượng
81
Phạm Thị Kim Ngoan
Ví dụ: In ra màn hình trực tiếp môn học có mã “AV2”
SUB InMH_2()
Dim Db As Database
Dim Rs As Recordset
Set Rs = Db.OpenRecordset (“MONHOC”, DB_OPEN_TABLE)
Rs.Index = “ma”
Rs.Seek “=“, “AV2”
IF Rs.NOMATCH =False THEN
Debug.Print Rs!MaMH, Rs!TenMH, Rs!Heso
ELSE
Debug.Print “Không có môn học này!”
ENDIF
Rs.Close
ENDSUB
III. Sử dụng các biến đối tượng
82
Phạm Thị Kim Ngoan
3. Biến đối tượng QueryDef:
Khai báo:
DIM Tên_biến_QD AS QueryDef
Tạo 1 query: dùng phương thức CREATEQUERYDEF của đối tượng Database
SET tên_biến_QD=tên_biến_DB.CREATEQUERYDEF(“tên query”)
Tên_biến_QD.SQL=”câu lệnh SQL”
Tên_biến_DB.Tên_biến_QD.DELETE(“tên query”)

III. Sử dụng các biến đối tượng
83
Phạm Thị Kim Ngoan
Thi hành: EXECUTE
Tên_biến_QD.EXECUTE
Đóng: CLOSE
Tên_biến_QD.CLOSE
Xoá: DELETE
III. Sử dụng các biến đối tượng
84
Phạm Thị Kim Ngoan
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...

Người chia sẻ: Đinh Văn Năm
Dung lượng: | Lượt tài: 1
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)