2014 Medium Date Ngày – tháng – năm 15-03-2014
3. Sử dụng Sub Report 6.2.1 Sử dụng Total Query
8.5 Một số lệnh về lập trình
8.5.3 Lệnh rẽ nhánh IF...THEN...END IF
If <Bi u th c đi u ki n> Thenể ứ ề ệ <Nhóm l nh 1>ệ
Else
<Nhóm l nh 2>ệ End If
267
Ví 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 Sub
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 đó 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 IF
268
Sub GPTB2()
Dim a As Double, b As Double, c As Double, Delta As Double Dim x1 As Double, x2 As Double
a= 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 If
End Sub
8.5.3 Lệnh rẽ nhánh IF...THEN...END IF
269
Khô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 Sub
8.5.4 Lệnh chọn Select...Case
270
Khi 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 Sub
8.5.4 Lệnh chọn Select...Case
271
Cú 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..
8.5.4 Lệnh chọn 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
272
Ví 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 Select
End Sub
8.5.4 Lệnh chọn Select...Case
273
Lệ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.
8.5.5 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
274
Ví dụ: Tính tổng s=11+22+33+...+1010 .
Sub Tong()
Dim s As Double, i As Integer For i = 1 To 10 Step 1
s = s + i^i Next
MsgBox “Kết quả là:” & Str(s) End Sub
8.5.5 Lệnh lặp For...Next
275
Dạ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 . Ví dụ:
Sub Tong()
Dim s As Double, a As Double, i As Integer i= 1
a=1/i s= 0
Do While a>=0.0001 s= s+a
i= i+1 a=1/i Loop
MsgBox (“Kết quả:”) & Str(s) End Sub
8.5.6 Lệnh Do while... Loop
Do While <Đi u ki n>ề ệ <Nhóm l nh>ệ Loop
276
Dạng tổng quát như sau:
Chừ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.
8.5.7 Lệnh Do Until... Loop
Do Until <Đi u ki n>ề ệ
<Nhóm l nh>ệ Loop
277
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..