Tìm thủ thuật nhanh hơn với chức năng tìm trong Blog

9/3/11

Ẩn những giá trị trùng lắp

Bài viết này hướng dẫn bạn kết hợp thuộc tính Visible với HideDuplicate để ẩn giá trị lặp đi lặp lại trên một báo cáo. Trong cơ sở dữ liệu, các báo cáo làm từ quan hệ 1-n dẫn đến tên mã hàng lặp đi lặp lại thế này:
[Hình: DupeNoHide.png]

Thuộc tính HideDuplicate cho phép ẩn đi các ô OrderID, OrderDate, và CompanyName cho ta report dễ đọc hơn nhưng không hoàn toàn đúng
[Hình: DupeHide.png]

Date và Company ở order 10617 bị biến mất. TƯơng tự , Company ở Order 10619 cũng bị mất. Vấn đề đặt ra làm thế nào ngăn được những trường hợp này? Tức là cho phép hiện ra nếu nó là 1 OrderID mới.



Khi Access ẩn các ô bị trùng, nó thiết lập thuộc tính IsVisible cho đối tượng đó. Bằng cách kiểm tra thuộc tính này của ô OrderID, ta biết được nó có phải là Order mới không!
Ta set thuộc tính cho ô txtOrderDate như sau:
Mã:
Control Source :    =IIf(OrderID.IsVisible,[OrderDate],Null)
Hide Duplicates :    No
Chú ý, tên của textbox không được trùng với tên của record source.

Tương tự, ta set thuộc tính cho ô txtCompany
Mã:
=IIf(OrderID.IsVisible,[CompanyName],Null)

Và report của ta sẽ như thế này:
[Hình: DupeHideAndIsVisible.png]

Nếu bạn làm thử 1 report từ dữ liệu Nortwind, bạn dùng query sau:
Mã:
SELECT Orders.OrderID, Orders.OrderDate, Customers.CompanyName, [Order Details].ProductID, Products.ProductName, [Order Details].Quantity
FROM Products INNER JOIN ((Customers INNER JOIN Orders ON Customers.CustomerID=Orders.CustomerID) INNER JOIN [Order Details]
  ON Orders.OrderID=[Order Details].OrderID) ON Products.ProductID=[Order Details].ProductID
WHERE Orders.OrderID > 10613
ORDER BY Orders.OrderID;

Dịch từ: allenbrowne.