Tải bản đầy đủ (.doc) (78 trang)

De cuong th fox

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 (1.71 MB, 78 trang )

Bài tập 1 : Các thao tác ban đầu với tệp CSDL
1. Tạo tệp CSDL :
Dùng lệnh: CREA LUONG
Tạo tệp LUONG có cấu trúc nh sau:
Fields name Type Width DEC
HODEM C 15
TEN C 7
DONVI C 4
LUONG N 8
THUONG N 8
PHUCAP N 6
TAMUNG N 8
Sau khi khai báo xong, ấn CTRL+W để ghi lại
Trả lời Y khi máy hỏi :
Input data records now(Y/N)?
Vào 10 bản ghi xong ấn CTRL+W để ghi lại
2. Xem thông tin:
Gõ lệnh: LIST
- Nếu muốn xem danh sách tất cả các cán bộ ở phòng kế hoạch (KH) bằng
lệnh:
DISPLAY ALL FOR DONVI=KH
- Nếu vào tròng DONVI không thống nhất:Kh,kH
Ta dùng lệnh đổi thành chữ hoa: UPPER( ).
DISPLAY ALL FOR UPPER(DONVI)=KH
3. Sửa cấu trúc:
- Bổ sung thêm cột CONLAI để tính số tiền thực nhận :
MODI STRU
Đa vệt sáng xuống dới và bổ sung thêm trờng còn lại
CON LAI N 8 0
-Thay đổi đơn vị trờng THUONG lên trên trờng PHUCAP bằng cách đa vệt sáng
đến cột THUONG ấn đồng thời CTRL+PgUp


(ấn Ctrl để ghi lại)
- Để kiểm tra lại hãy dùng lệnh: LIST
- Sao chép cấu trúc tệp đang mở:
COPY STRU TO LUU
Tệp LUU.DBF đã đợc tạo ra có cấu trúc giống nh tệp LUONG.DBF.
4. Dùng kỹ thuật sao luu cấu trúc để thêm một tr ờng thành tiền
USE luong
list
copy stru exte to luong2
use luong2
disp stru
disp all
appe blan
1
repl field_name with 'ttien'
repl field_type with 'N'
repl field_len with '10'
repl field_len with 10
repl field_dec with 2
use
creat luong3 from luong2
appe from luong
use tkiem3
list
repl all ttien with luong * 1.5
disp all
4. Sửa lại nội dung một bản ghi:
Gõ lệnh : GO 5
EDIT
Hoặc BROWSE

(Sau khi sửa xong hãy ấn Ctrl+W để ghi lại)
5. Đóng tệp và kết thúc công việc.
Gõ lệnh : USE
Hoặc : ClOSE DATABASES
ClOSE ALL
6. Mở tệp và bổ sung bản ghi mới:
Gõ lệnh USE LUONG
- Sau đó bổ sung dùng lệnh:
APPE
Khi đó màn hình hiện ra cho ta nhập nội dung bản ghi mới muốn thêm vào cuối
tệp DBF.
(Sau khi bổ sung xong ấn CTRL+Wđể ghi lại)
7.Chèn thêm bản ghi mới:
- Gỉả sử ta muốn chèn một bản ghi mới sau bản ghi thứ 6. Hãy ra lệnh:
GO 6
INSERT
Khi đó màn hình hiện ra cho ta nhập nội dung bản ghi mới muốn thêm.
- Nếu muốn chèn trớc bản ghi số 6 một bản ghi mới,ta gõ lệnh:
GO 6
INSERT BEFO
Khi đó màn hình hiện ra cho ta nhập nội dung bản ghi mới muốn thêm.
8- Hiện thị ra màn hình LUONG nhỏ nhất
USE luong
list
index on luong to csluong
disp sotien
2
9- Hiện thị ra màn hình LUONG lớn nhất
index on -luong to cslg
disp sotien

8.Sửa lại nội dung nhiều bản ghi:
Ta tính lại tiền thởng theo chỉ tiêu sau:
- Lơng dới 200.000 tiền thởng = 65% lơng
- Lơng từ 200.000 đến dới 300.000 tiền thởng = 50% lơng
- Lơng từ 300.000 đến dới 400.000 tiền thởng = 45%lơng
- Lơng từ 400.000 trở lên tiền thởng = 40% lơng
Các câu lệnh sẽ đợc thực hiện nh sau:
REPL ALL THUONG WITH 65/100*LUONG FOR LUONG < 200.000
REPL ALL THUONG WITH 50/100* LUONG FOR LUONG >= 200.000
AND LUONG< 300.000
REPL ALL THUONG WITH 45/100*LUONG FOR LUONG >=300.000
AND LUONG <400.000
REPL ALL THUONG WITH 40/100* LUONG FOR LUONG >= 400.000
9. Tổng số tiền thực lĩnh của từng cán bộ:
REPL ALL CONLAI With (LUONG+THUONG+PHUCAP-TAMUNG)
Kiểm tra lại dùng lệnh : LIST TEN,CONLAI
10. Xoá 1 bản ghi:
-Khi muốn xoá bản ghi thứ 10 , ta gõ lệnh : GO 10
Delete
- Khi muốn xoá bản ghi thứ 8 , ta gõ lệnh : GO 8
Delete
- Khi muốn phục hồi lại bản ghi thứ 10 , ta gõ lệnh : RECA RECORD 10
- Khi ta muốn xoá hẳn khỏi DBF và không thể phục hồi lại đợc nữa, ta gõ lệnh :
PACK
11. Sao chép bản ghi :
- Khi ta muốn lấy ra danh sách riêng của phòng kế hoạch, ta gõ lệnh sau :
COPY TO KH FOR UPPER(DONVI)= KH
Khi đó ta có một tệp có tên là KH.DBF đã đợc tạo ra để lu trữ lơng của phòng kế
hoạch.
3

