Giáo trình Microsoft Access 2010 - Chương 8: Module - lập trình trong Access

Tương tự như vậy viết tiếp cho 2 thủ tục của hai nút lệnh trên Form: FoDiemD Rem Thủ tục trên Form FoDiemD Option Compare Database Private Sub KetThucNhap_Click() DoCmd.Close End Sub Rem . Private Sub NhapDuLieu_Click() Dim Db As Database, Rec As Recordset Set Db = CurrentDb() Set Rec = Db.OpenRecordset("TaDiemD") Rec.AddNew 'Thêm bản ghi mới Rec("SBD") = Sbd Rec("Toan") = Val(Toan) Rec("Van") = Val(Van) Rec("Anh") = Val(Anh) Rec.Update 'Cập nhập bản ghi mới vào bảng TaHsTs Sbd = "" Toan = "" Anh = "" Van = "" Sbd.SetFocus 'Chuyển trỏ đến SBD. End Sub

pptx51 trang | Chia sẻ: thucuc2301 | Lượt xem: 930 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Giáo trình Microsoft Access 2010 - Chương 8: Module - lập trình trong Access, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
KHOA CÔNG NGHỆ THÔNG TINMICROSOFT ACCESS 2010 TRƯỜNG ĐẠI HỌC KINH DOANH CÔNG NGHỆ HÀ NỘI1TRƯỜNG ĐẠI HỌC KINH DOANH VÀ CÔNG NGHỆ HÀ NỘIKHOA CÔNG NGHỆ THÔNG TINModule – Lập trình trong AccessChương 8Tổ chức, hoạt động chương trình trong AccessThủ tục đáp ứng sự kiệnTạo và thực hiện thủ tục và hàmCác phép toán, hàm, biến, biểu thứcMột số lệnh về lập trìnhĐối tượng, biến đối tượng và cách xử lý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ủ tục, thân thủ tục và kết thúc thủ tục.1. Đầu thủ tục có dạng:[Private] Sub [(]2. Thân thủ tụcThân thủ tục nằm sau đầu 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 đó (các lệnh cụ thể bạn sẽ tìm hiểu sau).3. Kết thúc thủ tụcĐể báo cho máy tính biết kết thúc một thủ tục, ta viết dòng lệnh: End Sub8.1 Tổ chức và hoạt động của chương trình trong Access[Private] Sub [(] End Sub4 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: Đầ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 [(] End Function Sau đây là một số ví dụ:Ví dụ1: Lập trình hiển thị câu chào: “Chào bạn đã đến với lập trình Access”Bước 1:Chọ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: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(...).8.1 Tổ chức và hoạt động của chương trình trong Access6 Ví dụ 2: Vào 2 số nguyên, tính tổng và hiển thị tổng của hai số đó.Bạn gõ vào cửa sổ Code như hình sau: Khi 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 Access7Đế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:8.1 Tổ chức và hoạt động của chương trình trong Access8Giải thích:Lệnh: Dim a As IntegerNghĩ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? ")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 aLệnh: s = a + bĐâ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) Đâ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 được bạn phải đổi nội dung của biến s (số nguyên) thành dạng văn bản bằng hàm Str(s): Str viết tắt từ chữ String (văn bản). Để ghép hai văn bản ta dùng dấu & (cũng như để cộng 2 số ta dùng dấu + ). 8.1 Tổ chức và hoạt động của chương trình trong Access9Mở đố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.8.2 Thủ tục đáp ứng sự kiện với form, report10Ví 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 DesignKích vào thanh FormHeader để bật cửa sổ chứa các thủ tục đáp ứng sự kiện ứng với vùng này (tất nhiên ban chon Event), như hình sau:8.2 Thủ tục đáp ứng sự kiện với form, report11Kí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:8.2 Thủ tục đáp ứng sự kiện với form, report12Bạn gõ dòng lệnh: DoCmd.OpenTable “So_luong”. Lưu thủ tục này bằng một tên nào đó, giả sử tên DauFormThoát về CSDL Chạy thủ tục này bằng cách chọn Navigation pane/ Forms, kích đúp vào tên DauForm ta thấy một Form hiện ra.Tiếp theo bạn kích vào vùng FormHeader, chương trình chạy và kết quả là bảng SoLuong được mở ra như sau:Sự 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, report13a. Taọ thủ tục, hàm trong Macro & Code Tab.Bước 1: Create chọn Tab Macro & Code chọn ModuleBước 2: Khai báo và tạo lập thủ tục hoặc hàmBước 3: Ghi ModuleVí 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?”) TB=(T1+T2)/2 MsgBox “Tuoi trung binh la:” & Str(TB) End Function Tuổi trung bình có thể không phải nguyên (vì phải chia cho 2), do đó ta phải khai báo là thực (Single). Số thực trong máy là số có dấu chấm thập phân, ví dụ: 23.45, 12.00, -45.34567, v.v..8.3 Tạo và thực hiện thủ tục và hàm14b. 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:Chọ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àm15Chọ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ử8.3 Tạo và thực hiện thủ tục và hàm16c. Chương trình có nhiều thủ tụcMột thủ tục khi chạy có thể yêu cầu (gọi) một hoặc nhiều thủ tục khác làm việc. Lệnh gọi này được viết lại đúng tên thủ tục bị gọi, ví dụ hai thủ tục sau: Sub MoBang() DoCmd.OpenTable”So_luong” End Sub Và thủ tục tính tổng:Sub Tong() Dim a As Integer, b As Integer, s As Integer a = 12 b = 20 s = a + b MsgBox ("s=" & Str(s))End SubĐể chạy được 2 thủ tục trên, ta có thể tạo một thủ tục khác (giả sử có tên là GOI(), thủ tục GOI có dạng sau: Sub GOI() MoBang Tong End Sub8.3 Tạo và thực hiện thủ tục và hàm17Khi 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:8.3 Tạo và thực hiện thủ tục và hàm18Các phép toán số họcCác phép toán so sánh: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)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 & hoặc dấu +8.4 Các phép toán, hàm, biến, biểu thức+ : Cộng- : Trừ* : Nhân / : Chia Mod : Chia lấy phần dư\ : Chia nguyên^ : Luỹ thừa= : Bằng : Lớn hơn>= : Lớn hơn hoặc bằng : khácXYX And YX Or YNot (x)-1-100-1000-1-1-10-1-1-1000-1-119Khai 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 [As]: 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]: 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)8.4 Các phép toán, hàm, biến, biểu thức20Các hàm thường sử dụng.Với các hàm, bạn cũng phải viết đúng theo quy định của Access, ví dụ Sin(x), Cos(x), Sqr(x), v.v..các hàm như đã trình bày ở chương 5.Biểu thức (Expression)... Các biến, hằng, hàm nối với nhau bởi phép toán được gọi là biểu thức, biểu thức cũng có thể chỉ là 1 biến , 1 hằng, 1 hàm. Điều quan trọng là bạn phải viết biểu thức đúng quy định (đúng phép toán đã quy định, đúng tên biến, đúng tên hằng, đúng cách viết hằng v.v..). Ví dụ:Biểu thức chỉ chứa hằng: (234+678)/13Biểu thức số chỉ chứa biến: (a+b+c)*(a+b)Biểu thức số vừa chứa biến và hằng: (a+b)/7Biểu thức văn bản: “Tin hoc” & “Văn phong” Biểu thức logic:(5>13) Or (3[ , [][,]])Ví dụ: Nhập tên của một khách hàng vào biến Kh Dim Kh As String *20 Kh=InputBox$(“Tên khách hàng”)23b. Lệnh Inputbox 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([ , [][,]])Ví dụ:Nhập số chứng từ của một hoá đơn vào biến SctDim SctSct=InputBox(“Số chứng từ”)c. Lệnh MsgBoxChức năng: Hiện chuỗi văn bản (thông báo) ra hộp thoại.Cú pháp: MsgBox([ ,[ ,]])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ạiSub Tong()Dim a As Interger, b As Intergera=InputBox(“vào a=”)b= InputBox(“vào b=”)Msgbox “Kết quả là:” & Str(a+b)End Sub8.5.1 Vào ra dữ liệu24Như đã nói qua ở phần đầu lập trình, lệnh gán có dạng:=Ví dụ: s=s+i8.5.3 Lệnh rẽ nhánh IFTHENEND IFDạng 1:Hoạt động của lệnh này như sau:Nếu đúng thì thực hiện Nếu sai thì bỏ qua lệnh If.Ví dụ:Sub XemTuoi() Dim tuoi As Integer tuoi=InputBox(“ Vao tuoi cua ban?”) If tuoi>60 Then MsgBox(“Chắc bạn nghỉ hưu rồi?”) End If End Sub8.5.2 Lệnh gánIf Then End If25Khi chạy chương trình:Nế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”.Còn nếu bạn gõ vào 25 (nhỏ hơn 60) và Enter thì máy không đưa ra gì cả.Dạng 2:Hoạt động:Nếu đúng thì thực hiện bỏ Nếu sai thì thực hiện bỏ 8.5.3 Lệnh rẽ nhánh IF...THEN...END IFIf Then ElseEnd If26Ví 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?”) If tuoi>60 Then MsgBox(“Chắc bạn nghỉ hưu rồi?”) Else MsgBox(“Bạn chưa đến tuổi nghỉ hưu!” ) End If End SubVí 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 đó bạn phải xem xét nếu (If) Delta không âm thì có 2 nghiệm, nếu âm thì vô nghiệm. Trình tự đó (giải thuật) được liệt kê như sau: 8.5.3 Lệnh rẽ nhánh IF...THEN...END IF27Sub GPTB2()Dim a As Double, b As Double, c As Double, Delta As DoubleDim x1 As Double, x2 As Doublea= InputBox(“vao a=”)b= InputBox(“vao b=”)c= InputBox(“vao c=”)Delta= b*b - 4*a*c If Delta>0 Then x1=(-b+Sqr(Delta))/(2*a) x2=(-b-Sqr(Delta))/(2*a) MsgBox (“x1=” & Str(x1)) MsgBox (“x2=” & Str(x2))Else MsgBox (“Pt vo nghiem”)End IfEnd Sub 8.5.3 Lệnh rẽ nhánh IF...THEN...END IF28Khô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”) Select Loai Case 1 MsgBox(“Bạn không được thưởng”) Case 2 MsgBox(“Bạn được thưởng 100.000đ”) Case Else MsgBox(“Bạn được thưởng 200.000đ”) End Select End Sub8.5.4 Lệnh chọn Select...Case29Khi 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”) Select Loai Case 1 MsgBox(“Bạn không được thưởng”) Case 2 MsgBox(“Bạn được thưởng 100.000đ”) Case 3 MsgBox(“Bạn được thưởng 200.000đ”) Case Else MsgBox(“Bạn gõ nhầm loại bằng rồi!”) End Select End Sub8.5.4 Lệnh chọn Select...Case30Cú pháp tổng quát của lệnh Select như sau:Nếu bằng i thì thực hiện 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 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..8.5.4 Lệnh chọn Select...CaseSelect Case Case Case .. Case [Case Else ] End Select31Ví 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”) Case 3 MsgBox (“Đi xuống phân xưởng”) Case 4 MsgBox (“Đi lên tổng công ty”) Case 5 Or 6 MsgBox (“Họp các phân xưởng”) Case Else MsgBox (“Nghỉ”) End SelectEnd Sub 8.5.4 Lệnh chọn Select...Case32Lệnh For có cú pháp tổng quát như sau:Ban đầu nhận , và so sánh vớ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 , gặp Next, cộng thêm với , và đồng thời so sánh vớ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 , gặp Next lại làm tiếp như trên.8.5.5 Lệnh lặp For...NextFor = To [Step ] Next33Ví dụ: Tính tổng s=11+22+33+...+1010 .Sub Tong() Dim s As Double, i As IntegerFor i = 1 To 10 Step 1 s = s + i^iNext MsgBox “Kết quả là:” & Str(s)End Sub 8.5.5 Lệnh lặp For...Next34Dạng tổng quát như sau:Chừng nào còn đúng thì thực hiện Khi sai thì ra thì thoát khỏi vòng lặp và thực hiện nhóm lệnh sau Loop .Ví dụ:Sub Tong() Dim s As Double, a As Double, i As Integeri= 1a=1/is= 0Do While a>=0.0001 s= s+a i= i+1 a=1/iLoopMsgBox (“Kết quả:”) & Str(s)End Sub 8.5.6 Lệnh Do while... LoopDo While Loop35Dạng tổng quát như sau:Chừng nào vẫn còn sai thì thực hiện .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 Integeri= 1a=1/is= 0Do Until a đúng thì ra khỏi vòng lặp và thực hiện nhóm lệnh sau Loop.8.5.7 Lệnh Do Until... LoopDo Until Loop36Trong 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 Formv.v..8.6 Đối tượng, biến đối tượng và xử lý đối tượng37Cá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 hiện thời)Hoặc có thể viết:Dim Db As Database Set Db=CurrentDb() (Gắn biến Db với CSDL hiện thời) Làm việc với 1 CSDL khác:Dim Db As DatabaseSet Db= DBEngine.Wokspaces(0).Database()8.6.1 Đối tượng và khai báo đối tượngDim As 38b. Sử dụng biến kiểu RecordSetKiể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 Set Db = CurrentDb() Set Rec = Db.OpenRecordset("So_luong", DB_OPEN_TABLE) Dem = Rec.RecordCount MsgBox "Tổng số bản ghi là" + Str(Dem)End Sub ở trên ta dùng thủ tục Form_Load(), thủ tục này khi chạy thì tự động nạp Form.8.6.1 Đối tượng và khai báo đối tượng39Ví dụ 2: Ta có thể dùng một biến bảng như sau::Sub Form_Load() Dim Db As Database Dim TB As TableDef Dim Dem As Integer Set Db = DBEngine.Workspaces(0).Databases(0) Set TB = Db.TableDefs("So_luong") Dem = TB.RecordCountMsgBox "So ban ghi của Bang So_luong la:" & Str(Dem)End Sub8.6.1 Đối tượng và khai báo đối tượng40Ví 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:Hãy lập trình để tínhDiemTong: DiemTong=DiemToan+DiemLy+DiemHoa.Sub Form_Load()Dim Db As DatabaseDim Rec As RecordsetSet Db = CurrentDb()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ếpLoopRec.CloseDb.Close End Sub8.6.1 Đối tượng và khai báo đối tượng41Sau khi chạy chương trình ta có nội dung bảng mới như sau:Chú ý:Ta 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 Then Rec.Edit ‘cho phép sửa nội dung các bản ghi Rec![GhiChu]=”Do” Else Rec.Edit ‘cho phép sửa nội dung các bản ghi Rec![GhiChu]=”Truot” End If Rec.Update ‘cập nhật giá trị mới Rec.MoveNext ‘Di chuyển đến bản ghi kế tiếpLoop Rec.CloseDb.Close End Sub8.6.1 Đối tượng và khai báo đối tượng43Sau khi chạy ta có:8.6.1 Đối tượng và khai báo đối tượng44a. 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: CLOSEví dụ: Để đóng một Form DanhSach ta gõ như sau:DoCmd.Close acForm, “DanhSach”, acSaveYesAcForm: là thông số chỉ Form đang hoạt độngAcSaveYes: 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.8.6.2 Mở đóng đối tượng bằng câu lệnh MarcoDoCmd. [,]45Mở các đối tượng ta sử dụng những hành động sau:OpenTable: Mở một bảngOpenForm: Mở một FormOpenReport: Mở một ReportOpenQuery: Mở một QueryOpenModule: Mở một ModuleVí 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.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, Anh2. Ba Form TuyenSinh2014, FoHsTs, FoDiemDMột giao diện chính của Form TuyenSinh2014 như hình sau:8.6.2 Mở đóng đối tượng bằng câu lệnh Marco46Chú ý: thuộc tính Name cho 4 nút trên như sau:Nút có tiêu đề: “NHAP HO SO” có tên NhapHoSoNút có tiêu đề: “NHAP DIEM” có tên NhapDiemNút có tiêu đề: “KET THUC” có tên KetThuca. 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 Marco47Nút có tiêu đề: “nhập” có tên NhapLyLichNút có tiêu đề: “kết thúc” có tên KetThucLyLichb. Khi ta kích hoạt nút “NHậP Điểm” ở giao diện chính thì Form FoDiemD sẽ được mở để ta đưa dữ liệu điểm sau khi đã chấm. Giao diện này có cấu trúc như sau:Chú ý: Thuộc tính Name cho 2 nút trên như sau:Nút có tiêu đề: “nhập liệu” có tên NhapDuLieuNút có tiêu đề: “Kết thúc” có tên KetThucNhap8.6.2 Mở đóng đối tượng bằng câu lệnh Marco48 Sau đây là các thủ tục sự kiện cuả ba nút lệnh trên Form TuyenSinh214 như sau:Mở Form TuyenSinh2014 bằng cách về CSDL, chọn Navigation pane/ Form, chọn tệp TuyenSinh2014, chọn DesignChọn nút có tiêu đề NHAP HO SO/ kích phải chuột chọn Code buiderViết Code cho 3 thủ tục đó như sau:Option Compare DatabasePrivate Sub KetThuc_Click() DoCmd.CloseEnd SubPrivate Sub NhapDiem_Click() DoCmd.OpenForm ("FoDiemD")End SubPrivate Sub NhapHoSo_Click() DoCmd.OpenForm ("FoHsTs")End SubTương tự viết Code cho 2 thủ tục của nút lệnh trên Form FoHsTs như sau:Rem Thủ tục trên Form FoHsTsOption Compare DatabasePrivate Sub KetThucLyLich_Click() DoCmd.CloseEnd SubRem --------------------------------------------------8.6.2 Mở đóng đối tượng bằng câu lệnh Marco49Private Sub NhapLyLich_Click()Dim Db As Database, Rec As Recordset Set Db = CurrentDb() Set Rec = Db.OpenRecordset("TaHsTs") Rec.AddNew Rec("SBD") = Sbd Rec("HOTEN") = HoTen Rec("GIOITINH") = GioiTinh Rec("KHUVUC") = Val(KV) Rec("TONGIAO") = TonGiaoRec("DANTOC") = DanToc Rec.UpdateSbd = ""HoTen = ""NgaySinh = ""GioiTinh = ""KhuVuc = ""TonGiao = ""DanToc = ""UuTien = ""Sbd.SetFocusEnd Sub8.6.2 Mở đóng đối tượng bằng câu lệnh Marco50Tương tự như vậy viết tiếp cho 2 thủ tục của hai nút lệnh trên Form: FoDiemDRem Thủ tục trên Form FoDiemDOption Compare DatabasePrivate Sub KetThucNhap_Click() DoCmd.CloseEnd SubRem ....................................................................Private Sub NhapDuLieu_Click() Dim Db As Database, Rec As RecordsetSet Db = CurrentDb() Set Rec = Db.OpenRecordset("TaDiemD") Rec.AddNew 'Thêm bản ghi mới Rec("SBD") = Sbd Rec("Toan") = Val(Toan) Rec("Van") = Val(Van)Rec("Anh") = Val(Anh)Rec.Update 'Cập nhập bản ghi mới vào bảng TaHsTsSbd = ""Toan = ""Anh = ""Van = ""Sbd.SetFocus 'Chuyển trỏ đến SBD.End Sub8.6.2 Mở đóng đối tượng bằng câu lệnh Marco51Tương tự như vậy viết tiếp cho 2 thủ tục của hai nút lệnh trên Form: FoDiemDRem Thủ tục trên Form FoDiemDOption Compare DatabasePrivate Sub KetThucNhap_Click() DoCmd.CloseEnd SubRem ....................................................................Private Sub NhapDuLieu_Click() Dim Db As Database, Rec As RecordsetSet Db = CurrentDb() Set Rec = Db.OpenRecordset("TaDiemD") Rec.AddNew 'Thêm bản ghi mới Rec("SBD") = Sbd Rec("Toan") = Val(Toan) Rec("Van") = Val(Van)Rec("Anh") = Val(Anh)Rec.Update 'Cập nhập bản ghi mới vào bảng TaHsTsSbd = ""Toan = ""Anh = ""Van = ""Sbd.SetFocus 'Chuyển trỏ đến SBD.End Sub8.6.2 Mở đóng đối tượng bằng câu lệnh Marco

Các file đính kèm theo tài liệu này:

  • pptxaccess_8_4942_2051137.pptx