Bài giảng Visual FoxPro - Chương 3 doc

10 464 4
Bài giảng Visual FoxPro - Chương 3 doc

Đang tải... (xem toàn văn)

Thông tin tài liệu

Bài giảng Visual FoxPro Bộ môn Tin học – ĐHTN http://www.ebook.edu.vn 38 CHƯƠNG III: SẮP XẾP, TÌM KIẾM, THỐNG KÊ I. Sắp xếp. Dữ liệu trong một bảng có thể được sắp xếp theo một tiêu chuẩn nào đó, phục vụ cho việc khai thác thông tin. 1. Sắp xếp theo chỉ mục a. Khái niệm về chỉ mục Ta đã biết mỗi bảng dữ liệu chứa các bản ghi và mỗi bản ghi đều được đánh số hiệu theo số thứ tự từ 1 đến n. Ví dụ: bảng NHANVIEN.DBF có dạng sau: Khi xử lý thông tin trong bảng dữ liệu, các mẫu tin có thể được truy xuất theo số hiệu. Ví dụ: use NHANVIEN ↵ list ↵ Kết quả in ra sẽ như sau: Bài giảng Visual FoxPro Bộ môn Tin học – ĐHTN http://www.ebook.edu.vn 39 Sắp xếp bảng dữ liệu theo chỉ mục là tạo ra một file mới (có phần mở rộng mặc định là .IDX) chỉ có hai trường: trường khoá sắp xếp và trường số hiệu bản ghi. Thứ tự của bản ghi ở đây là thứ tự sắp xếp. Ví dụ: File chỉ mục của bảng nhanvien theo thứ tự của năm làm việc: Lúc này, khi truy xuất dữ liệu của bảng, thứ tự của các bản ghi là thứ tự được quy định trong file chỉ mục này. 2. Lập chỉ mục IDX cho bảng dữ liệu Cú pháp: INDEX ON <bthức khoá> TO <tên file idx>[FOR<bthức logic>] [UNIQU E ] Chức năng: Lệnh sắp xếp file dữ liệu theo chiều tăng dần của <Bthức khoá> của các bản ghi thoả mãn <Bthức logic> sau FOR, mặc định là tất cả các bản ghi. Nếu có từ khoá [UNIQUE] thì các bản ghi nào có <Bthức khoá> trùng nhau sẽ bị bỏ qua trên file chỉ mục. Ví dụ 1: Hiển thị theo thứ tự tăng dần của namlv của các nhân viên. use NHANVI E N ↵ index on NAMLV to CMNAMLV list Chú ý: Lệnh luôn sắp xếp theo thứ tự tăng dần của <bthức khoá>, do vậy khi lựa chọn <bthức khoá> thì phải chọn cho phù hợp. Ví dụ 1: Hiển thị theo thứ tự giảm dần của namlv của các nhân viên. use NHANVI E N ↵ index on -NAMLV to CMNAMLVG list Ví dụ 2: Hiển thị theo thứ tự giảm dần của ngaysinh. use NHANVIEN index on date()-NGAYSINH to CMNSINHG list Bài giảng Visual FoxPro Bộ môn Tin học – ĐHTN http://www.ebook.edu.vn 40 3. Một số lệnh liên quan • SET INDEX TO <file chỉ mục>: Dùng để mở file chỉ mục sau khi đã mở một bảng dữ liệu. • SET INDEX TO: Dùng để đóng file chỉ mục. • REINDEX: Dùng để cập nhật file chỉ mục. II. Tìm kiếm Tìm kiếm tuần tự a. Lệnh Locate: Cú pháp: LOCATE [<phạm vi>] FOR<bthức logic> [WHILE<bthức logic>] Chức năng: Lệnh sẽ duyệt tuần tự các bàn ghi trong bảng dữ liệu và tìm đến bản ghi đầu tiên trong <phạm vi> thoả mãn điều kiện của <bthức logic>. Nếu tìm được, hàm FOUND() sẽ cho giá trị .T., hàm EOF() có giá trị .F. Ví dụ: Tìm nhân viên đầu tiên trong bảng dữ liệu sinh năm 1970 trong bảng nhanvien use NHANVIEN Locate for year(NGAYSINH) = 1970 Display b. Lệnh continue Cú pháp : CONTINUE Chức năng : Theo sau lệnh LOCATE, dùng để tìm bản ghi kế tiếp sau thỏa mãn điều kiện đã nêu. Ví dụ: Tìm 2 nhân viên đầu tiên sinh năm 1970 use NHANVIEN locate for year ( NGAY SINH) = 1970 display continue display Tìm kiếm sau khi đã lập chỉ mục Cú pháp : SEEK <biểu thức> Chức năng : sau khi đã lập chỉ mục theo <bthức khóa> đề tìm bản ghi nào thỏa mãn một điều kiện dựa vào <bthức khóa> Ta sử dụng lệnh SEEK theo sau là <giá trị> của biểu điều kiện cần tìm. nếu tìm thấy thì Bài giảng Visual FoxPro Bộ môn Tin học – ĐHTN http://www.ebook.edu.vn 41 hàm FOUND() có giá trị .T. và hàm EOF () có giá trị .F. Ví dụ: 1. Sắp xếp theo thứ tự tăng dần của Họ Tên, tìm nhân viên có tên “Nguyen Van AN”. use NHANVIEN index on upper(HOTEN) to CMHOTEN seek “Nguyen Van An” disp 2. Sắp xếp theo thứ tự giảm dần của NAMLV, tìm nhân viên có năm làm việc 1981. use NHANVIEN index on - NAMLV to CMNAMLVG list seek -1981 disp III. THỐNG KÊ Đếm số lượng bản ghi Cú pháp: COUNT [<phạm vi>][FOR<btlogic>] [WHILE<btlogic>] [TO<biến nhớ>] Chức năng :lệnh dùng để đếm số mẫu tin trong bảng dữ liệu hiện hành thỏa mãn điều kiện các <bthức logic> nằm trong phạm vi được chỉ ra. Kết quả được đưa ra màn hình hay đưa vào <biến nhớ> nếu có TO. Ví dụ: Cho biết có bao nhiêu nhân viên có NAMLV là 1980 use NHANVIEN count for NAMLV = 1980 to songuoi ?’ có songuoi: ‘, songuoi, ‘ làm việc năm 1980’ Tính tổng giá trị các trường kiểu số Cú pháp: SUM [<phạm vi>] [<dsách bt>] [TO <ds biến>] [FOR <bt logic>] [WHILE <btlogic>] Chức năng : Lệnh sẽ lấy tổng theo các biểu thức được xây dựng dựa trên các trường kiểu số, của các bản ghi trong bảng dữ liệu; nằm trong <phạm vi> và thỏa mãn điều kiện của các <bthức logic>. Nếu không có <ds biểu thức> thì các trường kiểu số đều được lấ y tổng. Mặc định, kết quả được đưa ra màn hình; nếu có TO <dsbiến> thì kết quả của các <biểu thức> sẽ được đưa vào các <biến> tương ứng. Bài giảng Visual FoxPro Bộ môn Tin học – ĐHTN http://www.ebook.edu.vn 42 Chú ý : Phải tương ứng 1-1 giữa <ds biểu thức> và <ds biến>. Ví dụ: Dựa vào bảng NHANVIEN, cho biết tổng LUONG phải trả và tổng PHUCAP là bao nhiêu. use NHANVIEN sum LUONG, PHUCAP to tongluong, tongpc ?’ tong luong la:’ , tong luong ?’ tong phu cap la:’ , tongpc Tính trung bình cộng các trường kiểu số Cú pháp: AVERAGE [<phạm vi>] [<ds biểu thức>] [TO <ds biến >] [FOR <bt logic>][WHILE <bt logic>] Chức năng : giống như lệnh SUM ở trên nhưng sau khi lấy tổng, lệnh sẽ lấy giá trị đó đem chia cho tổng số bản ghi tham gia vào câu lệnh. Ví dụ: dựa vào bảng NHANVIEN, cho biết trung bình mỗi nhân viên nhận được bao nhiêu LUONG, PHU CAP. use NHANVIEN average LUONG, PHUCAP to tbluong, tbphucap ?’ trung binh luong:’ , tbluong ?’ trung bình phu cap:’ , tbphucap Tính tổng các trường số theo nhóm CÚ PHÁP: TOTAL ON <BT KHÓA> TO <TÊN BảNG MớI.DBF>[<PHạM VI>] [FIELD <dstrường>][FOR <biêủ thức L>][WHILE < biêủ thức L>] Chức năng: Lệnh sẽ cộng dồn các trường kiểu số theo từng nhóm bản ghi có <bt khóa> giống nhau và đưa vào bảng mới có tên được chỉ ra ở <tên bảng .DBF>. Mặc định thì tất cả các trường kiểu số đều được cộng dồn, nếu có FIELDS <danh sách trường> thì ch ỉ có các trường liệt kê mới được cộng. Lệnh chỉ tác động đến các bàn ghi nằm trong (phạm vi) và thoả mãn điều kiện đi sau các mệnh đề FOR, WHILE. Chú ý: Trước khi dùng lệnh này, bảng dữ liệu phải định sắp xếp theo kho á . Ví dụ: Dựa vào bảng VATTV, hãy thống kê xem mỗi mặt hàng đã xuất hay nhập một số lượng là bao nhiêu. use VATTV index on MAXN + MAVT to CMTK total on MAXN + MAVT to THONGKE fields SOLUONG use THONGKE ? ‘chi tiet la :’ Bài giảng Visual FoxPro Bộ môn Tin học – ĐHTN http://www.ebook.edu.vn 43 list MAXN, MAVT, SOLUONG, DONGIA Giả sử bảng VATTU sau khi sắp xếp là: Kết quả của bảng THONGKE.DBF là: IV. Sắp xếp Lệnh INDEX ON <BieuThuc> <TO IDXFile | TAG TagName> [ASCENDING | DESCENDING] • Với các bảng dữ liệu, có thể sắp xếp các bản ghi theo một thứ tự (tiêu chuẩn nào đó) nào đó. Lệnh INDEX cho phép tạo ra các tiêu chuẩn sắp xếp (chỉ mục - index) đối với bảng, tham số <BieuThuc> chính là tiêu chuẩn sắp xếp. • Tùy chọn TO IDXFile cho phép t ạo ra file chỉ mục dạng IDX, với tên file là IDXFile và phần mở rộng là IDX (tạo chỉ mục dạng này sẽ không thể chọn được chiều DESCENDING và mỗi file chỉ xác định 1 tiêu chuẩn sắp xếp). • Tùy chọn TAG TagName cho phép tao ra một chỉ mục có tên là TagName trong file chỉ mục kết hợp (file chỉ mục này có tên trùng với tên bảng, và phần mở rộng là CDX). Ví dụ USE HOSOSV INDEX ON masv TO masvidx BROW Bài giảng Visual FoxPro Bộ môn Tin học – ĐHTN http://www.ebook.edu.vn 44 INDEX ON hoten TAG hoten2 DESCENDING BROW Lệnh SET ORDER TO [IDXFile | TagName] Lệnh này cho phép thay đổi tiêu chuẩn sắp xếp của bảng. Trong đó: IDXFile - tên file dạng IDX (đã tạo bằng lệnh INDEX trước đó); TagName - Tên chỉ mục trong file kết hợp (file dạng CDX). Ví dụ USE HOSOSV SET ORDER TO Masv BROW SET ORDER TO Hoten2 BROW SET ORDER TO masvidx SET ORDER TO (không tham số) dùng để bỏ việc sắp xếp (trở lại thứ tự nhập). V. Lọc Lệnh SET FILTER TO <BieuThucLogic> Để hạn chế số lượng các bản ghi tham gia vào quá trình xử lý, các bản ghi được lọc từ bảng dữ liệu; thỏa mãn điều kiện cho trước. Trong đó BieuThucLogic là tiêu chuẩn để lọc. Ví dụ USE HOSOSV SET FILTER TO malop=”3A-01” BROWSE SET FILTER TO ngaysinh=date() BROWS TITLE “Sinh nhat: ”+ DTOC(date()) Sau lệnh lọc thì các lệnh tiếp sau chỉ có tác dụng với các bản ghi đã được lọc. Hủy bỏ việc lọc dữ liệu: SET FILTER TO ↵ Ví dụ: Chỉ hiển thị những nhân viên nữ: SET FILTER TO ! G I O I T I N H ↵ L I S T ↵ Bài giảng Visual FoxPro Bộ môn Tin học – ĐHTN http://www.ebook.edu.vn 45 VI. Làm việc với nhiều bảng Vùng làm việc Visual Foxpro cho phép mở nhiều bảng dữ liệu đồng thời, mỗi bảng trên một vùng làm việc (WorkArea) nhất định. Visual Foxpro cho phép mở tối đa là 255 vùng làm việc đồng thời, mỗi vùng được xác định qua tên hoặc số hiệu vùng. Lệnh SELECT <n | TableName| AliasName > Lệnh này cho phép chọn vùng làm việc, trong đó: n là số thứ tự của vùng cần chuyển đến; TableName là tên bảng hoặc aliasname. Ví dụ SELECT A USE DMLOP ALIAS LOP SELECT B USE HOSOSV ALIAS SINHVIEN SELECT 0 USE DIEM Trong ví dụ trên đã tạo ra 3 vùng làm việc: Vùng 1 (hoặc vùng A hoặc LOP), Vùng 2 (hoặc vùng B hoặc SINHVIEN), Vùng 3 (hoặc DIEM). Lưu ý: Khi chọn n=0 thì Visual Foxpro sẽ tự động chọn vùng cao nhất còn trống. Có thể xem danh sách các tables đã được mở: Menu Window/Data session Liên kết giữa các bảng Visual Foxpro cho phép đặt liên kết (mối “quan hệ”) giữa các bảng để có thể tạo ra một bảng to hơn từ các bảng con. • Menu Window/Data sesion. • Chọn các tables -> Click vào Relations. Lệnh SET RELATION TO <BieuThuc> INTO <n| TableName | AliasName> Lệnh này cho phép đặt quan hệ từ bảng hiện thời vào bảng được mở ở vùng n (hoặc TableName hoặc AliasName), trong đó BieuThuc là tiêu chuẩn đế đặt quan hệ. Lưu ý: Bảng được mở trong vùng AliasName phải được index theo BieuThuc này rồi. Ví dụ: SELECT A USE DMLOP ALIAS LOP Bài giảng Visual FoxPro Bộ môn Tin học – ĐHTN http://www.ebook.edu.vn 46 INDE ON ma TO malopidx BROW SELECT B USE HOSOSV ALIAS SINHVIEN SET RELATION TO malop INTO LOP BROW (trong ví dụ này bảng DMLOP gọi là bảng cha, bảng HOSOSV gọi là bảng con) Khi con trỏ di chuyển trong bảng con thì con trỏ trong bảng cha cũng thay đổi tương ứng. Một số hàm và lệnh khác Một số hàm Hàm RECNO() Trả về số hiệu bản ghi hiện thời Hàm RECCOUNT() Trả về số bản ghi hiện có của bảng Hàm ALIAS() Định danh của vùng hiện thời Hàm DBF() Tên file DBF Hàm EOF(), BOF() Trạng thái TRUE nếu con trỏ vượt quá Beginning và End Mộ t số lệnh khác • LIST [Scope] [Field <FieldName List>] [FOR <BieuthucLogic>] • COUNT [ TO VarName ] [ FOR expL1 ] [ While expL2 ] [ Phạm vi ] • AVERAGE expN TO VarName [ FOR expL1 ] [ While expL2 ] [ Phạm vi ] • SUM <Danh sách biểu thức> TO <Danh sỏch biến số> • FOR expL1 ] [ While expL2 ] [ Phạm vi ] • CALC <Danh sách biểu thức> TO <Danh sỏch biến số> • [ FOR expL1 ] [ While expL2 ] [ Phạm vi ] • max(expr), min(expr), aver(expN) • COPY TO <FileName> [ FOR expL1 ] [ While expL2 ] [ Phạm vi ] • COPY STRUCTURE TO <FileName> [EXTENDED] • APPEND FROM <FileName> [ FOR <ExpL>] Một số hàm thông dụng Các hàm về ngày tháng D A T E () : trả về ngày, tháng, năm hiện tại của hệ thống. Thứ tự kết quả hiển thị của lệnh này phụ thuộc vào lệnh SET DATE. SET DATE F R E N C H DA TE () Ngày hiện hành của hệ thống sẽ được hiển thị theo thứ tự ngày, tháng, năm. Bài giảng Visual FoxPro Bộ môn Tin học – ĐHTN http://www.ebook.edu.vn 47 Y E A R ( < BT H ứC D A T E > ) : trả về năm của <BTHứC DATE>. Ví dụ: YEAR(DATE()) → trả về năm hiện hành của hệ thống. M O N T H( < BT H ứC D A T E > ) : trả về năm của < BT H ứC D A T E > . Các hàm về chuỗi LE N ( < BT H ứC C>): trả về chiều dài của <Bthuc C>, tính bằng Byte. Chuỗi rỗng có chiều dài là 1. L E F T ( < BT H ứC C>, < N > ) : trích ra một chuỗi gồm n kí tự của <BTHứC C>, tính từ bên trái sang. Ví dụ: ? LEFT ( " N G UY E N VAN AN " , 6) → CHO KếT QUả LÀ " N G UY E N " . R IGH T ( < BT H ứC C>, < N > ) : trích ra một chuỗi gồm n kí tự của <BTHứC C>, tính từ bên phải sang. SUBSTR ( < BT H ứC C>, <N1>, < N 2 > ): trích ra chuỗi con của <BTHứC C>, từ vị trí <N1> và gồm <N2> kí tự. Ví dụ: ? SUBSTR ( " N G UY E N VAN AN " , 8, 3 " KếT QUả CHO CHUỗI " VAN " . ALLTRIM ( < BT H ứC C>): cho kết quả là một chuỗi sau khi đã loại bỏ các kí tự trắng ở hai bên của <BTHứC C>. Ví dụ: ? A LLT R I M ( " N G UY E N VAN AN " ) → " N G UY E N VAN AN " U PP E R ( < BT H ứC C > ) : kết quả là chuỗi in hoa của <BTHứC C>. Ví dụ: ?UPPER ( " N g uy e n Van AN " ) → " N G UY E N VAN AN " LOWER < BT H ứC C>: kết quả là chuỗi in thường của <BTHứC C>. Các hàm số học A S B ( X ) : Trị tuyệt đối của X. I N T ( X ) : trả về phần nguyên của X. R OU N D( X , < N > ) : Làm tròn X với N số lẻ. S I N ( X ) : cho giá trị SIN X COS ( X ) : cho giá trị COS X. . Bài giảng Visual FoxPro Bộ môn Tin học – ĐHTN http://www.ebook.edu.vn 38 CHƯƠNG III: SẮP XẾP, TÌM KIẾM, THỐNG KÊ I. Sắp xếp. Dữ. NHANVI E N ↵ index on -NAMLV to CMNAMLVG list Ví dụ 2: Hiển thị theo thứ tự giảm dần của ngaysinh. use NHANVIEN index on date()-NGAYSINH to CMNSINHG list Bài giảng Visual FoxPro Bộ môn Tin. ! G I O I T I N H ↵ L I S T ↵ Bài giảng Visual FoxPro Bộ môn Tin học – ĐHTN http://www.ebook.edu.vn 45 VI. Làm việc với nhiều bảng Vùng làm việc Visual Foxpro cho phép mở nhiều bảng dữ

Ngày đăng: 05/08/2014, 19:21