Bài tập 2 : Các thao tác ban đầu với tệp CSDL ( tiếp )
A. sắp xếp và tìm kiếm dữ liệu
1. Các yêu cầu của việc sắp xếp
Trớc khi sắp xếp dữ liệu, phải xác định sắp xếp theo trờng nào, theo thứ tự
tăng hay giảm dần, trờng nào u tiên sắp xếp trớc, có phân biệt chữ hoa hay chữ th-
ờng không.
2. Sắp xếp bằng lệnh SORT
Cú pháp:
SORT TO <Tệp mới > ON <Trờng 1> [/A][/C][/D]
[,< Trờng 2> [/A][/C][/D]
. . . . . . . . . .
[,< Trờng n> [/A][/C][/D]
[ <Phạm vi>] [FOR <Bt logic 1> | WHILE <Bt logic 2>]
[FIELDS <DS Trờng>]
- Lệnh SORT sắp xếp các bản ghi theo các trờng đợc chỉ thị sau ON và ghi ra
tệp có tên <Tệp mới>.
- Các chỉ tiêu sắp xếp:
/A ( Ascending) : Sắp xếp theo thứ tự tăng dần.
/D ( Descending) : Sắp xếp theo thứ tự giảm dần.
/C Để xác định không phân biệt chữ hoa hay chữ thờng đối với trờng đợc
sắp xếp có kiểu dữ liệu là ký tự.
Nếu không có /A /D thì FOXPRO hiểu là sắp xếp theo thứ tự tăng dần. Nếu
có hai chỉ tiêu cùng một trờng thì viết /AC hoặc /DC.
Ví dụ:
USE HSLUONG
SORT TO SAPXEP ON HOTEN /AC
USE SAPXEP
BROW
3. Sắp xếp bằng lệnh INDEX (tệp chỉ số)
*) Cú pháp:

INDEX ON <Biểu thức khoá > TO < Tên tệp chi số> [FOR <BT
logic>]
[COMPACT][UNIQUE][ADDITIVE]
4
Ví dụ : Giả sử với tệp HSLUONG.DBF
USE HSLUONG
INDEX ON HOTEN TO CSTEN
LIST HOTEN,LUONG
DISP STATUS
INDEX ON LUONG TO CSLUONG ADDI
LIST HODEM, HOTEN, LUONG
DISP STATUS
- Muốn chuyển đến một tệp chỉ số không phải là tệp chỉ số hiện thời ta dùng lệnh:
SET ORDER TO <N>/ <Tên tệp chỉ số>
Ví dụ:
SET ORDER TO 2
Hoặc
SET ORDER TO CSLUONG
*) Mở tệp chỉ số sau khi đã mở tệp CSDL (DBF).
- Trong trờng hợp các tệp CSDL đã mở, ta mở các tệp chỉ số sau đó bằng lệnh:
Cú pháp:
SET INDEX TO <Danh sách tệp chỉ số>
Ví dụ:
USE HSLUONG
SET INDEX TO CSTEN, CSLUONG
DISPLAY ALL (Đã đợc sắp theo tên)
SET ORDER TO CSLUONG
DISPLAY ALL (Đã đợc sắp theo lơng)
- Khi không cần các tệp chỉ số nữa, ta nên đóng chúng lại bằng lệnh :
SET INDEX TO Hoặc CLOSE INDEX

*) Cập nhật tệp chỉ số
Trong quá trình khai thác CSDL có lúc ta không mở hết các tệp chỉ số của
nó. Điều đó dẫn đến tệp chỉ số đó không đợc thay đổi cho phù hợp với sự thay đổi
ở tệp CSDL đang mở. Vì vậy để cập nhật ta dùng lệnh sau:
REINDEX
Ví dụ:
USE HSLUONG
INDEX ON HOTEN TO CSTEN
CLOSE ALL
USE HSLUONG
APPEND
5
(Sau khi thêm các bản ghi thì tệp chỉ số CSTEN không đợc cập nhật)
CLOSE ALL
USE HOCSINH INDEX CSHOTEN
LIST ALL
REINDEX
LIST ALL
V. Tìm kiếm
1. Lệnh tìm kiếm tuần tự LOCATE
Cú pháp:
LOCATE [<Phạm vi>] [ FOR <Bt logic>]
Khi gặp lệnh này, FOXPRO sẽ lần lợt duyệt qua tệp CSDL đang mở để tìm
ra bản ghi đầu tiên trong <Phạm vi> thoả mãn <Bt logic>. Sau khi đã tìm đợc một
bản ghi thoả mãn <BT logic>, việc tìm kiếm tạm dừng lại để ta xử lý, ví dụ nh
hiển thị thông tin ra màn hình (DISPLAY), sửa đổi (CHANGE) . . . Việc tìm
kiếm chỉ đợc tiếp tục khi ta ra lệnh CONTINUE.
Nếu tìm thấy bản ghi thì hàm FOUND() cho giá trị .T.
Hàm RECONO() cho kết quả là số hiệu bản ghi vừa tìm thấy.
Nếu không tìm thấy bản ghi nào, LOCATE thông báo End of locate scope

và con trỏ bản ghi đợc chuyển đến vị trí kết thúc tệp EOF (End of File ) và lúc
này thì:
Hàm RECNO( ) cho giá trị bằng tổng số bản ghi của tệp CSDL cộng thêm
1.
Hàm EOF( ) cho giá trị .T.
Hàm FOUND( ) cho giá trị .F.
Ví dụ:
USE HSLUONG
LOCATE FOR DIACHI = NGHE AN
DISPLAY
CONTINUE
2. Tìm kiếm nhanh
Để FOXPRO có thể tìm kiếm nhanh theo thuật toán tìm kiếm nhị phân thì
tệp CSDL phải đợc sắp xếp chỉ số theo giá trị <khoá> tìm kiếm.
2.1. Lệnh tìm kiếm FIND
Cú pháp:
FIND <Biểu thức>
6
Lệnh này chỉ tìm kiếm thông tin trên tệp đã đợc sắp xếp theo chỉ số. Trong
đó <Biểu thức> có thể là biến có kết quả là một chuỗi ký tự, vì thế chuỗi ký tự
không cần đặt trong dấu nháy đơn, nháy kép.
Ví dụ : Giả sử tệp HSLUONG.DBF cần tìm trên tệp chỉ số đợc sắp xếp theo tên
Record # HODEM TEN DONVI
3 Phan thi Anh Tin hoc
2 Van duc Binh Ke hoach
1 Tran van Sa To chuc
4 Le Van Thuy Dao tao
Nếu ta ra lệnh:
SET EXACT OFF
FIND Thu

