Trong lĩnh vực Công Nghệ Thông Tin nói riêng, yêu cầu quan trọng nhất của người học đó chính là thực hành. Có thực hành thì người học mới có thể tự mình lĩnh hội và hiểu biết sâu sắc với lý thuyết. Với ngành mạng máy tính, nhu cầu thực hành được đặt lên hàng đầu. Tuy nhiên, trong điều kiện còn thiếu thốn về trang bị như hiện nay, người học đặc biệt là sinh viên ít có điều kiện thực hành. Đặc biệt là với các thiết bị đắt tiền như Router, Switch chuyên dụng
Trang 1KHOA CÔNG NGHỆ THÔNG TIN
MICROSOFT ACCESS 2010
Trang 2TRƯỜNG ĐẠI HỌC KINH DOANH VÀ CÔNG NGHỆ HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
Module – Lập trình trong Access
Chương 8
Tổ chức, hoạt động chương trình trong Access
Thủ tục đáp ứng sự kiện Tạo và thực hiện thủ tục và hàm Các phép toán, hàm, biến, biểu thức Một số lệnh về lập trình
Trang 3Chương trình con có hai dạng: Thủ tục hoặc hàm Mỗi chương trình con là
một dãy các lệnh để thực hiện một công việc nào đó Một chương trình có thể có rất nhiều chương trình con
a Chương trình con dạng thủ tục: Bao gồm các thành phần: Đầu thủ
Trang 4b 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: Đầu hàm, thân hàm
và kết thúc hàm Dạng tổng quát như sau:
8.1 Tổ chức và hoạt động của chương trình trong Access
[Private] Function <Tên hàm> [(<Danh sách các đối số)>]
oChọn Create chọn New chọn Macro & code , sau đó cửa sổ để bạn
soạn thảo chương trình (hay còn gọi là cửa sổ Code) hiện ra như sau:
Trang 5 Bước 2: Bạn gõ vào cửa sổ Code các lệnh (bạn cứ gõ rồi sau sẽ hiểu
lệnh đó là gì?) như hình sau:
Bước 3: Chạy chương trình: Chọn Run/Run Sub Sau khi chạy chương
trình, kết quả như hình sau:
Giải thích:
Lệnh MsgBox(“Chao ban da den voi lap trinh Access”) sẽ đưa ra một thông báo
như hình trên Ta có thể gọi đây là lệnh hiển thị dữ liệu cũng được Khi đưa ra kết
quả trên chương trình tạm dừng và nếu bạn chọn OK thì chương trình sẽ chạy tiếp và thực hiện lệnh sau lệnh MsgBox( ).
Trang 6 Ví dụ 2: Vào 2 số nguyên, tính tổng và hiển thị tổng của hai số đó.
oBạn gõ vào cửa sổ Code như hình sau:
oKhi chạy chương trình, máy yêu cầu bạn gõ từ bàn phím giá trị a như
giao diện sau:
8.1 Tổ chức và hoạt động của chương trình trong Access
Trang 7Đến đây nếu bạn gõ vào số 5 và chọn OK (Hay ấn Enter) thì số nguyên 5
sẽ lưu vào biến a Máy lại đưa ra giao diện:
Và nếu bạn gõ vào số 4 và chọn OK thì máy sẽ lưu số nguyên 4 vào biến
b Tiếp tục máy sẽ tính tổng và đưa kết quả là 9 như hình sau:
Trang 8Giải thích:
Lệnh: Dim a As Integer
o Nghĩa là: Biến (Dim) a là (As) nguyên (Integer) Bạn khai báo biến a là nguyên ,
để máy sử dụng ô nhớ tương ứng với số nguyên mà!, tất nhiên nếu là số thực
thì ô nhớ phải lớn hơn, v.v lý do khai báo là vậy
Lệnh: a = InputBox("Moi ban go vao so a? ")
o Nghĩa là: Hộp nhập liệu (InputBox) ra thông báo: "Moi ban go vao so a? “ Nếu bạn gõ vào một số thì số đó được lưu vào biến a
Lệnh: s = a + b
o Đây là lệnh “gán”, nghĩa là máy sẽ lấy nội dụng biến a (bạn vừa gõ vào 5), cộng với nội dung của biến b (bạn vừa gõ vào 4), kết quả sẽ là 9, “gán” kết quả này cho biến s (gọi lệnh “gán” là như vậy).
Lệnh: MsgBox "Tong 2 so la: " & Str(s)
o Đây là lệnh hiển thị dữ liệu, nhưng dữ liệu thì phải đồng nhất, ở đây: "Tong 2 so la: "(là dữ liệu văn bản) còn nội dung của biến s là một số nguyên Để ghép
8.1 Tổ chức và hoạt động của chương trình trong
Access
Trang 9Mở đối tượng form hoặc report ở chế độ design.
Click phải trên control muốn gán module → chọn properties.
Chọn tab event → chọn event thích hợp → Click nút biểu tượng
Xuất hiện cửa sổ Choose Builder
Chọn lệnh Code Builder → OK.
Xuất hiện cửa sổ soạn thảo module với nội mặc định
Bạn chọn Event và cuốn để tìm sự kiện mình cần
Trang 10Ví dụ: Tạo thủ tục để mở bảng có tên SO_LUONG khi ta kích vào vùng
tiêu đề đầu trang Form Ta thao tác như sau:
Chọn Create vào tap Form chon Form Design
Kích vào thanh FormHeader để bật cửa sổ chứa các thủ tục đáp ứng sự
8.2 Thủ tục đáp ứng sự kiện với form, report
Trang 11Kích vào ô bên phải ứng với dòng On Click, kích mũi tên xuống để chọn
[Event Procedure], kích tiếp vao nút ba chấm bên phải , Sau đó thủ tục đáp ứng sự kiện hiện ra:
Trang 12Sự kiện Click ở các vùng còn lại thiết kế tương tự
8.2 Thủ tục đáp ứng sự kiện với form, report
Trang 13a Taọ thủ tục, hàm trong Macro & Code Tab.
o Bước 1: Create chọn Tab Macro & Code chọn Module
o Bước 2: Khai báo và tạo lập thủ tục hoặc hàm
o Bước 3: Ghi Module
Ví dụ: Vào tuổi của hai người, tính tuổi trung bình của họ.
Function Tong()
Dim T1 As Interger
Dim T2 As Interger
Dim TB As Single
T1 = InputBox(“vào tuoi cua nguoi thu nhat?”)
T2 = InputBox(“vào tuoi cua nguoi thu hai?”)
Trang 14b Tạo thủ tục đáp ứng sự kiên của các điều khiển trên Form.
Trên Form ta có thể đặt các điều khiển như nút lệnh chẳng hạn, nút lệnh này cũng có các sự kiện Các bước tiến hành:
Bước 1: Mở Form và bổ sung một đối tượng lên Form, giả sử nút lệnh
(Button) chẳng hạn
Bước 2: Mở cửa sổ Code:
oChọn nút lệnh, kích phải chuột chọn Build event , sau đó hộp thoại
Code Builder hiện ra:
8.3 Tạo và thực hiện thủ tục và hàm
Trang 15Chọn Code Builder và chọn OK, một thủ tục sự kiện xuất hiện:
Soạn thủ tục hoặc hàm đáp ứng sự kiện
Ghi lại thủ tục đó và chạy thử
Trang 17Khi chạy, thủ tục GOI() yêu cầu thủ tục MoBang() làm việc, thủ tục
MoBang() làm việc xong lại quay về thủ tục GOI() và thực hiện tiếp lệnh sau đó (tức là lệnh gọi thủ tục Tong) Cứ như thế cho đến khi tất cả các lệnh trong thủ tục GOI() được hoàn tất Ba thủ tục đó nằm trong một đoạn
mã (chương trình) như sau:
Trang 18a. Các phép toán số học
b. Các phép toán so sánh:
c. Các phép toán Logic: AND, OR, NOT: Các phép toán so sánh tạo nên biểu
thức logic cho kết quả True(-1) hoặc False(0)
d. Phép ghép chuỗi ký tự: Muốn ghép 2 chuỗi ký tự ta sử sụng phép toán &
Mod : Chia lấy phần dư
<= : Nhỏ hơn hoặc bằng
<> : khác
X Y X And
Y X Or Y Not (x) -1
-1 0 0
-1 0 0 0
-1 -1 -1 0
-1 -1 -1 0
0 0 -1 -1
Trang 19Khai báo biến:
Biến phải khai báo để chương trình xác định:
Tên của biến là gì? vì chương trình sẽ làm việc với tên đó
Kiểu của biến là gì? (nguyên, thực, logic, văn bản, v.v ) vì chương trình phải “xếp chỗ” cho các biến “lưu trú”, nghĩa là chương trình phải huy động ô nhớ phù hợp với kiểu của biến, ví dụ nếu biến nguyên thì ô nhớ
“bé”, số thực thì ô nhớ “to”, v.v Việc khai báo là để xếp chỗ ở của biến (ô nhớ) cho hợp lý, tránh lãng phí (thừa không gian “lưu trú” hoặc không
đủ chỗ để “lưu trú”)
Dạng khai báo biến như sau:
Dim <Tên biến> [As<kiểu>]
<Tên biến>: Bạn tự đặt theo luật sau: là một chuỗi các chữ cái, chữ số, dấu
gạch chân, độ dài tên không quá 40 ký tự, không được trùng với các từ khoá có trong Access và đặc biệt ký tự đầu phải là chữ cái
[As<kiểu>]: Nếu phần này không ghi thì coi như biến đó ngầm định có các kiểu:
Kiểu số, chuỗi, Date/Time, Null (rỗng) Khi sử dụng biến đó tuỳ ngữ cảnh mà xác định kiểu sau Còn nếu ghi phần này thì kiểu có thể là: Nguyên, thực, văn bản, v.v
Ví dụ về khai báo biến: Dim i As Interger (i là biến nguyên ngắn)
Trang 20oBiểu thức chỉ chứa hằng: (234+678)/13
oBiểu thức số chỉ chứa biến: (a+b+c)*(a+b)
oBiểu thức số vừa chứa biến và hằng: (a+b)/7
oBiểu thức văn bản: “Tin hoc” & “Văn phong”
8.4 Các phép toán, hàm, biến, biểu thức
Trang 21Khi lập trình trong Access, 1 câu lệnh chỉ được viết trên 1 dòng, nếu muốn viết nhiều câu lệnh trên 1 dòng ta phải dùng dấu hai chấm(:) để ngăn cách.
Ví dụ: a=4: b=7: s=a+b
Các câu ghi chú, có ý nghĩa giải thích rõ chức năng từng hằng, biến, biểu thức, câu lệnh, v.v Câu ghi chú phải bắt đầu bằng REM hoặc dấu nháy đơn (‘), ví dụ:
Rem Doan ma sau là de vao du lieu
Trang 23 Chức năng: Cho phép nhập giá trị kiểu Varial vào từ bàn phím
Cú pháp:
InputBox(<Thông báo>[ , [<Tiêu đề>][,<Giá trị ngầm định>]])
Ví dụ:Nhập số chứng từ của một hoá đơn vào biến Sct
Dim Sct
Sct=InputBox(“Số chứng từ”)
c Lệnh MsgBox
Chức năng: Hiện chuỗi văn bản (thông báo) ra hộp thoại.
Cú pháp: MsgBox(<Nội dung>[ ,<kiểu>[ ,<Tiêu đề>]])
Ví dụ: MsgBox (“Hello Thao”)
Ví dụ 2: Nhập và tính tổng hai số và in kết quả ra hộp thoại
Trang 24Như đã nói qua ở phần đầu lập trình, lệnh gán có dạng:
<Biến>=<Biểu thức>
Ví dụ: s=s+i
8.5.3 Lệnh rẽ nhánh IF…THEN…END IF
Dạng 1:
Hoạt động của lệnh này như sau:
Nếu<Biểu thức điều kiện> đúng thì thực hiện <Nhóm lệnh> Nếu<Biểu thức điều kiện> sai thì bỏ qua lệnh If.
Ví dụ:
Sub XemTuoi()
Dim tuoi As Integer
tuoi=InputBox(“ Vao tuoi cua ban?”)
Trang 25Khi chạy chương trình:
oNếu bạn gõ vào 65 (lơn hơn 60) và Enter thì máy sẽ in ra câu: “Chắc bạn nghỉ hưu rồi”
oCòn nếu bạn gõ vào 25 (nhỏ hơn 60) và Enter thì máy không đưa ra
Trang 26Ví dụ 1: Ta sửa lại thủ tục XemTuoi() để gặp trường hợp nào máy cũng trả lời:
Sub XemTuoi()
Dim tuoi As Integer
tuoi=InputBox(“ Vao tuoi cua ban?”)
Ví dụ 2: Lập trình giải phương trình bậc hai:ax2+bx+c=0
Để tính nghiệm phương trình bậc hai này, bạn phải cho máy biết ba giá trị
cụ thể ứng với a, b, c (ở đây kiểu 3 biến ấy là thực, rõ ràng bạn phải dùng
lện InputBox) Nhờ giá trị cụ thể 3 biến đó bạn tính được Delta, sau đó
8.5.3 Lệnh rẽ nhánh IF THEN END IF
Trang 28Không phải lúc nào cũng “không thế này thì thế kia” (2 nhánh) mà có những trường hợp bạn phải chọn 1 trong nhiều nhánh, ví dụ: Giả sử bằng
tốt nghiệp của bạn có 3 loại: Trung bình, Khá và Giỏi Nếu khá thì được
thưởng 100.000đ, nếu giỏi được thưởng 200.000đ, còn trung bình thì không được thưởng
Chương trình như sau:
Sub XetThuong()
Dim Loai As Integer
Loai=InputBox(“Vào loại: Trung bình gõ vào số1, Khá số2, Giỏi số3”)
Trang 29Khi chạy chương trình, nếu bạn gõ vào số 3 thì máy sẽ in dòng:” Bạn được thưởng 200.000đ” Nhưng nếu bạn không may gõ nhầm số 6 (gõ nhầm là bình thường mà!) thì máy vẫn thưởng bạn 200.000đ, mặc dù không có loại nào là loại 6 cả Để an toàn bạn sửa lại đoan mã trên như sau:
Sub XetThuong()
Dim Loai As Integer
Loai=InputBox(“Vào loại: Trung bình gõ vào số1, Khá số2, Giỏi số3”)
Trang 30Cú pháp tổng quát của lệnh Select như sau:
Nếu <Giá trị i > bằng i thì thực hiện <Nhóm lệnh i> và kết thúc lệnh Select Case
Còn nếu không có 1 trường hợp nào đúng thì hực hiện <Nhóm lệnh n+1> và cũng kết thúc luôn lệnh Select Case hoặc ra khỏi Select Case nếu không dùng lệnh Case Else
End Select
Trang 31Ví dụ: Tạo một thủ tục lập kế hoạch công tác trong tuần, đặt vào nút
lệnh Command() trên Form Khi chạy chương trình và kích hoạt nút lệnh
thủ tục được thực hiện:
Private Sub command0_Click()
Dim Thu As Integer
Thu = InputBox(“Bạn cho biết thứ? ”)
Select Case Thu
Case 2 MsgBox (“Họp giao ban”)
Trang 32Lệnh For có cú pháp tổng quát như sau:
Ban đầu <Biến đếm> nhận <Giá trị đầu>, và 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>, gặp Next, <Biến đếm> cộng thêm với <Bước tăng>, và đồng thời so sánh với <Giá trị cuối>, nếu lơn hơn thì kết thúc For, còn nếu đang nhỏ hơn hoặc bằng thì lại thực hiện <Nhóm lệnh>, gặp Next lại làm tiếp như trên.
Trang 34Dạng tổng quát như sau:
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ì ra thì thoát khỏi vòng lặp và thực hiện nhóm lệnh sau Loop .
Do While a>=0.0001
s= s+a i= i+1 a=1/i
Trang 35Chừng nào <Điều kiện> vẫn còn sai thì thực hiện <Nhóm lệnh>.
Ví dụ trên ta viết lại theo lệnh này:
Sub Tong()
Dim s As Double, a As Double, i As Integer i= 1
a=1/i s= 0
Do Until a< 0.0001
s= s+a i= i+1 a=1/i
Loop
MsgBox (“Kết quả:”) & Str(s)
End Sub
Khi <Điều kiện> đúng thì ra khỏi vòng lặp và thực hiện nhóm lệnh sau Loop.
Do Until <Điều kiện>
<Nhóm lệnh>
Loop
Trang 36Trong 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
8.6 Đối tượng, biến đối tượng và xử lý đối tượng
Trang 37Cách khai báo biến đối tượng:
a Kiểu Database cho phép tham chiếu đến một CSDL, vì vậy để làm
việc với một CSDL ta phải khai báo biến kiểu Database
Để làm việc với một CSDL hiện thời ta làm như sau:
Dim Db As Database (Khai báo biến Db có kiểu Database)
Set Db=DBEngine.Wokspaces(0).Database(0) (gắn biến Db ứng với CSDL
Trang 38b Sử dụng biến kiểu RecordSet
Kiểu RecordSets cho phép ta tham chiếu đến các đối tượng của CSDL
đã khai báo như: Bảng, truy vấn, các bản ghi, v.v
Ví dụ 1: Tạo 1 biến kiểu RecordSet gắn với bảng So_luong của CSDL
hiện thời:
Sub Form_Load()
Dim Db As Database
Dim Rec As Recordset
Dim Dem As Integer
Trang 39Ví dụ 2: Ta có thể dùng một biến bảng như sau::
Dem = TB.RecordCount
MsgBox "So ban ghi của Bang So_luong la:" & Str(Dem)
End Sub
Trang 40Ví dụ 3: Ta có bảng KhoiA (khối A) gồm các trường: Hoten, NgaySinh,
DienToan, DienLy DienHoa, DiemTong, GhiChu như sau:
Set Rec = Db.OpenRecordset("KhoiA")
Do Until Rec.EOF ‘Làm cho đến hết tệp
Rec.Edit ‘cho phép sửa nội dung các bản ghi
Rec![TongDiem] = Rec![DiemToan] + Rec![DiemLy] + Rec![DiemHoa]
Rec.Update ‘cập nhật giá trị mới
Rec.MoveNext ‘Di chuyển đến bản ghi kế tiếp
Loop
8.6.1 Đối tượng và khai báo đối tượng
Trang 41Sau khi chạy chương trình ta có nội dung bảng mới như sau:
Chú ý:
oTa viết Rec![TongDiem], nghĩa là trường TongDiem trong trong bản
ghi, để phân biệt với biến khi khai báo từ khoá Dim
Ví dụ 4: Cũng từ ví dụ 3, hãy lập trình để ghi vào trường GhiChu chữ
“Do” nếu TongDiem>=15 hoặc chữ “Truot” nếu TongTong<15
Trang 42Sub Form_Load()
Dim Db As Database
Dim Rec As Recordset
Set Db = CurrentDb()
Set Rec = Db.OpenRecordset("KhoiA")
Do Until Rec.EOF ‘Làm cho đến hết tệp
Rec.Update ‘cập nhật giá trị mới
Rec.MoveNext ‘Di chuyển đến bản ghi kế tiếp
Loop
Rec.Close
8.6.1 Đối tượng và khai báo đối tượng
Trang 43Sau khi chạy ta có:
Trang 44a Câu lệnh Macro.
Để thực hiện một Macro ta dùng lệnh sau:
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 đó.
8.6.2 Mở đóng đối tượng bằng câu lệnh Marco
DoCmd <Tên_hành_động>[,<danh sách đối số>]
Trang 45Mở các đối tượng ta sử dụng những hành động sau:
Để mở các đối tượng khác ta làm tương tự như trên
Ví dụ 2: Giả sử trong CSDL hiện thời ta có:
1 Hai bảng TaHsTs (bảng Hồ sơ Tuyển Sinh) và bảng TaDiemD (bảng Điểm khối D)
Bảng TaHsTs có các trường sau: Sbd, HoTen, NgaySinh, GioiTinh, KhuVuc, UuTien, TonGiao, DanToc
Bảng TaDiemD có các trường: Sbd, Toan, Van, Anh
2 Ba Form TuyenSinh2014, FoHsTs, FoDiemD
Một giao diện chính của Form TuyenSinh2014 như hình sau:
Trang 46Chú ý: thuộc tính Name cho
4 nút trên như sau:
oNút có tiêu đề: “NHAP HO SO” có tên NhapHoSo
oNút có tiêu đề: “NHAP DIEM” có tên NhapDiem
oNút có tiêu đề: “KET THUC” có tên KetThuc
a Khi ta kích hoạt nút NHAP HO SO thì Form FoDsTs sẽ được mở để ta đưa
dữ liệu vào, Form này được thiết kế có hình dạng như sau:
8.6.2 Mở đóng đối tượng bằng câu lệnh Marco