GIÁO TRÌNH ACCESS – CHƯƠNG 8: 2 Khi nào sử dụng tập lệnh và Visual Basic : Bạn có thể sử dụng Visual Basic thay thế cho tập lệnh khi bạn thực hiện các công việc sau : Để cho ứng dụng
Trang 1GIÁO TRÌNH ACCESS – CHƯƠNG 8:
2) Khi nào sử dụng tập lệnh và Visual Basic :
Bạn có thể sử dụng Visual Basic thay thế cho tập lệnh khi bạn thực hiện các công việc sau :
Để cho ứng dụng của bạn dễ dàng bảo trì vì tập lệnh là một đối tượng hoàn toàn tách riêng lẻ với các biểu mẫu và các báo cáo sử
Trang 2dụng nó, một ứng dụng chức đựng một số lớn các tập lệnh trong biến cố của các biểu mẫu và các báo cáo sẽ gây cho bạn khó khăn khi bảo trì Ngược lại khi bạn sử dụng Visual Basic thì các đoạn lệnh này sẽ được xây dựng ngay bên trong các biểu mẫu và các báo cáo tại đúng các biến cố đó Nếu bạn di chuyển các biểu mẫu hay các báo cáo sang một tập tin CSDL khac trong Access thì các đoạn lệnh này cũng sẽ mang theo cùng
Tạo ra các hàm của riêng mình : Sử dụng
VB bạn có thể tạo ra các hàm của riêng mình dung để thực hiện các phép tính vượt quá khả năng của một biểu thức hay thay thế một biểu thức quá phức tạp mà bạn đạ viết bên trong ứng dụng
Trang 3 Che đậy các thông báo lỗi : Khi có một sự
cố ngoài ý muốn xảy ra trong khi ứng dụng của bạn đang vận hành và Access sẽ hiển thị một thông báo lỗi, thông báo này sẽ làm cho người sử dụng khó hiểu đặc biệt khi họ chưa quen sử dụng Access Sử dụng VB, bạn có thể phát hiện các lỗi này khi nó xảy ra và sẽ hiển thị thông báo lỗi của riêng mình bằng tiếng Việt hay có thể buộc ứng dụng làm một việc khác
Tạo hay sửa các đối tượng : Chúng ta thường tạo hay sửa các đối tượng bằng cách
mở đối tượng ra ở chế độ thiết kế Trong một vài trường hợp đặc biệt chúng ta phải sử dụng VB để thực hiện
Thực hiện các hàm hệ thống : Bạn có thể sử dụng tập lệnh RunApp để có thể kích hoạt một ứng dụng khác chạy trên Windows hay
Trang 4MS-Dos ngay bên trong ứng dụng Access nhưng bạn không thể sử dụng tập lệnh này
để làm nhiều việc khác bên ngoài Access
Sử dụng VB bạn có thể kiểm tra xem một tập tin có tồn tại trong hệ thống của bạn không, sử dụng việc trao đổi dữ liệu động (DDE-Dynamic Data Exchange) để liên lạc với các ứng dụng khác trên Windows nhu Excel
Truy cập các bản ghi (records) : Chúng ta sử dụng VB để có thể truy cập vào từng dòng trong một bản ghi và thực hiện các hành động thêm, xóa, sửa mà không cần sử dụng công cụ truy vấn
3) Cách tạo :
Phần khai báo Hộp đối tượng
Hộp thủ tục
Trang 5Chọn mục Modules Nhấn nút NewHiện hộp thoại :
Câu lệnh chia thành 3 loại : Lệnh khai báo, lệnh gán và lệnh xử lý
Nút xem toàn bộ thủ tục Phần thủ tục
Nút xem thủ tục
Trang 6 Thông thường mỗi dòng là một lệnh Nhưng ta
có thể viết nhiều lệnh trên một dòng bằng cách phân cách chúng bằng dấu “;” hay một lệnh có thể viết trên nhiều dòng bằng cách sử dụng ký
tự nối câu lệnh”_’ở cuối mỗi dòng
Thủ tục là một dãy các câu lệnh để thực hiện một nhiệm vụ hay tính toán một giá trị nào đó
Một tập hợp các lệnh khai báo, các thủ tục được lưu trữ chung trong một đơn vị gọi là bộ
mã lệnh hay Modules Có hai loại bộ mã lệnh :
Bộ mã lệnh chuẩn (Standard Modules) và bộ
mã lệnh lớp (Class modules) Mỗi thủ tục trong Modules có khả năng là một hàm, thủ tục biến
cố hay một chương trình con
Bộ mã lệnh chuẩn :
Trang 7 Thủ tục trong bộ mã lệnh chuẩn là chương trình con hay hàm
Thủ tục trong bộ mã lệnh chuẩn không gắn liền với bất kỳ một đối tượng nào
Thủ tục trong bộ mã lệnh chuẩn được gọi bởi thủ tục của bộ mã lệnh bất kỳ nào trong tập tin CSDL
Để tạo một bộ mã lệnh chuẩn, trong cửa sổ CSDL, ta chọn loại đối tượng Modules nhắp nút New Khi xuất hiện cửa sổ Modules ta gõ lệnh khai báo trong phần khai báo và tạo các chương trình con hay hàm rồi đóng cửa sổ
Hộp thủ tục chứa tên thủ tục
Trang 8modules Khi hộp thoại yêu cầu chọn lựa lưu hay không xuất hiện, ta chọn đồng ý và đặt tên cho bộ mã lệnh chuẩnClick OK
Bộ mã lệnh lớp :
Bộ mã lệnh lớp là chương trình con, hàm hay thủ tục biến cố
Thủ tục trong bộ mã lệnh lớp có thể gọi các thủ tục trong bộ mã lệnh chuẩn
Chứa tên thủ tục
Tên
các đối
tượng
Trang 9 Ta có thể tạo bộ mã lệnh lớp tồn tại độc lập với đối tượng biểu mẫu, báo cáo
Thủ tục biện cố được tự động gọi khi xẩy ra một biến cố như nhắp chuột, rê chuột, gõ phím,…
Để tạo một thủ tục biến cố, trong cửa sổ mã lệnh, bên hộp đối tượng ta chọn đối tượng, còn
bên hộp thủ tục ta chọn biến cố
II LỆNH KHAI BÁO
1) Khái niệm :
Ta có thể dùng các lệnh khai báo (Declaration statements) để đặt tên và định nghĩa thủ tục (Procedures), biến (Variables), mảng (Array) và hằng (Constants), loại dữ liệu
do người dùng định nghĩa Tầm ảnh hưởng của biến phụ thuộc vào vị trí khai báo biến
Trang 10Database : so sánh chuỗi ký tự dựa vào đặc
điểm riêng của bộ mã ký tự của từng địa
phương
Trang 11 Ý Nghĩa : Khai báo tên và loại dữ liệu hay
loại đối tượng của biến
Trang 12Chieu : Qui định số chiều và số phần tử ở
mỗi chiều của biến mảng
Chiều có dạng : [choSothap To] chiSoCao [,[chisoThap to] choSoCAo]
New : Dùng cho biến loại đối tượng New là
tạo một đối tượng mới và khởi gán biến tham chiếu đến đối tượng vừa tạo Một biến được khai báo New thì không cần dùng lệnh set để tham chiếu cho biến
Loaidulieu : Loại dữ liệu của biến Là một
trong các loại Byte, Boolean, Integer, Long, Curremcy, Single, Double, Date, String, String *Length, Object, Variant, loại do người dùng định nghĩa hay một loại đối tượng
Ví dụ :
Dim myInt As integer
Dim X as New WorkSheet
Trang 13Dim NgayLe (1 to 20 ) As Date
Vị trí : Lệnh nằm trong thủ tục hay trong phần
khai báo của modules
Giải thích :
Public : Hằng được dùng trong thủ tục của bất
kỳ Modules nào
Private : Hằng chỉ được dùng trong thủ tục
của modules chứa lệnh Const
TenHang : Tên hằng
LoaiDulieu : Là một trong các kiểu dữ liệu
e) Lệnh Type
Trang 14 Ý Nghĩa : Dùng để khai báo một loại dữ liệu
Tenloai : Tên loại dữ liệu cấu trúc
Chieu : Qui định số chiều và số phần tử ở mỗi chiều của biến mảng
Loaidulieu : Loại dữ liệu củ biến
Ví dụ : Type diem
Trang 16Private : Phạm vi ảnh hưởng : trong
Modules chứa lệnh
Public : Phạm vi ảnh hưởng : trong tất cả
modules của tập tin CSDL
Static : Biến cục bộ sẽ được bảo lưu giá trị DanhsachThamSo : Gồm các tham số cách
nhau bởi dấu phẩy
Ví dụ 1: Tính cạnh huyền của một tam giác Sub TinhCanhHuyen(ByVal canhA As
Double, ByVal canhB As Double)
Dim CanhHuyen As double CanhHuyen =(CanhA^2 + CanhB^2) ^ 0.5
Msgbox Csrt (canhHuyen), vbOkOnly,
“Tinh Canh Huyen”
End Sub
Ví dụ 2 :
Trang 18Sub TruyenThamChieu(ByRef ThamSoint As Integer)
For Each Sotien In SotienArray
tongtien = tongtien + Sotien Next Sotien
MsgBox tongtien, vbOKOnly, "Tong
so tien"
End Sub
Ví dụ 4 :
Trang 19Sub soNgayDasong(ByVal Ngaysinh As Date, Optional ByVal ngayhientai As Variant)
Dim soNgay As Integer
If IsMissing(ngayhientai) Then
ngayhientai = Date End If
soNgay = ngayhientai - Ngaysinh MsgBox soNgay, vbOKOnly, "So ngay da song "
End Sub Chú ý : Để chạy thử các thủ tục trên, ta vào cửa
sổ Debug và gõ
TinhCanhHuyen 4,5
MainSub
TinhTong 1,2,3,4,5
Trang 20SoNgayDaSong #12/5/1980# hay
SoNgayDaSong #12/5/1980#, #04/03/2001#
g) Lệnh Function :
Ý Nghĩa : Dùng để khai báo tên hàm, tham số,
và loại dữ liệu trả về của hàm
Cú pháp :
[private | Public ][Static] Function
tenHam([danhsachThamso]) [as loaiDulieu]
Trang 21Ví dụ 1: Tính cạnh huyền của một tam giác Function TinhCanhHuyen(ByVal canhA As Double, ByVal canhB As Double) As Double
Dim CanhHuyen As double CanhHuyen =(CanhA^2 + CanhB^2) ^ 0.5
TinhCanhHuyen =CanhHuyen
End Function
Ví dụ 2 :
Function tinhTong(ParamArray SotienArray() As Variant) As Double
Dim tongtien As Variant, Sotien As Variant
For Each Sotien In SotienArray
tongtien = tongtien + Sotien Next Sotien
TinhTong = tongtien
Trang 22End Function
Ví dụ 4 :
Function soNgayDasong(ByVal Ngaysinh
As Date, Optional ByVal ngayhientai As Variant) As Integer
Dim soNgay As Integer
If IsMissing(ngayhientai) Then
ngayhientai = Date End If
soNgay = ngayhientai – Ngaysinh soNgaydasong = songay
End Function Chú ý : Để chạy thử các thủ tục trên, ta vào cửa
sổ Debug và gõ
? TinhCanhHuyen (4,5)
? TinhTong (1,2,3,4,5)
Trang 24 Ý Nghĩa : Khai báo chỉ số biến thấp của
Dim mangSoNguyen(5) As Single
Dim chiso As Integer
For chiso = 1 To 5
mangSoNguyen(chiso) = Rnd()
Next chiso
End Sub
Trang 25End Sub
Trang 26III LỆNH GÁN (ASIGNMENT STATEMENTS) 1) Khái niệm :
Dùng để gán giá trị cho một biến hay một hằng Lệnh gán được sử dụng trong thân của thủ tục
Trang 27TenBien : Tênbiến khai báo trong lệnh Dim
hay trong tham số của thủ tục
TenThanhPhan : tên thành phần trong lệnh
Type
Thuoctinh : Aùp dụng khi tenbien1 là đối
tượng
TenDoiTuong : Tên đối tượng
TenHam : tên hàm khai báo trong lệnh
Dim hocsinhVar As hocsinhtype
Dim myDB As Database
'Gan gia tri vao tenBien.TenThanhPhan
Trang 28lenhgan = 5
End Function
b) Lệnh Set :
Ý nghĩa : Gán đối tượng cho một biến thuộc
loại đối tượng tương ứng
Trang 29Dim myDB as database
Dim mySet As recordset
Set myDb = CurrentDB
Set mySet =
myDb.OpenRecordSet(“NhanVien”)
Trang 30End Sub
IV LỆNH XỬ LÝ
1) Cấu trúc điều khiển
a) Cấu trúc If … Then một dòng
Ý nghĩa : Điều kiện có giá trị True thì thi hành
câu lệnh, ngược lại chuyển điều khiển đến lệnh
kế tiếp
Cú pháp :
If dieukien Then caulenh
Vị trí : Lệnh được dùng trong thủ tục sau các
lệnh khai báo
Giải thích :
Dieukien : là một biểu thức luận lý
CauLenh : câu lệnh gán hay xử lý
Ví dụ :
Trang 31If hocsinhVar.Hsma = 5 Then
hocsinhVar.lMa =2
b) Cấu trúc If … Then nhiều dòng
Ý nghĩa : dieukien có giá trị True thì thi hành
cacLenh, ngược lại chuyển điều khiển đến lệnh sau lệnh End If
Dieukien : Là biểu thức luận lý
Caclenh : Câu lệnh gán hay xủ lý
c) Cấu trúc If … Then … Else
Trang 32 Ý nghĩa : dieukien có giá trị True thì thi hành
cacLenh1, ngược lại thi hành caclenh2
Ý nghĩa : dieukien thứ N đúng thì thực hiện
caclenhN, Ngược lại chuyển điều khiển đến caclenhElse
Cú pháp :
If dieukien1 Then
Trang 33DieukienN : Là một biểu thức luận lý
CaclenhN, caclenhElse : Các lệnh gán hay xủ
lý
Ví dụ :
Trang 34 Ý nghĩa : Chuyển điều khiển đến Case mà giá
trị BieuThucchon bằng, nằm trong hay <, <=,
>, >=, =, <> giá trị biểu thức
Cú pháp :
Select Case bieuthucchon
Trang 35Case {bieuthuc | Bieuthuc To bieuThuc |
Trang 36Case “CDTHA”
hocsinhPar.Hocphi = 800000
Case “CDTHB”
hocsinhPar.hocphi =700000 Case “CDTHC”
chuyển điều khiển đến
Điều kiện sai thì thực hiện các lệnh, ngược lại không thực hiện các lệnh mà chuyển điều khiển đến các
Trang 38Exit Do : thoát khỏi vòng lặp
Trang 40 Vị trí : Lệnh được dùng trong thủ tục sau các lệnh khai báo
c) Câu lệnh For … Next
Ý nghĩa : Thi hành các lệnh khi biến đếm còn
nằm giữa giaTriXuatPhat và giaTriDich Sau
Trang 41khi thi hành các lệnh biến đếm tăng thêm một giá trị bằng bước nhẩy
Cú pháp :
For bienDem = giaTriXuatPhat To
giaTriDich [Step buocNhay]
BienDem : Là một biến có kiểu dữ liệu là
Integer hay Long
GiaTriXuatPhat, GiaTriDich : Một biểu
thức có kiểu là Integer hay Long
Trang 42BuocNhay : Là số âm hay dương dùng để
tăng hay giảm biến đếm
Exit For : thoát khỏi vòng lặp
Ví dụ : Trong thủ tục vào mảng có đoạn lệnh : For chiso = 1 To soluongHocsinh
HocsinhMang(Chiso).HsMa =
hocsinhSet!hsMa
Next chiso
d) Câu lệnh For Each
Ý nghĩa : Khi phần tử còn là phần tử của
Trang 43For Each sotien In sotienArray
Tongtien = tongtien +sotien
Next soTien
e) Câu lệnh With
Ý nghĩa : Cho phép ghi các lệnh liên quan đến
đối tượng mà không cần ghi tên đối tượng
Cú pháp :
With doituong
Trang 44DoiTuong : Biến thuộc loại đối tượng hay
loại dữ liệu định nghĩa bằng lệnh Type
Ví dụ : Trong thủ tục vào mảng có đoạn lệnh : For chiso = 1 To soluongHocsinh
With HocsinhMang(chiso) HsMa = hocsinhSet!hsMa
.HsMa = hocsinhSet.Hoten
End With
Next chiso
f) Câu lệnh Call
Trang 45 Ý nghĩa : Chuyển con trỏ thi hành lệnh đến
lệnh đầu tiên của thủ tục
Cú pháp :
[Call ] tenThuTuc
[danhsachThamSo]
tendoiTuong { ! | } {tenDoiTuong | phuongphap}…
Vị trí : Lệnh được dùng trong thủ tục sau các
lệnh khai báo
Giải thích :
Call : Nếu sử dụng DanhsachThamSo phải
rào trong (), Ngược lại
Ví dụ :
Sub thuBangVaomang()
Dim HocsinhMang() As hocsinhType BangVaoMang HocsinhMang()
Trang 46End Sub
Sub thuBangVaomang()
Dim HocsinhMang() As hocsinhType
Call (BangVaoMang hocsinhMang())
End Sub
Sub BangVaoMang(HocsinhMang() As hocsinhType)
Trang 47 Vị trí : Lệnh được dùng trong thủ tục sau các
lệnh khai báo
Giải thích :
Stop : tạm thời dừng việc xử lý lệnh ngay
lệnh stop Lệnh Stop thường dùng tại vị trí mà
ta muốn kiểm tra việc thi hành lệnh ( xem giá trị của biến) Sau khi việc thi hành lệnh dừng tại lệnh stop, ta có thể cho tiếp tục thi hành bằng cách nhấn F5
V LÀM VIỆC VỚI CÁC BIẾN, KIỂU DỮ
Trang 48Dim strName as string
Dim Intl as Integer
2) Khai báo biến tường minh và không tường
và thong báo lỗi ngay để chúng ta sửa đổi
Để có thể chuyển qua lại hai chế độ này chúng ta
sẽ giữ lại hay bỏ đi câu lệnh : Option Explicit trong phần khai báo của các đoạn lệnh trong cửa
sổ bộ mã lệnh (Module)
Ví dụ :
Trang 49Sử dụng chế dộ khai báo biến không tường minh
Function CanBac2(Byval dblNum As Double)
VB hiểu rằng dblTmp là một biến mới
Sử dụng chế dộ khai báo biến tường minh
Function CanBac2(Byval dblNum As Double)
as double
Dim dblTemp As Double
Dbltemp =abs(dblNum)
Trang 50Canbac2 = Sqr(dbltmp) ‘ dbltemp bị viết sai thành dbltmp
End Function
Khi gọi thực hiện hàm này thì VB sẽ thông báo lỗi biến dbltmp chưa được định nghĩa, chính nhờ thông báo này chúng ta sẽ phát hiện ra rằng chúng ta đã tham chiếu đến tên biến sai Sau đó quay lại sửa lại tên biến thành dblTemp và biên dịch và chạy lại thì kết quả sẽ luôn luôn đúng
3) Tầm ảnh hưởng của biến
Khi khai báo một biến trong thủ tục thì chỉ có các câu lệnh bên trong thủ tục đó mới có thể đọc hay thay đổi giá trị của biến đó : tầm ảnh hưởng của biến chỉ có tính cục bộ trong thủ tục Tầm ảnh hưởng của một biến phụ thuộc vào vị trí khai báo biến Có hai cấp : thủ tục hay bô mã lệnh Chúng ta có thể kết hợp các từ khoá Public hay Private để tạo ra tầm ảnh hưởng của biến
Trang 51Không thể khai báo biến toàn cục trong thủ tục
Cấp bộ mã
lệnh
Các biến có tính chất cục bộ ngay trong bộ mã lệnh khai báo biến
Các biến có thể sử dụng cho tất cả các bộ mã lệnh chuẩn trong ứng dụng
4) Các biến sử dụng trong thủ tục
Các biến cấp thủ tục chỉ được nhận ra ở tại thủ tục mà chúng được khai báo và được xem như biến cục bộ
Ví dụ khai báo :
Trang 52Dim inttemp as Integer ‘Khai báo này biến chỉ tồn tại khi thủ tục đang thực hiện
Static inttemp as Integer ‘Biến tồn tại trong toàn bộ thời gian ứng dụng đang thực hiện
5) Các biến sử dụng trong bộ mã lệnh
Mặc định một cấp bộ mã lệnh thì cho phép tất cả các thủ tục trong bộ mã lệnh đó sử dụng được, nhưng không thể cho các bộ mã lệnh khác Chúng ta có thể tạo các biến cấp thủ tục trong biểu mẫu, báo cáo hay các bộ mã lệnh chuẩn bằng cách khai báo chúng với từ khóa Dim hay Private bên trong phần khai báo ở tại vị trí đầu tiên trong cửa sổ bộ mã lệnh
Ví dụ :
Option Compare Database