? HODEM, TEN, DONVI
Kết quả là : Le Van Thuy Dao tao
Nhng nếu ra lệnh:
SET EXACT ON
FIND Thu
? FOUND() kết quả là .F.
2.2. Lệnh tìm kiếm SEEK
Cú pháp:
SEEK <Biểu thức >
Lệnh này đa con trỏ bản ghi về bản ghi đầu tiên có giá trị khoá trùng với giá trị
của <biểu thức> viết sau SEEK.
Trong đó <Biểu thức > có thể là:
- Một hằng (số, chuỗi ):
Ví dụ: SEEK 230
SEEK Thu
- Một biến:
Ví dụ : A= Nghe an
SEEK A
- Một biểu thức số học:
Ví dụ : SEEK 25*5 + 4
- Một biểu thức ngày:
Ví dụ : SEEK Date( ) - 10
Chú ý: Lệnh SEEK khác với lệnh FIND
- Nếu < Biểu thức> là một biến thì không cần hàm & (Macro) ở phía trớc.
- Nếu <Biểu thức > là một chuỗi kí tự thì bắt buộc phải cho vào trong hai dấu
nháy đơn, hoặc nháy kép.
7
Ví dụ: USE HSLUONG
INDEX ON NGAYSINH TO NS
SEEK CTOD('01/01/90')

B. Các lệnh xử lý đặc biệt với dữ liệu kiểu số
1. Lệnh SUM
Cú pháp:
SUM [<Phạmvi>] [<DS biểu thức>] [TO <DS biến nhớ>] [FOR <Bt logic 1>/
WHILE <BT logic 2>]
Lệnh SUM tính tổng trên các bản ghi theo <DS biểu thức>. Danh sách biểu
thức là một dãy các biểu thức tính theo giá trị các trờng số, phân cách nhau bởi
dấu phẩy, mỗi biểu thức tơng xứng với một tổng.
Ví dụ : Tính tổng lơng
USE HSLUONG
SUM LUONG
Kết quả tính toán trung gian hiện lên màn hình hay không còn phụ thuộc
vào lệnh SET TALK ON/OFF (ngầm định là ON là cho hiện)
Ví dụ:
SET TALK OFF
USE HSLUONG
SUM LUONG, PHUCAP,LUONG+PHUCAP TO A1 , A2, A3
? A1, A2, A3 ,A1,A2,A3 kết quả sẽ hiện lên màn hình.
SET TALK ON
2. Lệnh TOTAL
Đối với những CSDL đã đợc sắp xếp theo một <biểu thức khoá> nào đó, các
bản ghi sẽ đợc xếp lại thành từng nhóm, trong đó hai bản ghi thuộc cùng một
nhóm là hai bản ghi có cùng giá trị <biểu thức khoá> sắp xếp. Khi đó ta có thể
cộng các trờng số của CSDL này theo từng nhóm nhờ lệnh:
TOTAL ON <Biểu thức khoá> TO <Tên tệp mới> [<Phạm vi>]
[FIELDS <DS trờng>] [ FOR <Bt logic 1>/ WHILE <Bt logic 2>]
Kết quả cộng đợc ghi sang một tệp CSDL mới có tên <tên tệp mới>. Tệp này
có cấu trúc nh tệp CSDL ban đầu, trong đó mỗi bản ghi tơng ứng với những tổng
tìm đợc của một nhóm. Những tổng này đợc ghi trên các trờng tơng ứng.
Ví dụ: Tính tổng LUONG, PHUCAP của các đơn vị trong tệp HSLUONG

USE HSLUONG
SORT ON DONVI /A TO SAPXEP
USE SAPXEP
8
TOTAL ON DONVI TO BAOCAO FIELD LUONG,PHUCAP
USE BAOCAO
LIST ALL
USE
3. Lệnh COUNT
Cú pháp :
COUNT [<Phạm vi>] [ TO <Biến nhớ>] [FOR <BT logic 1>/ WHILE <BT
logic 2]
- Lệnh này đếm số bản ghi nằm trong <Phạmvi> và đa vào <Biến nhớ>.
Ví dụ:
USE HSLUONG
COUNT TO A1 && tổng số cán bộ
? A1
COUNT TO B1 FOR DONVI = HC && đếm số cán bộ phòng HC
?B1
COUNT TO C1 FOR LUONG >= 390000
? C1
3. Lệnh AVERAGE
Cú pháp:
AVERAGE [<Phạmvi>] [<DS trờng>] [TO<DS biến>] [FOR <Bt logic
1>/WHILE <Bt logic 2>]
- Lệnh này tính trung bình cộng trên các bản ghi theo <Danh sách biểu thức>.
Các tuỳ chọn khác hoàn toàn giống lệnh SUM.
Ví dụ: Tính trung bình cộng của LUONG, PHUCAP, TUOI trong tệp
HSLUONG.DBF
USE HSLUONG

AVERAGE LUONG,PHUCAP,YEAR(DATE())-YAER(NGAYSINH) TO
x1,x2,x3
? Lơng TB= ,x1
? Phụ cấp TB =,x2
?Tuổi TB =,x3
Bài tập 3 : Làm việc với nhiều tệp cSDL
1. Xác định vùng làm việc
9
Thông thờng mỗi lần dùng lệnh USE <Tên tệp CSDL> thì chỉ có một tệp
CSDL đợc mở trong một vùng làm việc nhất định. Giả sử ta làm việc với nhiều tệp
CSDL thì làm thế nào?. FOXPRO cho phép mở một lúc tối đa 25 tệp DBF trên 25
vùng làm việc khác nhau. Các vùng làm việc hoàn toàn độc lập với nhau.
FOXPRO đánh số các vùng làm việc từ 0,1,2,. . . hoặc A, B, C, . . .
Khi không nói gì đến vùng làm việc thì FOXPRO đang làm việc ở vùng số 1.
Để chọn vùng làm việc ta thực hiện:
SELECT <n>
USE <File DBF >
Tại mỗi thời điểm chỉ có một vùng làm việc hiện hành, đó là vùng đợc chọn
sau cùng bằng lệnh SELECT.
Ví dụ:
SELECT 1
USE HSLUONG
SELECT 2
USE DONVI
Cứ nh vậy ta có thể mở 25 file trên 25 vùng làm việc khác nhau. Tại một
thời điểm chỉ có một vùng làm việc, vùng làm việc hiện thời là vùng SELECT cuối
cùng.
2. Đặt bí danh cho vùng làm việc
Ta có thể mở một tệp CSDL có kèm theo bí danh (để dễ nhớ ) theo hai cách
sau:

