Acsess 14_15_16

Download Report

Transcript Acsess 14_15_16

CHƯƠNG 7
LẬP TRÌNH TRÊN ACCESS
(MODULE)
1
7.1 Khái niệm.
Access 2000 cho phép sử dụng ngôn ngữ VBA (Visual Basic for
Applications) để viết các hàm (Function) và các thủ tục (Sub) nhằm xử lý
các đối tượng (Tables, Queries, Forms, Reports, Macros…) được tạo ra
bằng các công cụ của Access.
Module lµ mét ®èi tưîng dïng ®Ó x©y dùng c¸c ch¬ng tr×nh con lµ:
thñ tôc vµ hµm, cã thÓ thùc hiÖn trùc tiÕp hoÆc gi¸n tiÕp th«ng
qua c¸c ®iÒu khiÓn trªn Form, Report.
Module chia lµm hai lo¹i:
Module dùng chung trên toàn ch¬ng tr×nh : c¸c thñ tôc, các
hµm được xây dựng trong phần Module.
Module dùng riªng: c¸c thñ tôc, các hµm được xây dựng trên c¸c
®èi tîng của Form, Report
2
7.2 Cấu trúc một chương trình
a. Chương trình con dạng thủ tục (Sub).
Thủ tục bao gồm 3 thành phần:
Đầu thủ tục
[Private] Sub Tên_thủ_tục()
<Thân thủ tục >
Thân thủ tục (Chứa các lệnh để giải
quyết một công việc nào đó).
End Sub
Kết thúc thủ tục
b. Chương trình con dạng hàm (Funtion).
Cũng như thủ tục, hàm cũng có cấu trúc ba phần.
Function Tên_hàm (DS biến as Kiểu DL) As kiểu DL
<Thân hàm >
End Function
Chú ý: Tên thủ tục, hàm phải viết liền và không được bắt đầu
bằng chữ số.
3
7.3 Môi trường Visual Basic
Cửa sổ
Project
Cửa sổ
Properties
Cửa sổ Code
Nơi soạn thảo mã nguồn
4
Chi tiết cửa sổ Code
Đầu thủ tục
Thân thủ tục
Kết thúc thủ tục
5
Môi trường đáp ứng các sự kiện
Các bước tạo thủ tục dùng riêng trên Form hoặc Report.

Bước 1. Chọn đối tượng.

Bước 2. Thuộc tính On click , chọn Code Builder.
6
7.4 Ngôn ngữ Visual Basic trong Access
Tạo thủ tục dùng chung trên toàn chương trình:Create / (Macro and code)
Module.
Các thành phần cơ bản.
-
Bộ kí tự.
Sử dụng 26 chữ Latin a . . z, các kí hiệu toán học…
-
Từ khoá (key word).
Các từ riêng của Visual Basic đã định nghĩa sẵn, ta không thể dùng vào
việc khác.
Ví dụ: Dim, Sub, If . . Then . . Else, Case, Do While . . Loop . . .
-
Tên chuẩn (Standard Identifies).
Là các tên đã được định nghĩa, ta có thể định nghĩa lại để dùng vào việc
khác.
Ví dụ: Single, Doulbe, True, False.
7
7.5 Chạy thử Module

Chạy thử Module qua sự kiện.

