Bài 5.3: KHAI BÁO CẤU TRÚC ĐIỀU KHIỂN

3.2. Khai báo cấu trúc lặp

Trong lập trình Access Basic, khi cần thực hiện lặp đi lặp lại một hoặc một nhóm câu lệnh nhiều lần cho đến khi thỏa mãn một điều kiện hoặc đủ số lần định trước, ta sử dụng cấu trúc lặp. Cấu trúc lặp giúp thu gọn mã nguồn, tối ưu hóa quá trình xử lý dữ liệu hàng loạt (như duyệt qua danh sách bản ghi, tính tổng lũy tiến).

3.2.1. Khai báo cấu trúc Do ... Loop

Cấu trúc Do ... Loop được sử dụng khi chưa xác định trước số lần lặp, việc lặp tiếp tục hay dừng lại phụ thuộc vào một biểu thức điều kiện logic (True hoặc False).

Cấu trúc này có 4 dạng biến thể chính tùy thuộc vào thời điểm kiểm tra điều kiện (kiểm tra trước hay kiểm tra sau) và logic điều kiện (While hay Until).

a. Kiểm tra điều kiện trước (Do While ... Loop và Do Until ... Loop)

  • Dạng Do While (Lặp khi điều kiện còn đúng):

    Do While <Điều_kiện>
        <Khối_câu_lệnh>
    Loop
    

    Ý nghĩa: Kiểm tra điều kiện trước khi vào vòng lặp. Nếu điều kiện đúng (True), các câu lệnh bên trong được thực hiện; nếu sai (False) ngay từ đầu, khối lệnh bị bỏ qua hoàn toàn.

  • Dạng Do Until (Lặp cho đến khi điều kiện đúng):

    Do Until <Điều_kiện>
        <Khối_câu_lệnh>
    Loop
    

    Ý nghĩa: Lặp lại khối lệnh cho đến khi biểu thức điều kiện trở thành True thì dừng lại.

b. Kiểm tra điều kiện sau (Do ... Loop While và Do ... Loop Until)

  • Dạng Do ... Loop While:

    Do
        <Khối_câu_lệnh>
    Loop While <Điều_kiện>
    

    Ý nghĩa: Khối lệnh bên trong được thực hiện ít nhất một lần, sau đó mới kiểm tra điều kiện ở cuối vòng lặp để quyết định có lặp lại nữa hay không.

  • Ví dụ minh họa tính tổng dùng Do While:

    Dim Tong As Integer, i As Integer
    Tong = 0
    i = 1
    Do While i <= 10
        Tong = Tong + i
        i = i + 1
    Loop

3.2.2. Khai báo cấu trúc While ... Wend

Cấu trúc While ... Wend là một dạng lặp điều kiện đơn giản (tương tự như dạng Do While kiểm tra trước).

  • Cú pháp:

    While <Điều_kiện>
        <Khối_câu_lệnh>
    Wend
    
  • Quy tắc hoạt động:

    1. Chương trình kiểm tra biểu thức <Điều_kiện>.

    2. Nếu điều kiện mang giá trị True, các câu lệnh bên trong cho đến gặp từ khóa Wend sẽ được thực thi. Sau đó, chương trình quay lại kiểm tra điều kiện.

    3. Nếu điều kiện mang giá trị False, vòng lặp kết thúc, chương trình chuyển đến câu lệnh nằm ngay sau Wend.

  • Ví dụ minh họa:

    Dim n As Integer
    n = 5
    While n > 0
        Debug.Print "Gia tri n = " & n
        n = n - 1
    Wend

3.2.3. Khai báo cấu trúc For ... Next

