Thủ Thuật Access

Thế Giới Thủ Thuật với Access

Các sự kiện xảy ra trên report

Posted by Noname on 03.02.2010

Sự kiện (event) và các thủ tục sự kiện (event procedure) – phần 2
Tác giả: phatnq2002– Danketoan

Ngoài các sự kiện xảy ra tương tự như với form, report cũng có một số sự kiện mà bạn có thể điều khiển nó nhằm làm cho report của bạn có thể “linh hoạt” hơn.

1. Sự kiện NoData:
Sự kiện xảy ra sau khi report đã được định dạng để chuẩn bị in nhưng không có dữ liệu nào được tập hợp (recordsource của nó có record count = 0).

Dựa trên sự kiện này, chúng ta có thể cho hủy in ra một report trắng.

Thuộc tính sự kiện có tên là OnNoData.
Thủ tục sự kiện có tên là Report_NoData. Có một tham số quen thuộc là Cancel.
Khi Cancel = True thì việc in report sẽ được hủy. Tuy nhiên các bạn cần lưu ý. Việc hủy in ở đây sẽ có tác động gây ra một lỗi và sẽ xuất hiện một thông báo lỗi. Để tắt thông báo này, bạn nên gọi report trong code và dùng mẫu sau:

On Error Resume Next
DoCmd.OpenReport “reportname”, acViewNormal (hoặc acViewPreview)
On Error Goto 0

Dưới đây là một đoạn code dùng để thông báo cho người sử dụng biết là việc in sẽ bị hủy vì không có dữ liệu để in:

Private Sub Report_NoData(Cancel As Integer)
MsgBox “Bản in không có dữ liệu, việc in sẽ bị hủy. ” & _
chr(13) & “Xin vui lòng kiểm tra dữ liệu nguồn của bản in, ” & _
“và chắc chắn là điều kiện lọc (nếu có) được nhập đúng.” vbOKOnly + vbInformation
Cancel = True
End Sub

2. Sự kiện Page:
Sự kiện xảy ra sau khi trang đã định dạng để chuẩn bị in.
Điều khiển sự kiện này, chúng ta có thể thêm thắt vào một vài chi tiết gì đó cho trang khi in ra.
Thuộc tính sự kiện có tên là OnPage.
Thủ tục sự kiện có tên là Report_Page. Không có tham số.
Sau đây là ví dụ để vẽ một đường viền quanh trang:

Private Sub Report_Page()
Me.Line(0, 0)-(Me.ScaleWidth, Me.ScaleHeight), , B
End Sub

Đối với các vùng của report: Report Header/Footer, Detail, Page Header/Footer, …, chúng ta còn có một số sự kiện tác động lên chúng.

3. Sự kiện Format:
Sự kiện xảy ra khi Access đang “thu xếp” xem cái gì sẽ được in ra trong khu vực, nhưng trước khi khu vực đó được định dạng để in ra.
Khi điều khiển sự kiện này, bạn có thể thực hiện những tính toán nào đó, định dạng lại những gì sẽ được in ra, ví dụ sẽ in logo công ty ở tất cả các trang, trừ trang đầu, khu vực sẽ có màu gì khi thỏa mãn điều kiện gì, …
Thuộc tính sự kiện có tên OnFormat.
Thủ tục sự kiện có tên sectionname_Format. Thủ tục này có hai tham số:
Cancel: dễ hiểu quá rồi.
FormatCount: một số xác định xem sự kiện xảy ra mấy lần trên khu vực đó. mặc định là 1, nó chỉ lớn hơn 1 khi giả định nội dung của khu vực in không thể in cùng một trang, ví dụ nếu nội dung khu vực phải in lấn sang trang sau thì nó sẽ có giá trị là 2.

VD sau sẽ cho hiển thị một hình nào đó ví dụ như :biggrin: chẳng hạn (giả sử control chứa hình có tên là hinh) nếu một đại diện bán hàng đạt doanh thu từ 10 triệu/ tháng, ngược lại thì không:

Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
If doanhthu > 10000000 Then
hinh.Visible = True
Else
hinh.Visible = False
End If
End Sub

4. Sự kiện Print:
Sự kiện xảy ra khi Access đã định dạng xong những gì sẽ được in ra trong khu vực, nhưng trước khi khu vực đó được để in ra.
Sự kiện chỉ xảy ra cho những khu vực thực sự sẽ được in ra.
Với khu vực Detail, sự kiện Print xảy ra cho mỗi record trong khu vực ngay trước khi Access in dữ liệu của record.
Với khu vực Group header, sự kiện xảy ra cho mỗi nhóm mới, và thủ tục sự kiện sẽ truy cập đến dữ liệu của group header và dữ liệu trong record đầu tiên của khu vực Detail.
Với group footer, và thủ tục sự kiện sẽ truy cập đến dữ liệu của group footer và dữ liệu trong record cuối cùng của khu vực Detail.
Bạn có thể điều khiển sự kiện Print khi bạn muốn tính toán tổng số trang thật sự được in và cho in lên page header hoặc footer.
Thuộc tính sự kiện có tên là OnPrint.
Thủ tục sự kiện có tên là sectionname_Print. Có hai tham số:
Cancel: thôi khỏi nói nữa.
PrintCount: một số xác định xem sự kiện xảy ra mấy lần trên khu vực đó. mặc định là 1, nó chỉ lớn hơn 1 khi giả định nội dung của khu vực in không thể in cùng một trang, ví dụ nếu nội dung khu vực phải in lấn sang trang sau thì nó sẽ có giá trị là 2.
____________________________________________________________________________________
Thảo luận thêm: http://thuthuataccess.co.cc/forum

2 phản hồi to “Các sự kiện xảy ra trên report”

  1. Anonymous said

    minh dang lam mot phan mem quan ly nhung khi minh lam den phan report thi ban in cua minh in tat ca thong tin minh da dang nhap.minh muon chi in tung ban thong tin thoi.nhung minh kong biet lam the nao.giup minh voi

  2. Noname said

    Nếu bạn chỉ là nhập môn Access. Bạn nên dùng wizard để thuận tiện hơn trong thiết kế. bạn thử hết các wizard sẽ có cái đáp ứng nhu cầu mình!Chúc thành công!

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

 
%d bloggers like this: