Thứ Năm, 23 tháng 6, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 4 - Dùng tiêu chí trong câu truy vấn

James Perry, Richard Newmark


Chương 4
Tạo và dùng câu truy vấn


Dùng tiêu chí trong câu truy vấn


Tâm điểm của câu truy vấn là tập hợp tiêu chí để lọc kết quả tập động dynaset, chỉ cho phép những dòng mà giá trị cột của chúng khớp với tiêu chí đã đề ra. Các tiêu chí được đặt vào một hay nhiều dòng bên dưới cột mà chúng áp dụng trong lưới QBE. Các tiêu chí có thể là hằng đơn giản, chẳng hạn “F” để lọc các dòng nhân viên nữ, hay có thể là những biểu thức phức tạp cho kết quả có cùng kiểu dữ liệu với cột mà chúng áp đặt. Mọi tiêu chí đều có cùng dạng. Chúng gồm một hay nhiều toán hạng, có thể là hằng (hằng chuỗi, hằng số, hay thời điểm), các danh hiệu như tên cột hay hàm Access, cùng các toán tử toán học và logic (+, -, *, /, And, Or, Not, …). Công thức tiêu chí trả về kết quả là đúng hay sai khi áp dụng vào từng bản ghi trong bảng hay trong tổ hợp nhiều bảng có quan hệ với nhau. Tập động dynaset của truy vấn chỉ hiển thị những bản ghi mà kết quả tiêu chí là đúng.

Toán hạng hằng trong các tiêu chí có thể là văn bản. Nếu bạn có văn bản trong biểu thức, chúng phải được bao bằng cặp nháy kép. Nếu bạn quên dấu nháy kép, Access sẽ tự động bổ sung (ngoại trừ một vài trường hợp kỳ dị). Toán hạng hằng có thể là số như 67.79 hay 43227. Không được có dấu phân cách trên các toán hạng số. Cặp dấu # cần bao quanh giá trị thời điểm. Chẳng hạn, #12/14/2011# là cách viết hằng thời điểm. True, False, và Null là các toán hạng hằng đặc biệt. Hai hằng đầu là hiển nhiên, nhưng Null có thể không. Null xuất hiện trong tiêu chí nghĩa là trường mà nó xuất hiện bên dưới phải trống mới xuất hiện trong tập động dynaset. Bạn có thể muốn biết những bản ghi nhân viên nào chưa có ngày sinh, chẳng hạn. Hay bạn muốn biết những hóa đơn nào chưa có giá trị trong cột InvoiceID.

Danh hiệu là tên trường bảng xuất hiện trong câu truy vấn. Bất kỳ khi nào bạn dùng danh hiệu trong tiêu chí, hãy luôn bao chúng bằng cặp móc vuông. Chẳng hạn, hãy dùng >[OnHand] để xác định nếu cột lớn hơn giá trị của trường OnHand hay không. Việc bỏ qua cặp móc vuông có thể làm Access hiểu lầm hoặc cho kết quả sai.

Các truy vấn chứa điều kiện sẽ rất hữu ích. Điều kiện là cách bạn qui định miền giá trị, hay giá trị nhỏ nhất và lớn nhất, cho một trường. Chẳng hạn, công ty thu mua cà phê đang đặt mua cà phê và trà nhiều hơn khả năng cung ứng của các trang trại trên toàn thế giới. Một trong những câu hỏi quan trọng mà công ty thu mua phải trả lời là những sản phẩm nào được đặt mua sau (back-ordered). Trong hệ thống bảng của The Coffee Merchant, một sản phẩm sẽ được đặt mua sau nếu trường OnHand trong tblInventory là âm. Để quyết định mua một cách thông minh, công ty thu mua cần biết mã sản phẩm, tên sản phẩm, và giá trị đặt mua sau. Từ danh sách đó, nhân viên thu mua có thể đặt mua đúng số lượng và kiểu sản phẩm từ nhiều nhà cung ứng khác nhau.

Để trả lời cho nhân viên thu mua về số lượng hiện có, ta phải tạo một truy vấn lên bảng tblInventory. Ta sẽ dùng một toán tử đặc biệt gọi là toán tử so sánh để tạo tiêu chí chọn trong câu truy vấn mới. Toán tử so sánh (comparison operator) là một ký hiệu đặc biệt nhằm so sánh hai giá trị rồi trả về kết quả là đúng true hay sai false. Các toán tử so sánh được trình bày ở Hình 4.20.

Hình 4.20 Các toán tử so sánh.

BÀI TẬP 4.9: TẠO MỘT TRUY VẤN DÙNG TOÁN TỬ SO SÁNH ĐỂ LỌC CÁC DÒNG

1. Kích CREATE tab, kích Query Design, rồi kích kép tblInventory trong hộp thoại Show Table. Kích nút Close trong hộp thoại Show Table.

2. Kích kép các trường sau trong khung bảng để thêm chúng, từ trái sang phải, vào dòng Field thuộc lưới QBE: mã tồn kho InventoryID, tên mặt hàng ItemName, và số lượng hiện có UnitsOnHand.