Cách 1:
SELECT n
USE <Tên tệp CSDL> [ALIAS <Bí danh>]
Cách 2:
USE <Tên tệp CSDL> [IN <Vùng làm việc>] [ALIAS <Bí danh>]
Ví dụ:
SELECT 1
USE HSLUONG ALIAS LUONG
Hoặc
USE HSLUONG IN 1 ALIAS LUONG
3. Truy nhập dữ liệu trên các vùng làm việc khác nhau
Để truy nhập vào một trờng nào đó của một bản ghi hiện thời, tuỳ theo từng
trờng hợp ta làm nh sau:
10
- Nếu bản ghi ấy đang ở vùng làm việc hiện thời ta chi cần truy nhập thông qua
tên trờng.
- Nếu bản ghi ấy không nằm trong vùng làm việc hiện thời ta truy nhập theo
cách:
< Bí danh >->< Tên trờng>
hoặc
< Bí danh > . < Tên trờng>
Ví dụ:
SELECT 1
USE HSLUONG ALIAS LUONG
GO 5
SELECT 2
USE DONVI ALIAS DV
GO 2
?LUONG->HOTEN
4. Cập nhật dữ liệu từ một DBF khác

Trong trờng hợp cập nhật chỉ để sửa đổi dữ liệu các trờng của các bản ghi
mà không thêm bản ghi, có thể lu tất cả dữ liệu cần cập nhật vào một tệp, sử dụng
lệnh UPDATE với cú pháp nh sau:
UPDATE ON <Khoá> FROM <Bí danh>
REPLACE <Trờng 1> WITH <Biểu thức1>,
<Trờng 2> WITH <Biểu thức2>,
. . . . .
<Trờng n> WITH <Biểu thứcn> [RANDOM]
Lệnh UPDATE đòi hỏi tệp dữ liệu hiện thời (cần cập nhật) phải đợc chỉ số hoá
theo <khoá>. Nếu tệp <bí danh> không đợc sắp xếp (hoặc không đợc chỉ số hoá)
theo <khoá> cập nhật thì phải dùng từ khoá RANDOM.
Ví dụ 1: Xét bài toán quản lý vật t. Tính lợng tồn kho cuối kỳ dựa vào lợng tồn
kho đầu kỳ và dựa vào phát sinh trong kỳ. Giả sử có 3 tệp DBF: NHAPKHO.DBF
để lu các phiếu nhập, XUATKHO để lu các phiếu xuất và TONKHO.DBF để lu
trữ lợng tồn kho.
SELECT 1
USE NHAPKHO ALIAS NHAP
SELECT 2
USE XUATKHO ALIAS XUAT
SELECT 3
USE TONKHO
INDEX ON MAVT TO MAID
11
UPDATE ON MAVT FROM NHAP REPLACE SOLUONG WITH
SOLUONG+NHAP->SOLUONG RANDOM
UPDATE ON MAVT FROM XUAT REPLACE SOLUONG WITH
SOLUONG+XUAT->SOLUONG RANDOM
5. Kết nối 2 tệp DBF
Nếu bản ghi giữa 2 tệp DBF có liên quan với nhau, muốn tạo ra một tệp mới
bao gồm một số trờng hoặc tất cả các trờng dữ liệu của 2 tệp DBF, sử dụng lệnh

JOIN với cú pháp nh sau:
JOIN WITH <Bí danh> TO <Tệp kết quả> FOR <BT logic>
[FIELDS <ds trờng >]
Lệnh này tạo ra <tệp kết quả > từ 2 tệp dữ liệu đang mở. Một tệp đợc mở ở
vùng làm việc hiện thời và tệp còn lại đợc mở ở vùng đợc chỉ định bởi bí danh.
Ví dụ: giả sử có 2 tệp cơ sở dữ liệu:
Tệp QLPB.DBF lu trữ các thuộc tính của các phòng , ban có cấu trúc nh
sau :
Tên trờng Kiểu trờng Kích thớc Giải thích
MAPB C 2 Mã phòng ban
TENPB C 20 Tên phòng, ban
TRUONGPB C 25 Trởng phòng, ban
Tệp NHANVIEN.DBF lu trữ các nhân viên có cấu trúc nh sau :
Tên trờng Kiểu trờng Kích thớc Giải thích
MANV C 4 mã nhân viên
TENNV C 25 tên nhân viên
MAPB C 2 Mã phòng ban
LUONG N 10 Lơng
Ta dùng lệnh JOIN để kết nối 2 tệp để biết đợc nhân viên thuộc phòng ban nào.
SELECT 1
USE NHANVIEN ALIAS NV
12
QLPB.DBF
(tệp hiện thời)
NHANVIEN.DBF
(tệp hiện thời)
DSNV.DBF
(tệp kết quả)
SELECT 2
USE QLPB

JOIN WITH NV TO DSNV FOR MAPB=NV->MAPB FIELDS TENPB,NV-
>TENNV,NV->LUONG
6. Lệnh SET RELATION
Nhiều khi giữa hai hoặc nhiều tệp có quan hệ với nhau thông qua một trờng
nào đó. Lệnh SET RELATION để thiết lập mối liên kết dữ liệu từ một tệp tới
nhiều tệp dữ liệu khác.
Cú pháp:
SET RELATION TO [<Khoá liên kết 1> INTO < Bí danh 1>]
[,<Khoá liên kết 2> INTO <Bí danh 2 >]
. . .
[ ADDITIVE]
Ví dụ :
Trong một kỳ thi tuyển sinh, để đảm bảo việc cho điểm, ngời ta lập 4 file.
a) DSACH.DBF để lu trữ họ tên thí sinh gồm:
Field name Type Witdth Dec chú thích
SOBD C 10 Số báo danh
HOTEN C 25 Họ và tên
PTOAN C 4 Phách môn toán
PLY C 4 Phách môn lý
PHOA C 4 Phách môn hoá
b) File DTOAN.DBF có cấu trúc nh sau :
Field name Type Witdth Dec chú thích
PTOAN C 4 Phách môn toán
DIEM N 5 2 Điểm môn toán
c) File DLY.DBF có cấu trúc nh sau :
Field name Type Witdth Dec chú thích
PLY C 4 Phách môn lý
DIEM N 5 2 Điểm môn lý
d) File DHOA.DBF có cấu trúc nh sau :
Field name Type Witdth Dec chú thích

PHOA C 4 Phách môn hoá
DIEM N 5 2 Điểm môn hoá
13
PHACH.DBF
SBD
HOTEN
PTOAN
PLY
PHOA
TOAN.DBF
PTOAN
DIEM
LY.DBF
PLY
DIEM
HOA.DBF
PHOA
DIEM
Ta có thể dùng lệnh SET RELATION để thiết lập mối quan hệ giữa các tệp
để biết điểm của các thí sinh:
SELECT 1
USE TOAN ALIAS TOAN
INDEX ON PTOAN TO MTID
SELECT 2
USE LY ALIAS LY
INDEX ON PLY TO MTID
SELECT 3
USE HOA ALIAS HOA
INDEX ON PHOA TO MTID
SELECT 4

USE PHACH
SET RELATION TO PTOAN INTO TOAN,PLY INTO LY,PHOA INTO HOA
LIST SBD,HOTEN,TOAN->DIEM,LY->DIEM,HOA->DIEM
Bài tập 4 : Cách tạo một chơng trình và cấu trúc
chơng trình FOXPRO
1. Cách tạo một chơng trình FOXPRO
Muốn soạn thảo chơng trình trong hệ soạn thảo của FOXPRO ta dùng lệnh:
MODIFY COMMAND <Tên tệp chơng trình>
14
Ví dụ :
MODIFY COMMAND BAITAP
Sau lệnh này màn hình soạn thảo xuất hiện, ta gõ các lệnh vào ví dụ:
USE HOSO
LIST ALL FOR LUONG >= 1000000
COUNT TO TL FOR LUONG >= 1000000
?" Tổng lơng = ",TL
ấn <CTRL> + W để kết thúc soạn thảo. Nh vậy ta đã soạn thảo một chơng trình có
tên BAITAP.PRG
2. Dòng lệnh trong chơng trình
Mỗi một dòng trong tệp chơng trình không quá một lệnh, kết thúc lệnh
xuống dòng.
Một lệnh có thể viết trên nhiều dòng nhng kết thúc mỗi dòng không kể
dòng cuối cùng phải có dấu chấm phẩy ;
3. Dòng chú thích
Là những dòng không dịch , dòng chú thích dùng để giải nghĩa cho các
lệnh hoặc cho một đoạn chơng trình, nó có thể đa vào bất kỳ vị trí nào trong ch-
ơng trình. Dòng chú thích có dạng:
* Dòng chú thích ( nếu ở đầu dòng )
&& Dòng chú thích ( nếu ở cuối dòng )
Có thể dùng kiểu dòng chú thích để xóa tạm một lệnh

Ví dụ:
* Chơng trình tìm kiếm bản ghi
LOCA FOR LUONG>=500000
Hay có thể viết:
LOCA FOR LUONG>=500000 && Chơng trình tìm kiếm bản ghi
4. Cấu trúc một chơng trình FOXPRO
Chơng trình FOXPRO không cần có cấu trúc nhng về tổng quát một chơng
trình FOXPRO gồm bốn phần cơ bản sau:
a/ - Đặt môi trờng làm việc với các lệnh SET
Ví dụ:
SET TALK OFF && Không hiện kết quả tính toán trung gian lên màn hình
SET STATUS OFF && Không hiện dòng trạng thái.
. . . . .
- Đóng tất cả các file dữ liệu và giải phóng bộ nhớ
b/ Khởi tạo biến nhớ: gán giá trị ban đầu cho biến nhớ, kiểu của biến nhớ đợc xác
định qua hằng gán.
c/ Thân chơng trình:
Gồm các lệnh của FOXPRO viết nh trong chế độ hội thoại và các lệnh cấu trúc
lập trình của FOXPRO, các chơng con hàm và thủ tục.
d/ Kết thúc: Đóng các file dữ liệu và trả lại môi trờng cho hệ thống.
5. Chạy chơng trình
15
a. Dùng lệnh DO ở khung cửa sổ lệnh
DO <Tên chơng trình>
Trong đó: <Tên chơng trình> là tên chơng trình mà ta muốn thực hiện.
Nếu chơng trình không thuộc th mục hiện thời hoặc th mục chứa chơng trình
không đợc khai báo bằng lệnh:
SET PATH TO < Danh sách đờng dẫn >
Lệnh này nhằm khai báo một danh sách các th mục để FOXPRO tìm đến khi
không tìm thấy tệp trong th mục làm việc.

SET DEFAULT TO <Đờng đẫn>
Lệnh này đặt th mục nằm trong <Đờng dẫn> làm th mục làm việc của
FOXPRO. FOXPRO sẽ tìm các tệp dữ liệu và tệp chơng trình trong th mục này.
Ví dụ:
SET DEFAULT TO C:\QUANLY
SET PATH TO C:\QUANLY\DBF ,C:\QUANLY\PRG
Ví dụ: chạy chơng trình BAITAP.PRG
DO BAITAP
b. Dùng bảng chọn
ấn F10, chọn menu Program, chọn DO (hoặc ấn CTRL+D)
6. Sửa chơng trình
MODIFY COMMAND <Tên chơng trình>
Bài tập 5 : Các lệnh nhập dữ liệu từ bàn phím
1. Lệnh WAIT
Cú pháp:
WAIT [<Dòng thông báo>][WINDOW] TO [< Biến ký tự >] [TIMEOUT <BT
số>]
16
Khi gặp lệnh này, trên màn hình xuất hiện <Dòng thông báo> và chơng trình
sẽ dừng lại chờ ngời sử dụng gõ một phím bất kỳ. Không nhất thiết phải chỉ thị <
biến kí tự >. Nếu có chỉ thị <Biến ký tự > thì ký tự ta gõ vào sẽ đợc lu vào <Biến
ký tự>. Nếu <Biến ký tự> cha tồn tại thì FOXPRO sẽ tự tạo ta.
Nếu không có chỉ thị <Dòng thông báo > thì FOXPRO sẽ nhắc:
'Press any key to continue' Nghĩa là: Hãy ấn một phím bất kỳ để tiếp tục.
Lệnh này rất hay dùng trong chơng trình để dừng chơng trình tại một thời
điểm nào đó.
Ví du:
WAIT
WAIT Chuẩn bị máy in . Bấm phím ENTER để bắt đầu in
WAIT Bấm phím bất kỳ để tiếp tục WIND

2. Lệnh ACCEPT
Cú pháp:
ACCEPT [<Dòng thông báo >] TO <Biến ký tự >
Khi gặp lệnh này trên màn hình xuất hiện <Dòng thông báo> sau dòng hiện thời
để biết đợc cần đa giá trị nào vào < biến kí tự >. <Biến ký tự > chỉ nhận dữ liệu
kiểu ký tự (Character), chính vì vậy khi nhập dữ liệu là biểu thức kí tự không cần
đặt trong nháy đơn hoặc nháy kép.
Nếu <Biến ký tự> cha tồn tại thì FOXPRO sẽ tự tạo ta.
Ví dụ:
ACCEPT Họ và tên : TO HOTEN
Khi chạy chơng trình trên màn hình xuất hiện:
Họ và tên : Nguyen Van Nam
?HOTEN
Nguyen Van Nam
3. Lệnh INPUT
Cú pháp :
INPUT <Dòng thông báo > TO <Biến>
Khi gặp lệnh này trên màn hình xuất hiện <Dòng thông báo> sau dòng hiện thời
để biết đợc cần đa giá trị nào vào < biến >.
Ví dụ:
INPUT Họ và tên : TO hoten
INPUT Ngày sinh : TO Ngaysinh
INPUT Giới tính : TO Gioitinh
Khi chạy chơng trình:
Họ và tên : Tran Van Nam
Ngày sinh : 07/26/68
Giới tính : .T.
4. Lệnh nhập dữ liệu SAY . . . GET . . . READ
Cú pháp:
17

@ <Toạ độ dòng, cột > SAY <Biểu thức> GET <Biến >
[PICTURE <mã P> ]/[FUNCTION <mã F>]
[DEFAULT <Bthức>] [RANGE <Bthức 1>[,<Bthức 2>]]
[VALID <BT Logic 1>|<BT số>][WHEN <BT Logic2>]
[COLOR<mã màu>]
READ
Lệnh này dùng để nhập dữ liệu vào từ bàn phím.
Ví dụ :
Set Talk OFF
Clear
Hoten = Space(22)
Ngaysinh ={ / / }
Gioi = .F.
Luong=0
@ 2,2 Say ' Họ và tên : Get Hoten
@ 3,2 Say ' Ngày sinh : ' Get Ngaysinh
@ 4,2 Say Giới tính : Get Gioitinh
@ 5,2 Say Lơng : Get Luong
Read
Điểm mạnh của câu lệnh này thực chất là các tham số đi kèm
a. Phần PICTURE <mã > / FUNCTION <mã >
Qui định dữ liệu nhập vào có dạng nh <mã>
Các mã của FUNCTION
Mã ý nghĩa
A
B
D
E
L
T

Z
!
Chỉ cho phép các ký tự là chữ cái
Dữ liệu kiểu số in ra căn lề trái
Dữ liệu kiểu ngày đợc hiển thị theo qui định của SET DATE
Dữ liệu có kiểu ngày theo dạng SET DATE BRITISH (Dạng
dd/mm/yy) dù có ra lệnh SET DATE kiểu gì.
Hiện các số 0 vô nghĩa ở đầu thay cho khoảng trắng trớc dữ liệu
số
Bỏ bớt các ký tự trắng trớc và sau dữ liệu
Nếu giá trị bằng Zero (0) thì cho hiện ra toàn kí tự trắng
Các dữ liệu kiểu ký tự vào sẽ tự động chuyển sang chữ hoa
*Các mã của PICTURE
Mã ý nghĩa
A Chỉ nhận chữ cái
18
L
X
Y
9
#
!
.
,
N
Nhận các chữ cái T, t, Y, y, F, f, N, n
Nhận bất cứ ký tự nào
Nhận các chữ cái Y, y, N, n. Đổi y,n thành Y, N
Nhận giá trị là số và dấu âm (-) dơng (+)
Nhận giá trị là số, ký tự trắng dấu +, -

Đổi chữ thờng thành chữ hoa
Xác định vị trí dấu thập phân
Xác định vị trí ngăn cách hàng ngàn, triệu ,tỷ
Chỉ cho phép đánh vào dữ liệu dạng số
L u ý:
Picture "@ <mã function>" và Function "<mã Function> " là nh nhau.
Ví dụ: Function "D" tơng đơng với Picture "@D"
Ví dụ 1:
A = Space(8)
Set Date French
@ 10,10 Get A Funtion "D"
Khi đó trên màn hình xuất hiện một vệt sáng để ta vào dữ liệu ngày theo dạng của
pháp DD/MM/YY
Ví dụ 2:
A=Tran Van Nam
@10,10 say A func !
kết quả trên màn hình:
TRAN VAN NAM
b. Tham số RANGE <Bthức 1> [, <Bthức 2>]
Để qui định dữ liệu đa vào phải nằm trong một giới hạn nào đó đối với kiểu ký tự,
số hoặc kiểu ngày.
Trong đó : <Bthức 1> là giới hạn dới và <bthức 2> là giới hạn trên. Nếu ta chỉ có
giới hạn dới thì không ghi <bthức 2>, ngợc lại nếu chỉ có giới hạn trên thì ta chỉ
ghi <Bthức 2> với dấu phẩy (,) ở phía trớc để thông báo không có giới hạn dới.
Ví dụ 1:
NGAY = 0
@ 10,10 Say Ngày : Get ngay Range 1,31
read
Khi chạy chơng trình ta nhập dữ liệu cho biến NGAY phải có giá trị từ 1 đến 31.
Nếu ta đa vào sai FOXPRO sẽ thông báo RANG : 1 to 31.

