Đặc tính Dirty
Chắc bạn đã làm quen với đặc tính Dirty của mẫu biểu Access (chỉ có từ Access 97). Nó cho phép từ chương trình viết bằng VBA (Visual Basic for Applications) có thể xác định được dữ liệu trong bản ghi hiện thời (gắn với mẫu biểu) có thay đổi và đã được ghi chưa. Bạn có thể sửa đặc tính này thành giá trị False từ mã VBA để ghi bản ghi đó ra đĩa. Thế nhưng nếu ta cần thực hiện thao tác gì đó khi mẫu biểu bị thay đổi thì làm thế nào? Access 97 không có sự kiện gọi là Dirty. Chắc bạn đã đoán ra: Access 2000 cuối cùng đã có sự kiện (event) như vậy. Thủ tục xử lý sự kiện Dirty có tham biến Cancel. Khi cần có thể thực hiện lệnh Cancel = True để thôi (undo) không làm những gì vừa thay đổi với bản ghi hiện thời nữa. Nhược điểm lớn của sự kiện Dirty là nó chỉ xảy ra khi người nhập liệu bắt đầu sửa nội dung mẫu biểu, chứ không xảy ra khi đặc tính Dirty bị sửa thành False từ chương trình. Nên có thêm sự kiện, chẳng hạn với tên là Undo để xử lý tình huống đó (bạn có thể lấy trình FrmSmp 97.exe từ cơ sở Web của Microsoft để tham khảo cách mô phỏng sự kiện After undo, nó sử dụng một điều khiển tính toán với biểu thức là một hàm người dùng, và hàm này thực hiện mỗi khi đặc tính Dirty của Access 97 thay đổi. Dùng kỹ thuật này để mô phỏng sự kiện Dirty, nhưng không hiệu quả bằng sự kiện Dirty cài sẵn trong Access 2000).
Định dạng có điều kiện
Đây là một trong những tính năng mà người lập trình Access khao khát nhất: làm thế nào để chỉ một số dòng nào đó (ví dụ: các dòng với doanh số lớn hơn 10.000 USD) của mẫu hoặc báo biểu hiện lên với dạng thức theo ý muốn (ví dụ: có màu đậm hơn các dòng khác, để dễ đọc, dễ nhấn mạnh). Với report thì có thủ thuật thêm cấu trúc IF - Endif vào thủ tục xử lý sự kiện Format của vùng (section) chứa hộp văn bản cần kiểm tra và nhấn mạnh. (Nếu thỏa điều kiện nào đó thì sửa các đặc tính Font, Fontweight,... của điều khiển cần định dạng riêng.) Tương tự, đối với mẫu biểu kiểu Single (đơn bản ghi) đưa nhóm lệnh kể trên vào thủ tục xử lý Current. Thế nhưng với kiểu mẫu biểu liên kế (Continuous Form, mẫu biểu đa bản ghi), làm như vậy sẽ thay đổi dạng thức cho tất cả các bản ghi! Nghĩa là không đạt được mục đích đặt ra. Vâng, bây giờ thì nhóm Access của Microsoft đã lắng nghe nguyện vọng của người sử dụng: có cách dễ dàng định dạng có điều kiện (conditional formatting) cho từng hộp văn bản, từng hộp chọn combo, từng dòng một. Có thể xác lập nhiều điều kiện định dạng cho mỗi điều khiển (dưới dạng biểu thức luận lý hay trạng thái điều khiển đang trong focus hay không). Nếu có vài điều kiện đúng, sẽ chọn điều kiện đúng đầu tiên kể từ đầu danh sách. Bạn đặt điều kiện trong cả chế độ Design (khi thiết kế) hoặc chế độ Form (khi mở mẫu biểu để làm việc, tức là định dạng động, trong thời gian vào hoặc xem số liệu). Hình 1 cho thấy hộp thoại Conditional Formatting mở ra khi người dùng nhập liệu hoặc xem form bằng cách vào thực đơn Format, sau đó chọn Conditional Formatting.
Hình 1. Hộp thoại định dạng có điều kiện mở trong Form View.
Người lập trình VBA có thể kiểm soát việc định dạng có điều kiện bằng cách thêm hoặc loại bỏ các đối tượng kiểu FormatCondition từ sưu tập (collection) FormatConditions, và đặt lại các đặc tính của các đối tượng đó. Ví dụ, để doanh số hàng tháng trở nên đậm và có màu xanh dương nếu lớn hơn hạn mức nào đó (nhập sẵn vào hộp văn bản textMonthQuota của mẫu biểu), ta dùng đoạn mã sau:
Chắc bạn đã làm quen với đặc tính Dirty của mẫu biểu Access (chỉ có từ Access 97). Nó cho phép từ chương trình viết bằng VBA (Visual Basic for Applications) có thể xác định được dữ liệu trong bản ghi hiện thời (gắn với mẫu biểu) có thay đổi và đã được ghi chưa. Bạn có thể sửa đặc tính này thành giá trị False từ mã VBA để ghi bản ghi đó ra đĩa. Thế nhưng nếu ta cần thực hiện thao tác gì đó khi mẫu biểu bị thay đổi thì làm thế nào? Access 97 không có sự kiện gọi là Dirty. Chắc bạn đã đoán ra: Access 2000 cuối cùng đã có sự kiện (event) như vậy. Thủ tục xử lý sự kiện Dirty có tham biến Cancel. Khi cần có thể thực hiện lệnh Cancel = True để thôi (undo) không làm những gì vừa thay đổi với bản ghi hiện thời nữa. Nhược điểm lớn của sự kiện Dirty là nó chỉ xảy ra khi người nhập liệu bắt đầu sửa nội dung mẫu biểu, chứ không xảy ra khi đặc tính Dirty bị sửa thành False từ chương trình. Nên có thêm sự kiện, chẳng hạn với tên là Undo để xử lý tình huống đó (bạn có thể lấy trình FrmSmp 97.exe từ cơ sở Web của Microsoft để tham khảo cách mô phỏng sự kiện After undo, nó sử dụng một điều khiển tính toán với biểu thức là một hàm người dùng, và hàm này thực hiện mỗi khi đặc tính Dirty của Access 97 thay đổi. Dùng kỹ thuật này để mô phỏng sự kiện Dirty, nhưng không hiệu quả bằng sự kiện Dirty cài sẵn trong Access 2000).
Định dạng có điều kiện
Đây là một trong những tính năng mà người lập trình Access khao khát nhất: làm thế nào để chỉ một số dòng nào đó (ví dụ: các dòng với doanh số lớn hơn 10.000 USD) của mẫu hoặc báo biểu hiện lên với dạng thức theo ý muốn (ví dụ: có màu đậm hơn các dòng khác, để dễ đọc, dễ nhấn mạnh). Với report thì có thủ thuật thêm cấu trúc IF - Endif vào thủ tục xử lý sự kiện Format của vùng (section) chứa hộp văn bản cần kiểm tra và nhấn mạnh. (Nếu thỏa điều kiện nào đó thì sửa các đặc tính Font, Fontweight,... của điều khiển cần định dạng riêng.) Tương tự, đối với mẫu biểu kiểu Single (đơn bản ghi) đưa nhóm lệnh kể trên vào thủ tục xử lý Current. Thế nhưng với kiểu mẫu biểu liên kế (Continuous Form, mẫu biểu đa bản ghi), làm như vậy sẽ thay đổi dạng thức cho tất cả các bản ghi! Nghĩa là không đạt được mục đích đặt ra. Vâng, bây giờ thì nhóm Access của Microsoft đã lắng nghe nguyện vọng của người sử dụng: có cách dễ dàng định dạng có điều kiện (conditional formatting) cho từng hộp văn bản, từng hộp chọn combo, từng dòng một. Có thể xác lập nhiều điều kiện định dạng cho mỗi điều khiển (dưới dạng biểu thức luận lý hay trạng thái điều khiển đang trong focus hay không). Nếu có vài điều kiện đúng, sẽ chọn điều kiện đúng đầu tiên kể từ đầu danh sách. Bạn đặt điều kiện trong cả chế độ Design (khi thiết kế) hoặc chế độ Form (khi mở mẫu biểu để làm việc, tức là định dạng động, trong thời gian vào hoặc xem số liệu). Hình 1 cho thấy hộp thoại Conditional Formatting mở ra khi người dùng nhập liệu hoặc xem form bằng cách vào thực đơn Format, sau đó chọn Conditional Formatting.
Hình 1. Hộp thoại định dạng có điều kiện mở trong Form View.
Người lập trình VBA có thể kiểm soát việc định dạng có điều kiện bằng cách thêm hoặc loại bỏ các đối tượng kiểu FormatCondition từ sưu tập (collection) FormatConditions, và đặt lại các đặc tính của các đối tượng đó. Ví dụ, để doanh số hàng tháng trở nên đậm và có màu xanh dương nếu lớn hơn hạn mức nào đó (nhập sẵn vào hộp văn bản textMonthQuota của mẫu biểu), ta dùng đoạn mã sau:
Mã:
With Forms!frmSales!txtMonthSales. FormatConditions
.Add(acFieldValue, acGreaterthan, "=[txtMonthQuota]")
.FontBold = True
.ForeColor = vbBlue
End With