Cấu trúc For ... Next được sử dụng khi đã biết trước số lần lặp cụ thể. Vòng lặp sử dụng một biến đếm chạy từ giá trị đầu đến giá trị cuối với một bước nhảy xác định.

  • Cú pháp:

    For <Biến_đếm> = <Giá_trị_đầu> To <Giá_trị_cuối> [Step <Bước_nhảy>]
        <Khối_câu_lệnh>
    Next [<Biến_đếm>]
    
  • Giải thích chi tiết các thành phần:

    • <Biến_đếm>: Biến số nguyên (thường là Integer hoặc Long) dùng để đếm số lần lặp.

    • Step <Bước_nhảy>: Khoảng tăng (hoặc giảm) của biến đếm sau mỗi vòng lặp. Nếu bỏ qua Step, hệ thống tự động hiểu bước nhảy mặc định là 1. Nếu đếm lùi, bước nhảy phải là số âm.

  • Ví dụ minh họa in các số lẻ từ 1 đến 9:

    Dim i As Integer
    For i = 1 To 9 Step 2
        Debug.Print "So le: " & i
    Next i
    
  • Lệnh thoát sớm khỏi vòng lặp (Exit For / Exit Do): Trong quá trình chạy, nếu xuất hiện điều kiện đặc biệt cần dừng vòng lặp ngay lập tức mà không chờ chạy hết số lần, ta dùng lệnh Exit For (đối với vòng lặp For) hoặc Exit Do (đối với vòng lặp Do).

Dưới đây là bảng tóm tắt 2 cột theo đúng yêu cầu:

Tên cấu trúc lặp Mô tả khi nào dùng
For ... Next Dùng khi đã biết trước chính xác số lần lặp cụ thể (ví dụ: lặp từ 1 đến 10, duyệt các tháng từ 1 đến 12).
For Each ... Next Dùng khi muốn duyệt qua toàn bộ phần tử trong một tập hợp đối tượng (Collection) hoặc một mảng mà không cần quan tâm đến chỉ số đếm.
Do While ... Loop Dùng khi chưa biết trước số lần lặp, muốn lặp khi điều kiện còn đúng (True) và kiểm tra điều kiện ngay từ đầu (có thể không chạy lần nào nếu điều kiện sai ngay từ đầu).
Do ... Loop While Dùng khi chưa biết trước số lần lặp, bắt buộc khối lệnh phải chạy ít nhất 1 lần rồi mới kiểm tra điều kiện để tiếp tục lặp khi còn đúng (True).
Do Until ... Loop Dùng khi chưa biết trước số lần lặp, muốn lặp cho đến khi điều kiện trở thành đúng (True) thì dừng lại (kiểm tra điều kiện ở đầu vòng lặp).
Do ... Loop Until Dùng khi cần khối lệnh thực thi ít nhất 1 lần, sau đó tiếp tục lặp cho đến khi điều kiện đạt mức đúng (True) thì dừng lại (kiểm tra điều kiện ở cuối vòng lặp).
While ... Wend Dùng cho các bài toán lặp điều kiện đơn giản, lặp khi điều kiện còn đúng (True) và không có nhu cầu thoát ngang bằng lệnh ngắt vòng lặp.

Bài tập 5.3.1: Vòng lặp For ... Next

  • Tên Form: frm_VongLap_For

  • Mô tả bài toán: Thiết kế biểu mẫu cho phép nhập vào từ bàn phím một số nguyên dương N. Khi nhấn nút lệnh Tính Tổng, chương trình sử dụng vòng lặp For ... Next để tính tổng S = 1 + 2 + 3 + … + N và xuất kết quả ra ô Text Box hiển thị.

  • Yêu cầu điều khiển trên Form:

    • 01 Text Box nhận giá trị N (Name: txtN, nhãn: Nhập số N:).

    • 01 Text Box hiển thị kết quả (Name: txtKetQua, nhãn: Tổng S:, thuộc tính Locked: Yes).

    • 01 Command Button thực thi tính toán (Name: cmdTinh, Caption: Tính Tổng).

Bài tập 5.3.2: Vòng lặp Do While ... Loop

  • Tên Form: frm_VongLap_DoWhile

  • Mô tả bài toán: Thiết kế biểu mẫu cho phép nhập vào một số nguyên N (0 <=N<=15). Khi nhấn nút lệnh Tính Giai Thừa, chương trình sử dụng vòng lặp Do While ... Loop (kiểm tra điều kiện trước) để tính tích N! = 1 x 2 x …N (quy ước 0! = 1) và hiển thị kết quả ra màn hình.

  • Yêu cầu điều khiển trên Form:

    • 01 Text Box nhận số $N$ (Name: txtSoN, nhãn: Nhập số N:).

    • 01 Text Box hiển thị kết quả (Name: txtGiaiThua, nhãn: Giai thừa (N!):, thuộc tính Locked: Yes).

    • 01 Command Button tính toán (Name: cmdGiaiThua, Caption: Tính Giai Thừa).