Chạy Module thông qua lệnh.
Chọn Run sub (F5).
8
7.6 Các lệnh cơ bản của ngôn ngữ Visual Basic trong Access
- Khai báo các đối tượng trong chương trình:
Muốn dùng các biến, hằng, mảng…trong chương trình, phải khai báo
trước khi dùng.
Tên biến là một chuỗi văn bản liền nhau, bắt đầu là một kí tự chữ cái
theo sau có thể là kí tự số hoặc dấu gạch ngang hoặc các kí tự chữ cái
khác…
Ví dụ :
+ các tên đúng: A1, Van_Ban, X1 . . .
+ các tên sai: 1_a, Tinh Tong, Giai(x), Dim, While. . .
Chú ý: khi đặt tên biến ta phải đặt sao cho càng ngắn gọn càng tốt .
9
- Hằng (Const).
• Là một hằng số có giá trị không thay đổi trong khi chương trình thực
hiện.
• Khai báo hằng.
Const Tên hằng = Giá trị hằng
Ví dụ:
Const Pi = 3.14
Const Fi = 1
- Biến (Variable).
• Là tên có giá trị thay đổi trong khi chương trình thực hiện.
• Khai báo biến.
Dim Tên biến AS Kiểu dữ liệu.
Ví dụ:
Dim A As Double
Dim B As Double
Dim Tong As Double
10
- Lệnh vào dữ liệu.
Tên biến = InputBox (“Thông báo, chỉ dẫn …”).
Ví dụ:
A = InputBox("Vao so A")
B = InputBox("Vao so B")
- Lệnh gán dữ liệu.
Tên biến = Biểu thức
Ví dụ:
Tong=A+B
- Lệnh ra dữ liệu.
Msgbox Tên Biến
Ví dụ:
Msgbox Tong
11
Các kiểu dữ liệu
Tên kiểu
Byte
Integer
Long
Currency
Giá trị
Kiểu nguyên dương: 0 . .255
Kiểu nguyên: -32,768 . . 32,767
Kiểu nguyên: -2,147,483,648 . . 2,147,483,647
Kiểu tiền tệ: -922,337,203,685,477.5808 . . 922,337,203,685,477.5807
Single
Kiểu thực: Nhận giá trị trong khoảng tuyệt đối từ 1.401298E-45 . . 3.402823E38
Double
Kiểu thực: Nhận giá trị trong khoảng tuyệt đối từ 4.94065645841247E-324 đến
1.79769313486232E308
12
Các kiểu dữ liệu
Tên kiểu
Giá trị
Date
VD: 1 January 100 . . 31 December 9999
VD: 00:00:00 . . . 23:59:59
String
“DH Kinh doanh & Cong nghe HN”
Object
đối tượng ảnh
Boolean
Kiểu Logic: False, True
Variant
Variant là kiểu dữ liệu không tường minh. Biến kiểu này có thể nhận bất kỳ một giá
trị nào. Ví dụ:
Dim a As Variant ( Hoặc khai báo theo cách sau: Dim a)
a = 123
a = “Nguyễn Văn Ban”
a = date()
13
Ví dụ : Viết thủ tục (Module) tính tổng 2 số A và B nhập từ bàn phím thông qua của sổ
Code.
Bước 1:Tại cửa sổ Database chọn Modules/New.
Bước 2: Khai báo và tạo lập thủ tục hoặc hàm.
Sub TinhTongHaiSo()
'----Khai bao cac bien---Dim A As Double
Dim B As Double
Dim Tong As Double
'----Vao du lieu----A = InputBox("Vao so A")
B = InputBox("Vao so B")
'----Xu ly du lieu---Tong = A + B
'----Ra du lieu------MsgBox ("Tong hai so A va B la: ") & Tong
End Sub
Bước 3: Chạy thủ tục. Ấn phím F5.
14
Chạy thử chương trình.
15
-
Cấu trúc lệnh rẽ nhánh IF().
-
Rẽ nhánh khuyết (IF … THEN … ENDIF).
If <Điều kiện> Then
<Nhóm lệnh>
End IF
-
Ví dụ: Tạo thủ tục khi nhập điểm từ bàn phím máy sẽ thông báo kết quả đỗ.
Sub KetQua()
Dim Diem As Double
Diem = InputBox(“Hay nhap diem cua thi sinh ?")
If Diem>=15 and Diem<=30 Then
MsgBox (“Ban da trung tuyen ky thi dai hoc nam 2009 - 2010. Chuc mung
ban!”)
Endif
End Sub
16
Rẽ nhánh đầy đủ (IF … THEN … ELSE … ENDIF).
If <Điều kiện> Then
<Nhóm lệnh 1>
Else
<Nhóm lệnh 2>
End IF
- Ví dụ: Tạo thủ tục khi nhập điểm từ bàn phím máy sẽ thông báo kết quả đỗ, trượt.
Sub KetQua()
Dim Diem As Double
-
Diem = InputBox(“Hay nhap diem cua thi sinh ?")
If Diem>=15 and Diem<=30 Then
MsgBox (“Ban da trung tuyen ky thi dai hoc nam 2009 - 2010. Xin chuc mung ban!”)
Else
MsgBox (“Ban da truot ky thi dai hoc nam 2009 - 2010. Xin chia buon cung ban!”)
Endif
End Sub
17
-
Rẽ nhánh lồng nhau.
If <Điều kiện 1> Then
<Nhóm lệnh 1>
Else
If <Điều kiện 2> Then
<Nhóm lệnh 2>
Else
…
If <Điều kiện N> Then
<Nhóm lệnh N>
Else
<Nhóm lệnh N+1 >
EndIf
EndIF
EndIf
-
Ví dụ: Tạo thủ tục khi nhập điểm từ bàn phím máy sẽ thông báo kết quả đỗ của từng hệ tuyển
sinh.
18
Sub KetQua()
Dim Diem As Double
Diem = InputBox(“Hay nhap diem cua thi sinh ?")
If Diem>=15 and Diem <=30 Then
MsgBox (“Ban da trung tuyen vao he dai hoc cua truong. Xin chuc mung ban!”)
Else
If Diem>=12 and Diem <15 Then
MsgBox (“Ban da trung tuyen vao he cao dang cua truong. Xin chia se cung ban!”)
Else
If Diem>=10 and Diem <12 Then
MsgBox (“Ban da trung tuyen vao he trung cap cua truong. Xin an ui cung ban!”)
Else
If Diem >=0 and Diem<10Then
MsgBox (“Rat tiec ban da khong du tieu chuan vao truong. Xin chia buon cung ban!”)
Else
MsgBox (“Khong co muc diem nhu vay, Xin vui long nhap lai !”)
Endif
Endif
Endif
Endif
End Sub
19
-
Cấu trúc lệnh rẽ nhánh SELECT CASE ().
Select Case Biểu thức nguyên
Case Giá trị 1
Nhóm lệnh 1
Case Giá trị 2
Nhóm lệnh 2
…
Case Giá trị N
Nhóm lệnh N
Case else
Nhóm lệnh N+1
End Select
-
Ví dụ: Tạo thủ tục để xem thời khoá biểu, Thứ được nhập từ bàn phím máy tính sẽ
thông báo lịch học của thứ đó.
20
Sub ThoiKhoaBieu()
Dim Thu As Integer
Thu = InputBox(“Ban muon xem lich học của thứ mấy ?")
Select case Thu
Case 2
Msgbox (“ Thứ 2 học Tin ở phòng D509 Vĩnh tuy”)
Case 3
Msgbox (“ Thứ 3 học Triết ở giảng đường B305 Vĩnh tuy”)
Case 4
Msgbox (“ Thứ 4 học tiếng Anh ở phòng B606 Vĩnh tuy”)
Case 5
Msgbox (“ Thứ 5 học Kinh tế chính trị ở giảng đường B206 Vĩnh tuy”)
Case 6
Msgbox (“ Thứ 6 học toán cao cấp 1 ở phòng B604 Vĩnh tuy”)
Case 7
Msgbox (“ Thứ 7 nghỉ ở nhà”)
Else case
Msgbox (“ Không có thứ đó”)
End select
End Sub
21
- Cấu trúc lệnh lặp For... Next
For <Biến đếm > = <Giá trị đầu > To <Giá trị cuối >[Step <Bước tăng >]
<Nhóm lệnh >
Next
Hoạt động của lệnh:
<Biến đếm > nhận <Giá trị đầu >, so sánh với <Giá trị cuối >:
-
Nếu lớn hơn thì kết thúc For .
Nếu nhỏ hơn hoặc bằng thì thực hiện <Nhóm lệnh >.
Ví dụ: Tạo thủ tục để máy tính tự động tính tổng từ 1 đến 100.
Sub TinhTong()
Dim S As Double, I As Integer
S=0
For I = 1 To 5
S=S+I
Next
MsgBox (“Kết quả là:”) & S
End Sub
S=0
I=1
-> S= S+I = 0+1 = 1
I=2
-> S= S+I = 1+2 = 3
I=3
-> S= S+I = 3+3 = 6
I=4
-> S= S+I = 6+4 = 10
I=5
-> S= S+I = 10+5 = 15
I=6
-> Thoát
22
- Cấu trúc lệnh lặp Do While ….Loop.
Do While <Điều kiện>
<Nhóm lệnh >
Loop
- Hoạt động của lệnh:
-
Chừng nào <Điều kiện > còn đúng thì thực hiện <Nhóm lệnh >
-
Khi <Điều kiện > sai thì thoát ra khỏi vòng lặp.
- Ví dụ: Tạo thủ tục để máy tính tự động tính tổng từ 1 đến 100.
Sub TinhTong()
Dim S As Double, I As Integer
I= 1
S= 0
Do While I<=5
S= S+I
I= I+1
Loop
MsgBox ( “Kết quả:”) & S
End Sub
I =1, S=0
-> S=S+I = 0+1 =1
I = I+1 = 1+1 =2 -> S= S+I = 1+2 =3
I = I+1 = 2+1=3 -> S= S+I = 3+3 =6
I = I+1 = 3+1=4 -> S= S+I = 6+4 =10
I = I+1 = 4+1=5 -> S= S+I = 10+5 =15
I = I+1 = 5+1=6 -> Thoát
23
- Cấu trúc lệnh lặp Do Until …Loop.
Do Until <Điều kiện >
<Nhóm lệnh >
Loop
Hoạt động của lệnh:
-
Chừng nào <Điều kiện > vẫn còn sai thì thực hiện <Nhóm lệnh >.
-
Khi <Điều kiện > đúng thì thoát khỏi vòng lặp.
Ví dụ: Tạo thủ tục để máy tính tự động tính tổng từ 1 đến 100.
Sub TinhTong()
Dim S As Double, I As Integer
i= 1
S= 0
Do Untile I>5
S= S+I
I= I+1
Loop
MsgBox ( “Kết quả:”) & S
End Sub
I =1, S=0
-> S=S+I = 0+1 =1
I = I+1 = 1+1 =2 -> S= S+I = 1+2 =3
I = I+1 = 2+1=3 -> S= S+I = 3+3 =6
I = I+1 = 3+1=4 -> S= S+I = 6+4 =10
I = I+1 = 4+1=5 -> S= S+I = 10+5 =15
I = I+1 = 4+1=6 -> Thoát
24
- Biến đối tượng: (Database và RecordSet).
Chức năng:
− Biến Database: Dùng để thao tác với CSDL.
− Biến RecordSet: Dùng để xử lý các bản ghi của CSDL.
Thuộc tính:
− Thêm, xoá, sửa, sắp xếp, trích rút, dò tìm …
Khai báo biến:
Biến Database.
Dim Tên biến As DAO. Database.
Ví dụ: Dim DuLieu As DAO.Database.
Biến RecordSet.
Dim Tên biến As DAO.RecordSet
Ví dụ: Dim BanGhi As DAO. RecordSet.
25
Gắn biến Database với CSDL.
Set Tên biến =CurrentDB()
Ví dụ: Set Dulieu =CurrentDB()
Gắn biến RecordSet với nguồn dữ liệu.
Set Biến RecordSet= Biến Database.OpenRecordSet(“Nguồn dữ liệu, kiểu dữ liệu”)
Ví dụ: Set BanGhi=Dulieu.OpenRecordSet (“DSNV”, DB_OPEN_DYNASET).
Các phương thức của RecordSet.
Addnew: (Thêm), Edit: (Sửa), Delete: (Xoá). Move (Di chuyển), Update: (Cập nhật) ...
Cú pháp của biến RecordSet
Tên biến. Phương thức.
Ví dụ: Banghi. Addnew
26
Đối tượng, biến đối tượng và xử lý đối tượng
 Trong Access có một số đối tượng mà bạn cần quan tâm:
 Đối tượng DBEngine: chứa đối tượng Workspaces (vùng làm việc)
 Đối tượng Workspaces: chứa nhiều vùng làm việc, mỗi vùng chứa một
Database.
 Đối tượng Database: chứa CSDL
 Đối tượng RecordSets: chứa các đối tượng trong CSDL
 Đối tượng Tabledefs: chứa các bảng của một CSDL
 Đối tượng Querydefs: chứa các truy vấn của một CSDL
 Đối tượng Field: chứa các trường trong bảng
 Đối tượng Form: chứa các Form
 v.v..
27
Mở đóng đối tượng bằng câu lệnh Marco
a. Câu lệnh Macro.
 Để thực hiện một Macro ta dùng lệnh sau:
DoCmd. <Tên_hành_động>[,<danh sách đối số>]
 Lệnh này phải đựơc đặt trong các hàm hoặc thủ tục để thực thi.
b. Hành động mở, đóng các đối tượng.
 Đóng các đối tượng: CLOSE
ví dụ: Để đóng một Form DanhSach ta gõ như sau:
DoCmd.Close acForm, “DanhSach”, acSaveYes
AcForm: là thông số chỉ Form đang hoạt động
AcSaveYes: là thông số cho phép khi đóng Form thì ghi lại mọi sự thay đổi trên
đó.
Để đóng các đối tượng khác ta làm tương tụ như ví dụ trên.
28
Mở đóng đối tượng bằng câu lệnh Marco
 Mở các đối tượng ta sử dụng những hành động sau:
o OpenTable: Mở một bảng
o OpenForm: Mở một Form
o OpenReport: Mở một Report
o OpenQuery: Mở một Query
o OpenModule: Mở một Module
Ví dụ 1: Tạo một thủ tục thực hiện một Macro mở bảng DanhSach
DoCmd.Opentable (“DanhSach”)
 Để mở các đối tượng khác ta làm tương tự như trên.
29