Tải bản đầy đủ (.pdf) (10 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (294.74 KB, 10 trang )

Bài giảng Visual FoxPro
Bộ môn Tin học – ĐHTN 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 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 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 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 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 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 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 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 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 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.

×