c. Tham số VALID <BT Logic>
Chỉ thị VALID <BT Logic>: Nếu <BT Logic> nhận giá trị .T. (đúng) thì dữ liệu đ-
ợc nhập vào <Biến >, ngợc lại phải ấn phím Space để nhập lại .
Ví dụ 1:
KT = ' '
19
@ 10,10 Say 'Còn nhập nữa không (C/K) ' Get KT;
Function "!" VALID KT $ 'CK'
Read
Biến KT chỉ nhận một trong 2 ký tự C, K (nếu ta gõ c,k thì function ! đã chuyển
thành C,K) . Nếu ta gõ các ký tự khác thì FOXPRO thông báo ta phải gõ lại.
d.Tham số WHEN <Bt logic>
Chỉ khi nào <Bt logic> nhận giá trị .T. (đúng) thì con trỏ mới nhảy vào
vùng GET để nhập dữ liệu. Nếu <Bt logic> nhận giá trị .F. (sai) thì con trỏ nhảy
về vùng GET tiếp theo.
Ví dụ 1:
MASO=space(6)
HOTEN=space(25)
NGAYSINH={ / / }
HESOL=0
@4,2 say Mã số : get MASO
@5,2 say Họ và tên : get HOTEN when MASO<>
@6,2 say Ngày sinh : get NGAYSINH when HOTEN<>
@7,2 say Hệ số lơng : get HESOL
read
Khi chạy chơng trình, các vùng nhập liệu của các biến hiện lên, con trỏ màn
hình ở vùng nhập dữ liệu vào biến MASO, nếu nhập MASO<> thì con trỏ màn
hình mới nhảy vào vùng nhập dữ liệu cho biến HOTEN, ngợc lại con trỏ chuyển
xuống vùng nhập dữ liệu vào biến HESOL. Vì MASO= con trỏ không nhảy vào
vùng nhập dữ liệu của biến HOTEN, nên giá trị của biến HOTEN= thì con trỏ

không nhảy vào vùng nhập dữ liệu của biến NGAYSINH.
Bài tập 6 : biến và Cách sử dụng biến
Trong FOXPRO có 2 loại biến:
Biến nhớ (memory variable): là các biến trung gian đợc lập ra khi thực hiện
chơng trình hay thực hiện các câu lệnh trong khung cửa sổ lệnh.
Biến trờng (field variable): là tên của các trờng trong trong file DBF đang
mở. Biến trờng đợc tạo ra khi khai báo cấu trúc tệp CSDL và vẫn tồn tại trên đĩa
khi ra khỏi FOXPRO hoặc mất điện và chỉ tồn tại trong bộ nhớ khi mở tệp CSDL
chứa nó.
20
1. Lệnh gán giá trị cho biến
a. Gán giá trị cho biến nhớ:
<tên biến > = <giá trị>
Ngoài lệnh gán = còn có lệnh
STORE <Giá trị> TO <danh sách biến nhớ>
Trong đó : <giá trị > có thể là hằng, biến hoặc một biểu thức.
Biến nhớ không cần phải khai báo trớc, kiểu của biến nhớ tuỳ vào kiểu <giá
trị>.
Ví dụ 1:
Hoten=Tran Van Nam
Ngaysinh={ / / }
Diachi= Thành phố Vinh
Luong=500000
Ví dụ 2:
STORE 0 to a,b,c
Lệnh này tơng đơng với 3 lệnh gán =
A=0
B=0
C=0
Ngoài ra biến nhớ còn đợc tạo ra và gán giá trị vào nó bởi các câu lệnh :

INPUT [<thông báo>] TO <biến> && <biến> đợc gán giá trị khi ngời
dùng nhập dữ liệu vào biến.
SUM . . . TO <Biến nhớ>
AVERAGE . . . TO <Biến nhớ>
COUNT . . . TO <Biến nhớ>
Trong trờng hợp ta muốn ghi các biến nhớ lên đĩa để lần khởi động sau dùng
đến, hãy ghi các biến này lên dĩa ta dùng lệnh:
SAVE TO <Tên tệp> [ALL LIKE <Kiểu biến>/ALL EXCEPT <Kiểu biến>]
Trờng hợp ta cần dùng đến biến đã ghi tên đĩa, ta dùng lệnh:
RESTORE FROM <Tên tệp.MEM> [ADDITIVE]
Nếu không chỉ thị [ ADDITIVE] thì khi thực hiện lệnh RESTORE sẽ huỷ bỏ
các biến đã tồn tại.
Ví dụ:
RESTORE FROM TEPBIEN1
Xoá biến nhớ:
21
Khi không cần đến biến nhớ ta hãy xoá một phần hay toàn bộ các biến nhớ
để giải phóng chỗ cho các biến bộ nhớ khác, bằng một trong các cách sau:
- CLEAR ALL: Xoá tất cả các biến nhớ và đồng thời cũng đóng tất cả các
tệp CSDL
- CLEAR MEMORY: Xoá tất cả các biến nhớ.
- RELEASE: Lệnh này có tác dụng sau.
+ RELEASE <Danh sách biến>: Xoá các biến trong danh sách.
+ RELEASE ALL: Xoá tất cả các biến ở chế độ trực tiếp ( ở chế độ hội
thoại), và xoá các biến riêng trong chế độ gián tiếp (trong chơng trình).
+ RELEASE ALL LIKE <Kiểu biến >: Xoá tất cả các biến nhớ đợc chỉ thị
trong kiểu biến (có thể dùng ký tự đại diện *
và ?).
+ RELEASE ALL EXCEPT <Kiểu biến >: Xoá tất cả các biến nhớ ngoài
chỉ thị trong kiểu biến (có thể dùng ký tự đại

diện * và ? ).
Biến hệ thống:
Ngoài các biến nhớ của ngời sử dụng đa ra, FOXPRO còn tự tạo ra và duy trì
một số biến đặc biệt gọi là biến hệ thống( System memory variable). Các biến
này chứa các thông tin để định dạng kết quả kết xuất ra máy in hay trên màn
hình.
Tên của biến hệ thống bao giờ cũng bắt đầu bằng dấu gạch dới(_), do đó khi
đặt tên biến ta không nên đặt tên biến nhớ có ký tự gạch dới ở đầu biến.
Ví dụ: Các biến hệ thống nh:
_PPITCH Chọn chế độ in.
_PLENGTH Qui định số dòng của trang giấy.
_PSPACING Điều khiển việc nhảy dòng trớc khi in.
b. Gán giá trị cho biến trờng:
Để gán giá trị vào một trờng của một bản ghi hiện thời trong tệp .DBF đang mở
ta dùng lệnh:
REPLACE <biến trờng> WITH <giá trị>
Trong đó: kiểu dữ liệu của <giá trị> phải cùng kiểu với kiểu của <biến trờng> đã
đợc khai báo trong phần khai báo cấu trúc của tệp cơ sở dữ liệu.
22
Lu ý: Trong trờng hợp tại một thời điểm xử lý biến nhớ trùng tên với biến trờng thì
FOXPRO bao giờ cũng u tiên cho biến trờng trớc.
2. Biến mảng
Mảng là một dạng đặc biệt của biến nhớ, trong đó mỗi phần tử mảng là một
biến nhớ, chúng đợc viết cùng tên và phân biệt với nhau ở phần chỉ số. Ta có thể
dùng mảng một chiều hoặc mảng hai chiều.
2.1. Mảng một chiều
Để có đợc các biến mảng ta hãy khai báo chúng trớc khi sử dụng bằng lệnh:
DIMENSION <Tên mảng> (Kích thớc)
Trong đó:
-<Tên mảng> Là một dãy không quá 10 ký tự và bắt đầu bằng chữ, tiếp theo là