3. Kích dòng Sort bên dưới cột UnitsOnHand, kích mũi tên sổ xuống, rồi kích Descending.

4. Kích dòng Criteria trên cùng bên dưới cột UnitsOnHand rồi gõ <0 (ký hiệu nhỏ hơn theo sau là số không).

5. Kích View trong nhóm Result thuộc tab ngữ cảnh DESIGN để hiển thị tập động dynaset. Di chuyển chuột đến đường phân cách giữa các tên cột ItemName và UnitsOnHand. Khi nó chuyển thành mũi tên hai đầu, kích kép để mở rộng cột ItemName theo độ rộng tối ưu. Hình 4.21 hiển thị thiết kế truy vấn và tập động dynaset kết quả. Màn hình của bạn có thể được bố trí khác, nhưng tập động dynaset cần giống các dòng trong hình.

Hình 4.21 Lọc dòng bằng toán tử so sánh.

6. Sau khi quan sát kết quả, kích phải datasheet tab rồi kích Close All. Kích No khi được hỏi bạn muốn lưu các thay đổi trên câu truy vấn không.

Ký tự thay thế (wildcard) cho phép bạn tìm thông tin khi bạn không chắc nhớ đầy đủ nội dung của trường văn bản. Được dùng với toán tử Like (xem Hình 4.20), ký tự thay thế định nghĩa vị trí mà có thể chứa một ký tự hoặc 0 hay nhiều ký tự trong một mẫu để so khớp chuỗi văn bản. Hình 4.22 trình bày ba ký tự thay thế có thể dùng trong Access. Sau đây là một ví dụ bạn có thể dùng chúng. Giả sử bạn muốn kiểm tra trong kho của The Coffee Merchant có thức uống nào có tên chứa từ chocolate hay không – chẳng hạn, Dutch Chocolate. Bạn quan tâm đến số lượng hiện có. Bạn có thể dùng ký tự thay thế * (dấu hoa thị) và một phần từ là choc để trả về bất kỳ thức uống nào mà trường tên Name chứa từ choc trong đó.

Hình 4.22 Các ký tự thay thế.

Câu truy vấn được mô tả ở trên bao gồm một bảng là tblInventory. Tiêu chí lọc là biểu thức *choc*, chứa hai ký tự thay thế dấu hoa thị ở hai đầu chuỗi bộ phận. Hãy đặt tiêu chí này vào dòng Criteria ngay dưới cột ItemName ở lưới QBE. (Sau khi bạn gõ biểu thức trên, Access sẽ tự động bao nó bằng cặp ngoặc kép và thêm đằng trước từ Like.) Dấu hoa thị đứng trước choc cho biết từ, ngữ, hay chuỗi ký tự bất kỳ có thể xuất hiện trước nó – hoặc không có gì. Tương tự, dấu hoa thị đứng sau choc cho biết ký tự bất kỳ có thể xuất hiện sau nó – hoặc không có gì. Nghĩa là, tiêu chí tìm yêu cầu dòng bất kỳ phải chứa từ choc đâu đó trong tên. Hình 4.23 hiển thị câu truy vấn và tập động dynaset kết quả.

Hình 4.23 Câu truy vấn dùng từ thay thế trong tiêu chí của nó.

Một số toán tử khác hữu ích cho việc tạo tiêu chí chọn là các toán tử logic (logical operators). Toán tử logic cho phép ràng buộc hai tiêu chí so sánh hay có ký tự thay thế. Có một số toán tử logic, nhưng những toán tử thường dùng nhất là AND, OR, và NOT. Dùng toán tử AND, bạn có thể qui định điều kiện trong đó cả hai tiêu chí phải thỏa. Chẳng hạn, giả sử bạn muốn xem xét các hóa đơn được lập trong tuần đầu của tháng 11/2011. Một nhân viên tạm thời đã được giao xử lý các hóa đơn trong tuần đó, và bạn biết rằng một số hóa đơn bị xử lý sai. Bạn có thể dùng toán tử AND để giới hạn miền giá trị của thời điểm lập hóa đơn. Cụ thể, bạn viết biểu thức tiêu chí sau

>= #11/1/2011# And <= #11/7/2011#

vào dòng Criteria bên dưới InvoiceDate trong lưới QBE. Tiêu chí chọn này qui định miền giá trị các thời điểm lập hóa đơn cần thỏa. Miền giá trị bao gồm các thời điểm lớn hơn hay bằng ngày 1/11 /2011 và (đồng thời) nhỏ hơn hay bằng ngày 7/11/2011. Như vậy, tiêu chí giới hạn các dòng từ bảng hóa đơn Invoice về những hóa đơn được lập trong tuần đầu.

Lúc nào cũng dùng dấu # để bao thời điểm để Access không nhầm với biểu thức số học. Một cách tương đương và đơn giản hơn tiêu chí ở trên là dùng toán tử so sánh Between:

Between #11/1/2011# And #11/7/2011#

Thời điểm bất kỳ ở giữa hay khớp với hai thời điểm đó thì thỏa tiêu chí.

Không có nhận xét nào:

Đăng nhận xét