Bài tập 5.3.3: Vòng lặp Do ... Loop While

  • Tên Form: frm_VongLap_DoLoopWhile

  • Mô tả bài toán: Thiết kế biểu mẫu mô phỏng xác nhận mật khẩu. Người dùng nhập mật khẩu vào ô Text Box (ký tự hiển thị dạng *). Khi nhấn nút Xác Nhận, chương trình sử dụng cấu trúc Do ... Loop While (kiểm tra điều kiện sau) để đối chiếu với mật khẩu mặc định (ví dụ: 123456). Nếu đúng hiển thị thông báo thành công; nếu sai hiển thị cảnh báo và xóa trắng ô để nhập lại.

  • Yêu cầu điều khiển trên Form:

    • 01 Text Box nhập mật khẩu (Name: txtMatKhau, nhãn: Nhập mật khẩu:, Input Mask: Password).

    • 01 Command Button thực hiện kiểm tra (Name: cmdXacNhan, Caption: Xác Nhận).

Bài tập 5.3.4: Vòng lặp Do Until ... Loop

  • Tên Form: frm_VongLap_DoUntil

  • Mô tả bài toán: Thiết kế biểu mẫu tính bài toán gửi tiết kiệm ngân hàng. Người dùng nhập vào: Số tiền vốn ban đầu, Lãi suất năm (%) và Số tiền mục tiêu. Khi nhấn nút Tính Số Năm, chương trình sử dụng vòng lặp Do Until ... Loop để tính dồn tiền lãi theo từng năm cho đến khi số tiền đạt hoặc vượt mức mục tiêu thì dừng và in ra số năm cần tích lũy.

  • Yêu cầu điều khiển trên Form:

    • 01 Text Box nhập tiền gửi ban đầu (Name: txtVon, nhãn: Số tiền gửi ban đầu:).

    • 01 Text Box nhập lãi suất (Name: txtLaiSuat, nhãn: Lãi suất năm (%):).

    • 01 Text Box nhập số tiền mục tiêu (Name: txtMucTieu, nhãn: Số tiền mục tiêu:).

    • 01 Text Box hiển thị số năm cần gửi (Name: txtSoNam, nhãn: Số năm cần gửi:, thuộc tính Locked: Yes).

    • 01 Command Button tính toán (Name: cmdTinhNam, Caption: Tính Số Năm).

Bài tập 5: Vòng lặp For Each ... Next

  • Tên Form: frm_VongLap_ForEach

  • Mô tả bài toán: Thiết kế biểu mẫu thông tin liên hệ gồm nhiều trường dữ liệu. Khi người dùng nhấn nút Xóa Trắng Dữ Liệu, chương trình sử dụng vòng lặp For Each ... Next duyệt qua toàn bộ tập hợp các điều khiển (Me.Controls) trên Form; nếu điều khiển là Text Box thì tự động làm rỗng (gán Null) toàn bộ nội dung.

  • Yêu cầu điều khiển trên Form:

    • 03 Text Box nhập liệu: Họ tên (Name: txtHoTen), Địa chỉ (Name: txtDiaChi), Số điện thoại (Name: txtDienThoai).

    • 01 Command Button thực hiện xóa trắng (Name: cmdXoaTrang, Caption: Xóa Trắng Dữ Liệu).

Bài tập 6: Có các form nhập liệu, trong đó có nhiều control nhập thông tin là chuỗi. Hôi viết 1 hàm chung cho cả phần mềm ( Form nào cũng sử dụng). Hàm đó chức năng cắt bỏ khoảng trống 2 bên, nếu lỡ nhập và hai khoảng trắng giữa các từ thì cắt đi 1 khoảng trắng. Biến đổi các từ thành chữa hoa đầu từ ví dụ (Trần Trung Hiếu).