các chữ cái, chữ số.
-Kích thớc là một số nguyên dơng.
-Một mảng trong FOXPRO có tối đa 3600 phần tử và chỉ số của mảng bắt đầu từ
1.
-Trong một mảng các phần tử có thể nhận các giá trị có các kiểu khác nhau.
- Trong trờng hợp khi dùng lệnh DIMESION để khai báo <tên mảng> trùng với
tên biến nhớ đã tồn tại thì biến này sẽ trở thành biến mảng.
Ví dụ 1:
DIMESION A(15) && khai mảng tên A có 15 phần tử
Ví dụ 2:
DIMESION A(15)
DIMESION B(20)
Sẽ tơng đơng với khai báo:
DIMESION A(15), B(20)
Gán giá trị cho mảng
- Gán giá trị cho toàn mảng:
Ví dụ : DIMENSION M(10)
STORE 10 TO M
Hoặc
M=10
Khi này toàn mảng M gồm 10 phần tử đều nhận giá trị là 10. Ngoài ra ta
cũng có thể gán cho mảng một chuỗi ký tự, giá trị logic . . .
- Gán giá trị cho từng phần tử của mảng:
23
Ví dụ:
DIMENSION M(6)
STORE 10 TO M(1),M(4), M(5)
M(2)= Tran Van Nam
M(3)=.T.
M(6)={01/01/05}

Ta cũng có thể dùng các lệnh nhập dữ liệu từ bàn phím để gán giá trị cho
từng phần tử mảng.
2.2. Mảng 2 chiều
Khai báo mảng 2 chiều:
DIMESION <tên mảng>(kích thớc hàng,kích thớc cột)
Ví dụ:
DIMESION C(3,5)
Với khai báo này ta đợc các phần tử:
C(1,1) C(1,2) C(1,3) C(1,4) C(1,5)
C(2,1) C(2,2) C(2,3) C(2,4) C(2,5)
C(3,1) C(3,2) C(3,3) C(3,4) C(3,5)
Các phần tử của mảng đã đợc khai báo, khi chạy chơng trình đợc cấp phát các
ô nhớ tơng ứng theo kiểu tuần tự, hết hàng này đến hàng khác nên một mảng 2
chiều có thể đợc sử dụng tơng tự nh mảng một chiều.
Ví dụ 1: Nếu ta khai báo
DIMENSION C(3,5)
Ta có 15 phần tử các phần tử theo thứ tự tơng ứng với:
C(1) C(2) C(3) C(4) C(5)
C(6) C(7) C(8) C(9) C(10)
C(11) C(12) C(13) C(14) C(15)
Các thao tác gán giá trị vào các phần tử của mảng 2 chiều cũng tơng tự nh
đối với mảng một chiều.
3. Trao đổi dữ liệu giữa DBF và mảng
3.1. Lệnh lấy dữ liệu từ bản ghi ra mảng
Cú pháp:
SCATTER [FIELDS <DS trờng > ] TO <Tên mảng>
24
- Lệnh này đọc dữ liệu từ bản ghi hiện thời của một file DBF đang mở ra
mảng.
Cơ chế đọc:

Đọc trờng 1 của bản ghi hiện thời vào phần tử 1 của mảng
Đọc trờng 2 của bản ghi hiện thời vào phần tử 2 của mảng
. . . . .
Ví dụ: giả sử có file CANBO.DBF có 4 trờng HOTEN, NGAYSINH,
GIOITINH, LUONG
Nếu trong chơng trình ta có các lệnh:
DIME A(4)
. . . . .
USE CANBO
Go 5
SCATTER TO A
Khi đó FOXPRO sẽ thực hiện đọc dữ liệu ở bản ghi số 5 ra mảng A theo thứ
tự sau:
HOTEN NGAYSINH GIOITINH LUONG
A(1) A(2) A(3) A(4)
3.2. Lệnh lấy dữ liệu từ mảng vào bản ghi
Cú pháp:
GATHER FROM <Tên mảng > [FIELDS <DS trờng >]
Lệnh này chuyển dữ liệu từ một mảng vào một bản ghi hiện thời của file DBF
đang mở.
Cơ chế chuyển: các phần tử của mảng sẽ đợc chuyển tuần tự vào các trờng của
bản ghi hiện thời.
Ví dụ:
DIME A(4)
. . . .
USE CANBO
Go 2
GATHER FROM A
25

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×