tin ung dung 2

3.3.4.1. Các hàm thao tác trên xâu  ký tự.

a. Hàm LEN

Dùng để xác định độ dài một xâu ký tự.

Dạng hàm: LEN(<BT xâu>)

Hàm cho giá trị là độ dài của xâu xác định bởi <BT xâu>.

Ví dụ:

? LEN(‘INFORMATION’)

  11

? LEN(‘’)

  0

b. Hàm TYPE

Dùng để cho biết kiểu của một biểu thức kiểu ký tự.

Dạng hàm : TYPE( <BT xâu> )

Hàm cho biết kiểu của giá trị của biểu thức ghi trong <BT xâu>, giá trị của hàm là một trong các ký tự sau:

            C    nếu là biểu thức kiểu ký tự

            N    nếu là biểu thức kiểu số

            L    nếu là biểu thức kiểu logic

            D    nếu là biểu thức kiểu ngày tháng

            M    nếu là biểu thức kiểu ký ức

            U    nếu không xác định được loại biểu thức.

Ví dụ :      

? TYPE(‘Hà văn Hùng’)

    C

? TYPE(‘3+4*5’)

    N

? TYPE(‘CTOD(‘01/21/99’)’)

    D

? TYPE(‘4<5 .and. ‘A’>’B’’)

    L

? TYPE(12345)

    U

c. Hàm LEFT

Dùng để trích ra một xâu con ở phía trái từ một xâu ký tự.

Dạng hàm: LEFT(<BT xâu>,<n>)

 Trong đó:  n là một biểu thức số.

 Hàm cho giá trị là một xâu con gồm n ký tự trái nhất trích ra từ <BT xâu>.

 Nếu giá trị của n lớn hơn độ dài của giá trị biểu thức xâu, giá trị của hàm sẽ là toàn bộ biểu thức xâu.

Nếu giá trị của n nhỏ hơn hoặc bằng 0 thì giá trị của hàm là một xâu rỗng.

Nếu giá trị của n không nguyên thì  FOX sẽ lấy giá trị là phần nguyên của biểu thức n.

Ví dụ:

? LEFT(‘ABCDE’,2)

AB

? LEFT(‘ABCDE’,5+2)

ABCDE

? LEFT(‘ABCDE’,-2)

? LEFT(‘ABCDE’,3.7)

ABC

d. Hàm RIGHT

Dùng để trích ra một xâu con ở phía phải từ một xâu ký tự.

Dạng hàm: RIGHT(<BT xâu>,<n>)

 Trong đó:  n là một biểu thức số.

 Hàm cho giá trị là một xâu con gồm n ký tự phải nhất trích ra từ <BT xâu>.

 Nếu giá trị của n lớn hơn độ dài của giá trị biểu thức xâu, giá trị của hàm sẽ là toàn bộ biểu thức xâu.

Nếu giá trị của n nhỏ hơn hoặc bằng 0 thì giá trị của hàm là một xâu rỗng.

Nếu giá trị của n không nguyên thì  FOX sẽ lấy giá trị là phần nguyên của biểu thức n.

Ví dụ:

? RIGHT(‘ABCDE’,2)

DE

? RIGHT(‘ABCDE’,5+2)

ABCDE

? RIGHT(‘ABCDE’,-2)

? RIGHT(‘ABCDE’,3.7)

CDE

e. Hàm SUBSTR

Dùng để trích ra một xâu con trong một xâu ký tự bắt đầu từ một vị trí nào đó.

Dạng hàm: SUBSTR(<BT xâu>,<n> [,m] )

 Trong đó:  n, m là các  biểu thức số để chỉ vị trí bắt đầu trích và số ký tự cần trích ra ở BT xâu.

 Hàm cho giá trị là một xâu con gồm m ký tự bắt đầu từ ký tự thứ n tính về phía cuối của BT xâu.

 Nếu giá trị của n lớn hơn độ dài của giá trị biểu thức xâu, FOX sẽ báo lỗi “ Beyond string”.

Nếu giá trị của m nhỏ hơn hoặc bằng 0 thì giá trị của hàm là một xâu rỗng.

Nếu giá trị của m không nguyên thì  FOX sẽ lấy giá trị là phần nguyên của biểu thức m.

Nếu không viết m hoặc giá trị của m lớn hơn chiều dài của BT xâu  thì giá trị của hàm là một xâu gồm tất cả các ký tự từ vị trí n về cuối BT xâu.

Ví dụ:

? SUBSTR(‘ABCDE’,2,3)

BCD

? SUBSTR(‘ABCDE’,3,6)

CDE

? SUBSTR(‘ABCDE’,2,-2)

? SUBSTR(‘ABCDE’,2,3.7)

BCD

? SUBSTR(‘ABCDE’,4)

DE

f. Hàm REPLICATE

Dùng để lặp lại giá trị của một xâu ký tự.

Dạng hàm: REPLICATE(<BT xâu>,<n>)

 Trong đó:  n là một biểu thức số.

 Hàm cho giá trị là một xâu gồm giá trị của BT xâu được lặp n lần.

Nếu giá trị của n nhỏ hơn hoặc bằng 0 thì giá trị của hàm là một xâu rỗng.

Nếu giá trị của n không nguyên thì  FOX sẽ lấy giá trị là phần nguyên của biểu thức n.

Ví dụ:

? REPLICATE(‘ABCDE’,2)

ABCDEABCDE

? REPLICATE(‘ABCDE’,-10)

? REPLICATE(‘ABCDE’,2.9)

ABCDEABCDE

g. Hàm LTRIM, RTRIM, ALLTRIM

Dùng để cắt các ký tự trống trong một xâu ký tự.

Dạng hàm:

LTRIM(<BT xâu>)

RTRIM(<BT xâu>)

ALLTRIM(<BT xâu>)

Hàm LTRIM  sẽ cho giá  trị là một xâu lấy từ giá trị BT xâu sau khi đã cắt hết các ký tự trống ở phía trái.

Hàm RTRIM  sẽ cho giá  trị là một xâu lấy từ giá trị BT xâu sau khi đã cắt hết các ký tự trống ở phía phải.

Hàm AALTRIM  sẽ cho giá  trị là một xâu lấy từ giá trị BT xâu sau khi đã cắt hết các ký tự trống ở cả hai phía trái và phải.

Ví dụ:

? LTRIM(‘       ABCDE’)

ABCDE

? RTRIM(‘Nguyễn văn Hùng                      ’)+’Sinh ngày:1/1/1970’

Nguyễn văn HùngSinh ngày:1/1/1970

? AALTRIM(‘       ABCDE         ’)

ABCDE

h.  Hàm AT

Dùng để tìm kiếm vị trí một xâu con chứa trong một xâu ký tự.

Dạng hàm: AT(<BT xâu 1>, <BT xâu 2>)

Trong đó : BT xâu 1, BT xâu 2 là các xâu ký tự.

Hàm này tìm kiếm giá trị của BT xâu 1 trong xâu xác định bởi giá trị của BT xâu 2. Giá trị của hàm là một số chỉ ra vị trí bắt đầu của xâu 1 trong xâu 2. Nếu giá trị của BT xâu 1 không có trong giá trị của BT xâu 2 ( không là xâu con) thì hàm cho giá trị là số 0.

Ví dụ:

? AT(‘ABC’,’123ABCD’)

4

          ? AT(‘Hương’, ‘NGUYỄN THỊ HƯƠNG’)

                   0

i. Hàm LOWER

  Dùng để chuyển tất cả các chữ cái trong xâu ký tự thành chữ thường.

  Dạng hàm: LOWER(<BT xâu>)

  Hàm sẽ cho giá trị là một xâu là kết quả của giá trị BT xâu đã chuyển tất cả các chữ cái thành chữ thường.

  Ví dụ :

  ? LOWER(‘123aBcD’)

  123abcd

j. Hàm UPPER

  Dùng để chuyển tất cả các chữ cái trong xâu ký tự thành chữ in.

  Dạng hàm: UPPER(<BT xâu>)

  Hàm sẽ cho giá trị là một xâu là kết quả của giá trị BT xâu đã chuyển tất cả các chữ cái thành chữ in.

          Ví dụ :

          ? UPPER(‘123aBcD’)

          123ABCD

3.3.4.2. Các hàm chuyển loại dữ liệu.

a. Hàm VAL

Dùng để chuyển loại dữ liệu từ loại xâu sang loại số.

Dạng hàm:  VAL(<BT xâu>)

Hàm sẽ chuyển giá trị BT xâu thành một số tương ứng. Trong trường hợp giá trị BT xâu không biểu diễn một số nào thì hàm cho giá trị là số không “0”.

Ví dụ:

?  VAL(‘123’+’45’)

12345      

(Đây là số 12.345)

?  VAL(‘12H1’)

1.                          (số 12)

?  VAL(‘XYZT’)

·                             (số 0)

b. Hàm 

Dùng để chuyển giá trị một biểu thức số thành một xâu ký tự tương ứng.

Dạng hàm: STR(<Bt số> [,n] [,m])

Trong đó: n, m là các biểu thức số.

Hàm cho giá trị là một xâu biểu diễn giá trị của biểu thức số với độ dài là n và m ký tự sau dấu chấm.

  Nếu không viết m thì hiểu là dãy ký tự biểu diễn số nguyên.

  Nếu không viết n thì lấy độ dài ngầm định của xâu là 10.

  Nếu n nhỏ hơn số chữ số phần nguyên của giá trị Bt số thì xảy ra hiển tượng tràn nên giá trị của hàm n ký tự “ * “.

Ví dụ:

?  STR(20/3,5,2)

     6.67                 (      - một khoảng trống)

?  STR(20/3,5)

                      7           

? STR(20/3)

                                             7               

c. Hàm CTOD

  Dùng  để chuyển một xâu ký tự thành một ngày tương ứng.

  Dạng hàm: CTOD( <Bt xâu> )

  Hàm chuyển  giá trị Bt xâu thành một ngày (dữ kiệu loại ngày tháng) tương ứng.

          Ví dụ:

          NGAY=’01/21/98’

          ? CTOD(NGAY)

          01/21/98

          ? TYPE(CTOD(NGAY))

          D

  Khi biểu thức xâu không chuyển được thành một ngày tương ứng thì các giá trị ngày, tháng, năm sẽ bỏ trống.

  Ví dụ: Giá trị của hàm CTOD(‘abcdefgh’)  là {           /          /         }.

d. Hàm DTOC

  Dùng  để chuyển giá trị một biểu thức ngày thành một xâu ký tự tương ứng.

  Dạng hàm: DTOC( <Bt ngày> )

  Hàm chuyển  giá trị <Bt ngày> thành một xâu ký tự tương ứng biểu diễn giá trị của nó.

          Ví dụ:

          NGAY={01/21/98}

          ? DTOC(NGAY)

          01/21/98          (là một xâu)

          ? TYPE(DTOC(NGAY))

                   C

3.3.4.3. Một số hàm số toán học thường gặp:

Hàm số nhận đối là số thực nằm trong miền xác định và giá trị của hàm là một số thực:

Tên hàm

Hàm

Viết trong FOX

Trị tuyệt đối của x

| x |

ABS(X)

Căn bậc 2 của x

 X

SQRT(X)

E mũ x

Ex

EXP(X)

Loga tự nhiên của x

Lnx

LOG(X)

Phần nguyên của x

[x]

INT(X)

Phần dư của x chia y

X mod Y

MOD(X,Y)

Sin x

sinx

SIN(X)

Cosin x

cos x

COS(X)

Tang x

tg x

TAN(X)

Giá trị nhỏ nhất

Min {x1,x2,...,xn}

MIN(x1,x2,...,xn)

Giá trị lớn nhất

Max{x1,x2,...,xn}

MAX(x1,x2,...,xn)

3.3.4.4. Một số hàm khác:

a. Hàm DATE()

Để xác định ngày hệ thống.

Dạng hàm: DATE()

Hàm sẽ cho giá trị là ngày hiện tại theo sự cập nhật ngày của máy đang dùng.  Dạng ngày sẽ theo SET DATE đã chọn.

Ví dụ : 

? DATE()

18-10-99

b. Hàm DAY()

Dùng để trích ra ngày từ giá trị một biểu thức ngày.

Dạng hàm:  DAY(<Bt ngày>)

Hàm cho giá trị là ngày được trích ra từ giá trị biểu thức ngày.

Ví dụ:

Ngay={21/01/99}

?DAY(NGAY)

21     (giá trị thuộc loại số)

? TYPE(‘DAY(NGAY)’)

N

c. Hàm MONTH()

Dùng để trích ra tháng từ giá trị một biểu thức ngày.

Dạng hàm:  MONTH( <Bt ngày> )

Hàm cho giá trị là tháng được trích ra từ giá trị biểu thức ngày.

Ví dụ:

Ngay={21/01/99}

?MONTH(NGAY)

1     (giá trị thuộc loại số)

? TYPE(‘MONTH(NGAY)’)

N

d. Hàm YEAR()

Dùng để trích ra năm từ giá trị một biểu thức ngày.

Dạng hàm:  YEAR(<Bt ngày> )

Hàm cho giá trị là năm được trích ra từ giá trị biểu thức ngày.

Ví dụ:

Ngay={21/01/99}

?YEAR(NGAY)

1999     (giá trị thuộc loại số)

? TYPE(‘YEAR(NGAY)’)

N

e. Hàm DOW()

Dùng để xác định thứ tự của ngày trong tuần của  ngày lấy ra từ biểu thức ngày.

Dạng hàm:  DOW(<Bt ngày>)

Hàm cho giá trị là thứ tự ngày trong tuần của ngày được trích ra từ giá trị biểu thức ngày.

Ví dụ:

Ngay={21/01/99}

?DOW(NGAY)

5     (Ngày thứ 5 trong tuần - giá trị thuộc loại số)

? TYPE(‘DOW(NGAY)’)

N

f.  Hàm RECNO()

Dùng để xác định số thứ tự của bản ghi trong tệp dữ liệu.

Dạng hàm: 

  RECNO()

Hàm cho giá trị là số hiệu của bản ghi hiện thời có loại là số.

Số hiệu của bản ghi là số thứ tự của bản ghi.

Ví dụ:

USE QLHS

? RECNO()

1

GOTO 120

? RECNO()

120

g.  Hàm EOF()

Dùng để xác định con trỏ bản ghi có đặt vào dấu hiệu kết thúc tệp hay không.

Dạng hàm: EOF()

Hàm cho giá trị .T. khi con trỏ đặt vào dấu hiệu kết thúc tệp và cho giá trị là .F. trong trường hợp ngược lại.

Ví dụ:

USE   QLHS

? EOF()

 .F.

GOTO BOTTOM

? EOF()

 .F.

SKIP

?  EOF()

 .T.

h.  Hàm BOF()

Dùng để xác định con trỏ bản ghi có đặt vào dấu hiệu bắt đầu tệp hay không.

Dạng hàm: BOF()

Hàm cho giá trị .T. khi con trỏ đặt vào dấu hiệu bắt đầu tệp và cho giá trị là .F. trong trường hợp ngược lại.

Ví dụ:

USE   QLHS

? BOF()

 .F.

SKIP  -1

?  BOF()

 .T.

i.  Hàm PROW()

Dùng để xác định dòng của đầu in đang đặt trên trang in.

Dạng hàm: PROW()

Hàm cho giá trị là số chỉ thứ tự dòng của đầu in trên trang giấy in.

Hàm thường dùng khi điều khiển máy in để xuất thông tin ra giấy thành văn bản.

j.  Hàm PCOL()

Dùng để xác định cột của đầu in đang đặt trên trang in.

Dạng hàm: PCOL( )

Hàm cho giá trị là số chỉ thứ tự cột của đầu in trên trang giấy in.

Hàm thường dùng khi điều khiển máy in để xuất thông tin ra giấy thành văn bản.

k.  Hàm ROW()

Dùng để xác định dòng hiện thời trên màn hình.

Dạng hàm: ROW( )

Hàm cho giá trị là số chỉ thứ tự dòng hiện thời trên màn hình khi xuất thông tin ra màn hình.

l.  Hàm COL()

Dùng để xác định cột hiện thời trên màn hình.

Dạng hàm: COL( )

Hàm cho giá trị là số chỉ thứ tự cột hiện thời trên màn hình khi xuất thông tin ra màn hình.

3.4. Biểu thức.

Biểu thức gồm các đại lượng liên kết với nhau bởi các dấu phép toán và cặp dấu ( ). Tuỳ thuộc đại lượng thuộc loại nào, liên kết bởi dấu phép toán tương ứng mà có các loại biểu thức tương ứng.

3.4.1. Biểu thức số.

Biểu thức số gồm các đại lượng số (hằng số, biến số, hàm số ) liên kết với nhau bởi các dấu phép toán số học, dấu ( , ) một cách có ý nghĩa.

Hai đại lượng ngày trừ đi nhau cũng được coi là biểu thức số.

Ví dụ: { 01/20/99 } -  { 01/15/99} có giá trị là 5 (loại số).

Các dấu phép toán số học gồm:

  +: Dấu phép toán cộng

  - : Dấu phép toán trừ

  * : Dấu phép toán nhân

  / : Dấu phép toán chia

            Ù (**): Dấu phép toán luỹ thừa.

Thứ tự ưu tiên khi thực hiện các phép toán:

- Các phép toán trong ngoặc ( )

- Tính hàm

- Tính luỹ thừa

- Nhân và chia

- Cộng và trừ.

Nếu các phép toán cùng mức độ ưu tiên thì thực hiện từ trái sang phải.

3.4.2. Biểu thức xâu.

Biểu thức xâu gồm tập hợp các đại lượng xâu liên kết với nhau bởi dấu phép toán ghép xâu. Dấu phép toán ghép xâu là + hoặc -

Giá trị của biểu thức xâu là một xâu ký tự gồm giá trị của các đại lượng có mặt trong biểu thức ghép lại tuần tự.

- Nếu dấu ghép xâu là + thì ghép toàn bộ các xâu.

- Nếu dấu ghép xâu là dấu - thì ghép sau khi đã loại bỏ hết các ký tự trắng vô nghĩa ở phía phải.

Ví dụ: ‘ABC ’ + ‘DE’ có giá trị là ‘ABC DE’

   ‘ABC  ‘ -  ‘DE’ có giá trị là ‘ABCDE’

3.4.3. Biểu thức ngày.

Biểu thức ngày gồm một đại lượng ngày và các đại lượng số liên kết với nhau bởi dấu cộng hoặc trừ một cách có nghĩa (được hiểu là một ngày tháng cộng hoặc trừ bao nhiêu ngày).

Giá trị của biểu thức ngày là một hằng ngày tháng.

Ví dụ: {01/20/99} + 5 có giá trị {01/25/99}

   {01/21/69} - 10 có giá trị là {01/11/69}

3.4.4. Biểu thức quan hệ.

Biểu thức quan hệ gồm hai biểu thức cùng loại (số, xâu hoặc ngày) liên kết với nhau bởi một dấu phép toán quan hệ.

Các dấu phép toán quan hệ:

=     Bằng                 < =      Nhỏ hơn hoặc bằng.

<     Nhỏ hơn            > =     Lớn hơn hoặc bằng.

>     Lớn hơn            < > (#)    Khác.

Khi tính giá trị, máy so sánh giá trị hai biểu thức ở hai vế, nếu phù hợp với dấu phép toán thì biểu thức quan hệ nhận giá trị .T. (Viết tắt của True, nghĩa là đúng), ngược lại thì nhận giá trị .F. (False - sai)

Ví dụ:

- Biểu thức: 5 + 1 < 2 có giá trị .F.

- Biểu thức: ‘ANH’ > ‘ANG’ nhận giá trị .T.

Nhớ rằng, khi so sánh hai xâu, máy thực hiện so sánh theo kiểu từ điển dựa trên giá trị của mã ASC I I của các ký tự.

- Biểu thức:

{01/21/99}  < {01/25/99} nhận giá trị .T.

Khi so sánh hai ngày tháng, đầu tiên so sánh năm, cùng năm mới xét tháng, cùng tháng mới xét ngày. Mỗi thành phần này đều là số.

3.4.5. Biểu thức logic.

Biểu thức logic gồm một tập hợp các đại lượng logic, các biểu thức quan hệ, liên kết với nhau bởi các dấu phép toán logic, dấu mở ngoặc “ ( “ , dấu đóng ngoặc “ ) ”  một cách có nghĩa.

Các dấu phép toán logic gồm:

.NOT.  - Phép  phủ định NOT.

.AND.   - Phép toán và logic.

.OR.      - Phép toán hoặc logic.

Cách thực hiện từng phép toán như sau:

Phép toán . NOT. chỉ có một toán hạng:         Phủ định .T. là .F.

Phủ định .F. là .T.

Phép toán .AND. có hai toán hạng. Phép và chỉ đúng khi cả hai toán hạng đồng thời đúng, nhận giá trị sau khi ít nhất một trong hai toán hạng sai.

Bảng giá trị của phép toán .AND. như sau:

 a

.T.

.T.

.F.

.F.

.T.

.F.

.T.

.F.

a .AND. b

.T.

.F.

.F.

.F.

Phép toán .OR. có hai toán hạng. Phép hoặc chỉ nhận giá trị sai (.F.) khi cả hai toán hạng sai, sẽ nhận giá trị đúng khi có ít nhất một trong hai toán hạng đúng (. T.)

Bảng giá trị của phép toán .OR. như sau:

 a

.T.

.T.

.F.

.F.

.T.

.F.

.T.

.F.

a .OR. b

.T.

.T.

.T.

.F.

Khi tính giá trị biểu thức logic, sẽ theo trình tự ưu tiên sau:

- Các phép toán trong ngoặc ( )

- Phép toán .NOT.

- Phép toán .AND.

- Phép toán .OR.

Vậy biểu thức logic chỉ nhận giá trị .T. hoặc .F.

Lưu ý: Các dấu phép toán logic, khi viết trong FOX có thể bỏ các dấu chấm trước và sau nhưng phải có ít nhất một khoảng trống trước và sau các từ NOT, AND, OR.

3.5. Phạm vi.

Phạm vi là một yếu tố của FOX để chỉ ra tập hợp các bản ghi được thao tác đối với các lệnh xử lý các bản ghi trên tệp dữ liệu.

FOX sử dụng các phạm vi sau:

ALL       - bao gồm tất cả các bản ghi.

NEXT n - gồm n bản ghi tiếp theo kể từ bản ghi hiện thời (đang làm việc).

RECORD n - chỉ gồm bản ghi có số hiệu là n (số hiệu bản ghi chính là số thứ tự của bản ghi trong tệp).

REST - gồm tất cả các bản ghi kể từ bản ghi đang làm việc đến cuối tệp.

4. CÁC LỆNH CƠ BẢN CỦA FOX.

4.1. Tạo tệp dữ liệu.

Tạo tệp dữ liệu được tiến hành với hai phần việc:

- Tạo cấu trúc tệp: Khai báo cho máy biết về các trường mà tệp phải có với đầy đủ các đặc trưng về tên trường, loại trường, độ rộng và số chữ số thập phân nếu là trường số.

- Nhập nội dung các bản ghi của tệp.

Tuy nhiên việc tạo cấu trúc tệp chỉ phải thực hiện lần đầu, còn nội dung tệp sẽ được cập nhật dữ liệu dần dần.

4.1.1. Lệnh CREATE

- Dùng để : Tạo cấu trúc tệp dữ liệu.

- Dạng lệnh :

CREATE < tên tệp >

Trong đó:

CREATE  : Là từ khoá

Tên tệp      : Là tên tệp dữ liệu cần tạo cấu trúc, phần mở rộng ngầm định là .DBF

1.    

Tác động: Lệnh cho hiện ra một bảng khai báo để người sử dụng khai báo cấu trúc tệp, có dạng:

Khi đó người sử dụng khai báo lần lượt từng trường, với:

+ Tên trường: Đặt theo qui tắc ở phần 3.3.2.

+ Loại trường: Ta chỉ xét mỗi trường thuộc một trong năm  loại:

    C   (Character) - Trường loại ký tự.

    N   (Numeric)  - Trường loại số.

    D   (Date)        - Trường loại ngày tháng.

    L    (Logical)   - Trường loại logic.

    M   (Memo)     - Trường loại ký ức.   

+ Độ rộng trường:

Trường loại ký tự (C) có độ rộng  £ 254

Trường loại số (N) có độ rộng  £ 20

Trường loại ngày tháng (D) có độ rộng  = 8

Trường loại  logic (L) có độ rộng          = 1   

Trường loại  memo (M) có độ rộng       £ 5000

+ Số chữ số thập phân: Chỉ phải khai báo với trường số, nếu là 0 thì số đó là số nguyên, nếu > 0 thì là số thực và khi đó mất một vị trí cho dấu chấm ngăn cách phần nguyên và phân.

Kết thúc khai báo bấm ^ W ¿   hoặc  ¿¿ , khi đó xuất hiện của sổ hỏi:

(bây giờ bạn có vào các bản ghi dữ liệu không?)

-         Nếu trả lời Y (yes) : Máy sẽ cho nhập lần lượt các bản ghi vào tệp. Kết thúc nhập dữ liệu bấm  ÙW hoặc ÙEnd. (Thực chất ở đây, khi trả lời Y, máy đã chuyển sang thực hiện lệnh APPEND)

-         Nếu trả lời N (No) : Máy đã thực hiện xong lệnh CREATE thường thì lại quay về đợi lệnh tiếp theo (tại cửa sổ lệnh).

  Ví dụ: Để quản lý điểm thi của sinh viên Trường Đại học TC - KT  Hà nội, người ta cần lưu trữ các thông tin sau của mỗi sinh viên: Họ tên, số báo danh, khoá, lớp, ngày sinh, giới sinh, điểm thi môn 1, môn 2, môn 3, điểm trung bình, phân loại học tập, ta có thể tạo tệp dữ liệu (thiết kế cấu trúc tệp) như sau:

          CREATE     QLHS. DBF

Thuộc tính

Name

Type

Wodth

Dec

Họ tên đệm

HTD

C

17

Tên

TEN

C

7

Số báo danh

SBD

C

5

Khoá

KHOA

C

2

Lớp

LOP

C

4

Ngày sinh

NS

D

8

Giới tính

GT

L

1

Điểm môn 1

D1

N

2

0

Điểm môn 2

D2

N

2

0

Điểm môn 3

D3

N

2

0

Điểm trung bình

DTB

N

5

2

Phân loại

PL

C

4

Ở đây, trường GT thuộc loại L chỉ nhận T hoặc F, vậy phải mã tương ứng T  tương ứng giới tính gì (giả sử T - Nam), F tương ứng với giới tính gì (giả sử F - Nữ) và khi nhập dữ liệu bắt buộc phải tuân theo qui định đó để  có thể xử lý được về sau.

4.1.2. Mở - đóng tệp dữ liệu.

  - Khái niệm : Tệp dữ liệu được lưu trữ trên đĩa. Để làm việc với tệp nào, ta phải đọc tệp đó vào RAM - gọi là mở tệp. Sau khi làm việc xong ta ghi lại thông tin của tệp ở RAM trở lại đĩa - gọi là đóng tệp.

  - Để mở tệp, ta dùng lệnh:

  USE < tên tệp >   

  Trong đó: <tên tệp> là tên tệp dữ liệu cần mở, phầm mở rộng ngầm định là .DBF.

- Để đóng tệp, dùng một trong các lệnh:

  USE - đóng tệp đang sử dụng.

  CLOSE  DATABASE - Đóng CSDL tức là đóng tất cả các tệp dữ liệu đang mở.

  CLOSE ALL  - Đóng tất  cả các tệp đang mở (trong đó có các tệp dữ liệu).

  Ngoài ra tại một vùng làm việc, khi mở một tệp dữ liệu, nếu trước đó đã có một tệp khác đang mở, máy sẽ tự đóng tệp đang mở trước đó:

  Ví dụ:

  USE            A:\VATTU.DBF

  USE            CHUNGTU

  USE

4.1.3 Lệnh APPEND

- Dùng để bổ sung thêm các bản ghi vào cuối tệp dữ liệu đang mở

- Dạng: APPEND

- Tác động: Lệnh sẽ cho bổ sung thêm các bản ghi vào cuối tệp đang mở, dữ liệu do người sử dụng nhập từ bàn phím, kết thúc nhập dữ liệu bấm ^W hoặc ^End.

  Ví dụ: Giả sử tại thư mục làm việc đã có tệp QLHS.DBF, cần  nhập thêm danh sách học sinh vào tệp ta viết các lệnh:

  USE   QLHS

  APPEND

Xuất hiện cửa sổ nhập bổ sung bản ghi:

  (Nhập dữ liệu lần lượt từng bản ghi kết thúc bấm ^W)

  USE

4.1.4. Lệnh APPEND FROM ...

  - Dùng để bổ sung các bản ghi vào cuối tệp đang mở nhưng dữ liệu được lấy từ một tệp dữ liệu khác đã có trên đĩa.

  - Dạng:

  APPEND FROM   <tên tệp> [ FOR <biểu thức logic>]

Trong đó: <tên tệp> là tên của tệp dữ liệu khác chưa mở hoặc mở ở vùng làm việc khác.

         - Tác động : Lệnh sẽ cho bổ sung các bản ghi từ tệp xác định bởi <tên tệp> vào cuối tệp dữ liệu đang mở. Dữ liệu chỉ có ở những trường giữa hai tệp trùng tên nhau, ngược lại bỏ trống.

  Nếu có mệnh đề FOR <biểu thức logic> thì chỉ những bản ghi thoả mãn biểu thức logic  (làm biểu thức logic đúng) được bổ sung.

  - Ví dụ: Giả sử tại A:\ có tệp DSBS.DBF cùng cấu trúc với tệp QLHS.DBF. Cần bổ sung danh sách học sinh khoá 36 từ tệp DSBS.dbf vào cuối tệp QLHS.dbf thì viết:

  USE  QLHS

  APPEND  FROM  A:\DSBS  FOR  KHOA = ‘36’

  USE

  Nếu bỏ FOR ... thì tất cả các bản ghi từ tệp DSBS.dbf sẽ được bổ sung vào cuối tệp QLHS.dbf

4.1.5. Lệnh COPY  STRUCTURE

  - Dùng để sao chép cấu trúc tệp dữ liệu đang mở sang một tệp khác

  - Dạng: COPY  STRUCTURE  TO <tên tệp>

Trong đó: <tên tệp> là tên tệp dữ liệu - kết quả của việc sao chép cấu trúc

  - Tác động: Lệnh sẽ sao cấu trúc của tệp dữ liệu đang mở để có tệp mới có tên xác định bởi <tên tệp>

  - Ví dụ:

  USE  QLHS

  COPY   STRUCTURE  TO  A:\LUU.DBF

4.1.6. Lệnh COPY

- Lệnh này sẽ sao cả tệp dữ liệu này thành một tệp khác

- Dạng:  COPY  TO <tên tệp> [FOR <biểu thức logic>]

  Trong đó: <tên tệp> là tên tệp dữ liệu kết quả sau khi sao được từ tệp dữ liệu đang mở.

- Tác động: Lệnh sẽ sao tệp đang mở để có tệp mới xác định bởi tên tệp.

  Nếu có FOR <biểu thức logic> thì chỉ các bản ghi thoả mãn biểu thức logic được sao sang.

  Ví dụ 1:       USE   QLHS

                     COPY  TO  A:\BANSAO

  Lệnh COPY trên sao toàn bộ tệp QLHS. DBF thành tệp BANSAO.DBF tại gốc A:

  Ví dụ 2:       USE   QLHS

                     COPY  TO  K40  FOR  KHOA = ‘40’

  Lệnh COPY này sao các bản ghi có trường KHOA nhận giá trị là 40 (nghĩa là khoá 40) từ tệp QLHS.DBF thành tệp K40.DBF đặt tại thư mục làm việc.

4.2. Di chuyển con trỏ bản ghi

4.2.1. Khái niệm

Khi làm việc với tệp dữ liệu là ta làm việc với các bản ghi trong tệp. Tại một thời điểm cụ thể chỉ làm việc với một bản ghi duy nhất. Bản ghi có thể được xử lý tại thời điểm hiện thời gọi là bản ghi hiện thời. Khi đó con trỏ bản ghi sẽ được đặt ở bản ghi đó.

Vậy con trỏ bản ghi là cơ chế đánh dấu bản ghi đang làm việc. Khi mới mở tệp dữ liệu, con trỏ đặt vào bản ghi đầu tiên của tệp. Để làm việc với các bản ghi nào đó, ta phải di chuyển con trỏ đến đó bằng các lệnh sau:

4.2.2. Lệnh GOTO (GO)

- Dùng để: Di chuyển con trỏ đến một bản ghi có vị trí xác định.

- Dạng:

GOTO  <n> /TOP/ BOTTOM

Trong đó:

n là số hiệu bản ghi cần chuyển đến

TOP là từ khoá chỉ bản ghi đầu tiên của tệp

BOTTOM là từ khoá chỉ bản ghi cuối cùng của tệp

- Ví dụ: Giả sử tệp QLHS.DBF có 100 bản ghi.

Lệnh                       Con trỏ đặt tại bản ghi số

  USE  QLHS                    1

  GOTO  50                      50

  GOTO  TOP                            1

  GOTO BOTTOM           100

4.2.3. Lệnh SKIP

- Dùng để: Di chuyển con trỏ đến một bản ghi có vị trí tương đối so với bản ghi hiện thời

- Dạng: SKIP  [n]

Trong đó n là biểu thức số nhận giá trị nguyên. Giá trị ngầm định của n là 1

- Tác động: Lệnh sẽ di chuyển con trỏ đi n bản ghi kể từ bản ghi hiện thời

Nếu  n > 0: Chuyển về phía cuối tệp

Nếu  n < 0: Chuyển về phía đầu tệp

Ví dụ: Giả sử tệp QLHS.DBF có 100 bản ghi

Lệnh                                 Con trỏ đặt ở bản ghi số

USE QLHS                                          1

SKIP  50                                              51                        

SKIP  10                                              61

SKIP   - 5                                            56

SKIP                                                  57

Chú ý:

Các bản ghi trong tệp được đánh số từ 1 đến hết. Trước bản ghi đầu tiên có dấu hiệu bắt đầu tệp BOF (viết tắt của Begin of  File), sau bản ghi cuối cùng có dấu hiệu kết thúc tệp EOF (viết tắt của End of File)

  Khi con trỏ ở bản ghi cuối cùng nếu dịch chuyển đi một bản ghi về phía cuối, con trỏ sẽ đặt tại dấu hiệu EOF, khi đó hàm EOF() nhận giá trị .T. (còn khi con trỏ không đặt tại dấu hiệu EOF thì hàm EOF() sẽ nhận giá trị .F.). Khi  con trỏ ở bản ghi đầu tiên, nếu dịch chuyển lên trên một bản ghi, hàm BOF() sẽ nhận giá trị .T. (còn khi không ở trường hợp này, hàm BOF() sẽ nhận giá trị .F.)

Các lệnh GOTO và SKIP sẽ di chuyển con trỏ không phụ thuộc bất kỳ điều kiện nào nên gọi là các lệnh di chuyển con trỏ vô điều kiện. Ngoài ra còn có các lệnh để di chuyển con trỏ đến bản ghi thoả mãn một điều kiện nào đó, các lệnh đó được gọi là các lệnh di chuyển có điều kiện. Các lệnh di chuyển có điều kiện thực chất là các lệnh tìm kiếm bản ghi, sẽ được giới thiệu ở phần các lệnh tìm kiếm.

4.3. Xem - Sửa tệp dữ liệu

4.3.1. Lệnh DIR

- Dùng để xem tên các tệp trên đĩa. Lệnh này tương tự lệnh DIR của DOS

  - Dạng: DIR [ tên tệp]

  Tên tệp ngầm định là *.DBF

  Ví dụ: DIR  \ KT\*.* 

4.3.2. Hai lệnh LIST  STRUCTURE và DIRPLAY STRUCTURE

  - Cả hai lệnh đều dùng để xem thông tin về cấu trúc tệp đang mở.

  - Dạng: LIST  STRUCTURE  [ TO PRINTER]

            DISPLAY  STRUCTURE  [ TO PRINTER]

  - Tác động:

  Lệnh dùng để xem các thông tin về cấu trúc của tệp đang mở.

  Nếu có TO PRINTER thì đưa các thông tin này được đưa ra máy in, ngược lại thì đưa ra màn hình.

  Các thông tin xem được gồm:

·  Tên tệp đang mở.

·  Số lượng bản ghi dữ liệu.

·  Ngày cập nhật gần nhất.

·  Danh sách các trường cùng các đặc trưng của các trường.

  Hai lệnh LIST STRUCTURE và DISPLAY STRUCTURE chỉ khác nhau ở cách thức đưa ra. LIST ... sẽ  đưa ra tất cả các thông tin một cách liên tục, còn DISPLAY ... thì đưa ra theo chế độ phân trang nghĩa là cứ đầy trang màn hình thì dừng lại, chờ bấm phím bất kỳ lại tiếp tục, cứ thế cho đến hết.

  Ví dụ: Để in lại bảng cấu trúc của tệp QLHS. DBF , ta viết:

  USE QLHS

  LIST  STRUCTURE  TO  PRINTER

  (Tất nhiên phải có máy in)

4.3.3. Hai lệnh: LIST và DISPLAY

Cả hai lệnh đều để đưa ra màn hình hoặc máy in  nội dung các bản ghi trong tệp dữ lệu đang mở.

  - Dạng lệnh:

  LIST [ phạm vi] [Fields <ds trường>] [ For <BTlogic>] [ TO PRINTER]

  DISPLAY [phạm vi][Fields <ds trường>][For <BTlogic>][TO PRINTER]

  Trong đó:

·  Phạm vi: Để xác định tập hợp các bản ghi cần xem. Phạm vi ngầm định của LIST là ALL, của DISPLAY là bản ghi hiện thời.

·  Danh sách trường: Gồm tập hợp các tên trường cần xem, cách nhau dấu phẩy. Ngầm định là mọi trường trong tệp đang mở.

·  Biểu thức logic để xác định điều kiện các bản ghi cần xem. (Thoả mãn biểu thức logic thì đưa ra cho xem, ngược lại thì không đưa ra).

- Tác động: Lệnh sẽ đưa ra màn hình hoặc máy in nội dung các bản ghi nằm  trong <phạm vi> và chỉ gồm các trường theo yêu cầu (có tên trong danh sách trường).

  Nếu có For <BTlogic> thì chỉ cho xem nội dung các  bản ghi làm BTlogic đúng (.T.)

  TO PRINTER nếu có thì các thông tin đó được đưa ra máy in, nếu không thì đưa ra màn hình.

  Ví dụ: Xét tệp QLHS.DBF (ở thư mục làm việc)

  + Ví dụ 1: Cần xem bản ghi số 50

  USE  QLHD

  GOTO  50

  DISPLAY

  USE

  + Ví dụ 2: Cần in danh sách học sinh của khoá 40, gồm họ tên, lớp, số báo danh, ngày sinh,  giới tính.

  USE QLHS

  LIST  FIELDS  HTD, TEN, LOP, SDB, NS, GT FOR KHOA = ‘40’ TO PRINTER

  USE

  + Ví dụ 3: Xem danh sách học sinh nữ có điểm trung bình từ 8.5 trở lên

  LIST  FOR .NOT.  GT .AND. DTB  > = 8.5

  + Ví dụ 4: Xem danh sách học sinh nam sinh trước ngày 1/1/1970

  LIST FOR GT . AND. NS < = {01/01/70}

4.3.4. Lệnh MODIFY STRUCTURE

- Dùng để : Sửa lại cấu trúc tệp trúc tệp dữ liệu đang mở.

- Dạng: MODIFY STRUCTURE

2.     Tác động: Lệnh cho hiện lại bảng cấu trúc của tệp đang mở để người sử dụng hiệu chỉnh lại cấu trúc.

  Có thể qui về ba thao tác sửa chính sau:

  + Thêm một trường: Đặt con trỏ màn hình vào trường cần chèn thêm trường, sau đó ấn Alt+I (hoặc kích chuột vào lựa chọn Insert trên màn hình của lệnh) khi đó một trường mới có tên <NEW FIELD> được chèn vào và ta sẽ tiến hành khai báo các đặc trưng của trường cần chèn (gồm tên, loại, độ rộng và số chữ số thập phân của trường số)

  + Xoá bớt một trường: Đặt trỏ tại trường cần xoá rồi ấn Alt+D ( hoặc chọn lựa chon Delete trong màn hình của lệnh)

  + Sửa trên một trường, gồm: Đặt con trỏ vào vị trí cần sửa, rồi tiến hành các sửa chữa cần thiết. Sửa trường thường là: Sửa tên trường, sửa loại trường, sửa độ rộng và sửa số chữ số thập phân.

  Khi đó, trong ba trường hợp sửa loại, độ rộng, phần thập phân có thể gây mất dữ liệu.

  Kết thúc sửa ấn ^W (hoặc ^¿  hoặc kích chuột vào lựa chọn OK)

  Chú ý: Khi sửa cấu trúc tệp dữ liệu, máy sẽ tự động sinh ra tệp lưu cất cùng tên, phần mở rộng .BAK để lưu lại nội dung tệp trước khi sửa chữa .

  Khi cần lấy lại tệp cũ, chỉ cần đổi thành phần mở rộng .DBF là có thể sử dụng được ngay.

4.3.5 Hai lệnh BROWSE và EDIT

  - Cả hai lệnh đều dùng để sửa lại nội dung các bản ghi trong tệp đang mở.

  - Dạng:

  BROWSE  [ Fields < ds trường >]   [ FOR < BT logic> ]

  EDIT  [ fields < ds trường> ]  [ For < BT logic>]

Trong đó: Danh sách trường để xác định tên các trường cần hiển thị để sửa, ngầm định là mọi trường trong tệp đang mở.

3.     Tác động: Hai lệnh đều cho sửa các bản ghi trong tệp bắt đầu từ bản ghi hiện thời, bao gồm các trường có tên trong danh sách trường. Nếu có For < bt logic > thì chỉ cho sửa các biểu ghi hàm biểu thức logic đúng.

  Để di chuyển con trỏ đến các trường và bản ghi cần sửa, dùng các phím dịch chuyển con trỏ .

  Kết thúc sửa ấn ^W hoặc  ^End.

  Hai lệnh BROWSE và EDIT chỉ khác nhau cách hiển thị khi sửa:

  BROWSE hiển thị dạng bảng, mỗi bản ghi trên một dòng.

  EDIT hiển thị mỗi trường trên một dòng:

  - Ví dụ: Xét tệp QLHS.dbf, cần sửa lại điểm thi của học sinh lớp 30 khoá 35, có thể viết:

  USE QLHS

  EDIT FIELDS HTD, TEN, SBD, D1, D2, D3 FOR KHOA = ‘35’ . AND. LOP = ‘30’

  USE

4.3.6. Lệnh REPLACE

  - Dùng để thay thế nội dung của các trường dữ liệu trong tệp đang mở.

  - Dạng:

  REPLACE [ phạm vi] < trường 1> WITH < Biểu thức 1>

            [, < trường 2> WITH < Biểu thức 2> ] [, ...][ FOR  < BT logic> ]

Trong đó:

·  Phạm vi: Xác định tập hợp các bản ghi cần thay thế, ngầm định là bản ghi hiện thời.

·  Trường 1, trường 2, ... : Là các tên trường cần thay thế giá trị.

·  Biểu thức 1, biểu thức 2,...: Là các biểu thức dùng để lấy giá trị thay vào các trường 1, 2, ... nên phải cùng loại với trường tương ứng.

  - Tác động: Trên các bản ghi thuộc phạm vi, trường 1 được thay thế giá trị của biểu thức 1, trường 2 được thay thế giá trị của biểu thức 2,... Nếu có For <BT logic> thì chỉ các bản ghi làm biểu thức logic đúng (. T.) mới được thay thế. Khi đó phạm vi ngầm định là ALL

  - Ví dụ:

  + Ví dụ: Xét tệp QLHS.DBF. Cần tính điểm trung bình và phần loại học tập của sinh viên theo quy tắc:

  Điểm trung bình = (Điểm 1 x 6 + Điểm 2 x 5 + Điểm 3 x 4) / 15

            Phân loại  =’          Giỏi’ - nếu ĐTB ³  9

            Phân loại  =’Khá’  - nếu 7  £  ĐTB < 9

            Phân loại  =’          Trung bình’  - nếu 5 £  ĐTB < 7

            Phân loại  =’          Yếu’ -  nếu ĐTB < 5

  Ta viết các lệnh:

  USE  QLHS

  REPLACE  ALL  DTB  WITH (D1 6 + D2 5 + D3 4)/15

  REPLACE  PL WITH ‘GIOI’ FOR DTB > = 9

  REPLACE  PL WITH ‘KHA’ FOR  DTB > = 7 . AND. DTB <9

  REPLACE  PL WITH ‘TB’ FOR  DTB > = 5 . AND.  DTB < 7

  REPLACE  PL  WITH  ‘Yếu’ FOR  DTB < 5

  USE

  + Ví dụ 2: Giả sử có tệp VATTU.DBF để quản lý tình hình nhập, xuất vật tư ở một kho, có cấu trúc như sau:

Name

-----------

Type

----------

Width

----------

Dec

--------

Giải thích

---------------

SOCT

C

6

Số chứng từ

NLCT

D

8

 Ngày lập chứng từ

TENVT

C

20

Tên vật tư

MAVT

C

6

Mã vật tư

DVT

C

3

Đơn vị tính

LNV

L

1

Loại nghiệp vụ (N/X)

MADV

C

4

Mã đơn vị nhập/ Xuất

KL

N

10

0

Khối lượng

DG

N

10

2

Đơn giá

TT

N

15

0

Thành tiền

  Trong đó trường LNV là loại L được mã lại là .T. - nhập

                                                                       .F. - xuất

  Bây giờ ta cần đổi lại các đơn vị  tính thống nhất từ tấn (TAN) ra kilôgam (KG) ở trường DVT rồi tính: Thành tiền = khối lượng  x đơn giá.

  Ta viết các lệnh:

  USE  VATTU

  REPLACE   KL  WITH  KL 1000 FOR DVT = ‘TAN’

  REPLACE  DG WITH DG /1000 FOR DVT = ‘TAN’

  REPLACE  DVT WITH ‘KG’ FOR DVT = ‘TAN’

  REPLACE  ALL  TT  WITH   KL  DG

  USE

  Tất nhiên ba lệnh REPLACE đầu tiên cùng có mệnh đề For < btlogic> như nhau, có thể gộp thành một lệnh như sau:

REPLACE KL WITH KL1000, DG  WITH DG/1000, DVT WITH; ‘KG’ FOR DVT = ‘TAN’

  Nhận xét: Với bản chất là để thay thế giá trị cho trường dữ liệu, lệnh REPLACE thường dùng để tính toán và ghi kết quả vào trường.

4.4. Các lệnh thêm, bớt bản ghi.

4.4.1. Lệnh INSERT

  - Dùng để chèn một bản ghi vào bất kỳ vị trí nào trong tệp dữ liệu đang mở. Tuy nhiên việc này ít dùng máy phải thực hiện ghi chép lại tệp nên tốc độ rất chậm.    

  - Dạng:

  INSERT  [ BEFORE]  [ BLANK]

  - Tác động: Lệnh sẽ cho chèn một bản ghi vào tệp. Cụ thể:

  + Mệnh đề BEFORE:

-  Nếu có: chèn trước bản ghi hiện thời

-  Nếu không: Chèn sau bản ghi hiện thời

+ Mệnh đề BLANK :

-  Nếu có: Cho chèn một bản ghi trắng (rồng)

Bản ghi rỗng sẽ nhận giá trị là xâu gồm các  khoảng trống ở trường kiểu C, nhận 0 ở trường kiểu N, nhận . F. ở trường kiểu L, nhận   .. / ..  / ..   ở trường kiểu ngày D.

-   Nếu không: sau khi chèn bản ghi trắng cho người sử dụng nhập dữ liệu vào bản ghi đó, kết thúc ấn ^W

-  Ví dụ: Xét tệp VATTU. DBF, cần chèn một bản ghi rỗng để nó là bản ghi số 150.

USE VATTU

GOTO 150

INSERT  BEFORE   BLANK

USE

4.4.2. Lệnh DELETE

- Dùng để: Đánh dấu xoá các bản ghi trong tệp đang mở (chưa xoá hẳn)

- Dạng :DELETE [ phạm vi] [ FOR < BTlogic> ]

     Trong đó : Phạm vi ngầm định là bản ghi hiện thời.

Tác động:  FOX sẽ đánh dấu xoá các bản ghi thuộc phạm vi.

Nếu có For < BTlogic> thì chỉ các bản ghi làm <BT logic> đúng được đánh dấu xoá.

- Ví dụ : Xét tệp QLHS.dbf

+ Ví dụ1: Đánh dấu xoá bản ghi số 50

USE QLHS

GOTO 50

DELETE

USE

+ Ví dụ 2: Đánh dấu xoá danh sách học sinh khoá 28

USE QLHS

DELETE FOR KHOA = ‘28’

USE

4.4.4. Lệnh RECALL

- Dùng để gọi lại các bản ghi đã bị đánh dấu xoá, thực chất RECALL huỷ bỏ việc đánh dấu xoá của DELETE.

- Dạng:

RECALL [phạm vi] [FOR < BT logic> ]

Trong đó: Phạm vi ngầm định là bản ghi hiện thời.

- Tác động: FOX sẽ huỷ bỏ việc đánh dấu xoá trên các bản ghi thuộc phạm vi đã bị đánh dấu xoá. Nếu có For < BTlogic> thì chỉ huỷ bỏ đánh dấu xoá trên các bản ghi làm BT logic đúng.

- Ví dụ: Giả sử Tệp QLHS. DBF đã bị đánh dấu xoá toàn bộ các bản ghi trong tệp, cần gọi lại các bản trừ các bản ghi có trường KHOA =’ 28’ :

USE QLHS

RECALL  FOR  KHOA # ‘28’

USE

4.4.5. Lệnh PACK

- Dùng để loại bỏ tất cả các bản ghi đã bị đánh dấu xoá ở tệp đang mở

- Dạng: PACK

Khi thực hiện PACK, các bản ghi bị đánh dấu xoá bị loại bỏ hẳn mà không có cách nào có thể khôi phục lại được, sau đó số hiệu các bản ghi sẽ được xác định lại.

4.4.6. Lệnh ZAP

- Dùng để huỷ bỏ tất cả các bản ghi trong tệp, bất kể các bản ghi có bị đánh dấu xoá hay không.

- Dạng: ZAP

Lệnh ZAP tương đương với hai lệnh

DELETE   ALL

PACK

4.5. Sắp xếp và tìm kiếm bản ghi.

4.5.1. Lệnh INDEX

- Dùng để tạo tệp chỉ dẫn để sắp xếp tệp đang mở theo giá trị tăng dần của tiêu thức sắp xếp.

- Dạng:

INDEX ON <Biểu thức> TO <Tên tệp>  [ FOR < BT logic>]

Trong đó:

-         Biểu thức: Là một biểu thức bất kỳ dùng làm  tiêu thức sắp xếp.

-         Tên tệp : Là tên tệp chỉ dẫn, phần mở rộng ngầm định là .IDX

  - Tác động: Khi thực hiện INDEX, Fox sẽ dùng giá trị của biểu thức làm khoá để lập chỉ dẫn, sắp xếp sao cho trên các bản ghi từ đầu đến cuối tệp, biểu thức có giá trị tăng dần. Nếu có các bản ghi có cùng giá trị của khoá sắp xếp, Fox sẽ sắp xếp các bản ghi đó theo trật tự vật lý của các bản ghi.

  Khi trong lệnh có mệnh đề For <BTlogic> thì chỉ có các bản ghi làm biểu thức logic đúng mới được coi là có mặt trong tệp và tham gia sắp xếp.

  - Ví dụ:

  Ví dụ 1: Xét tệp QLHS .DBF

  Cần in một doanh sách học sinh khoá 40 đã xếp theo thứ tự alphabet của tên học sinh.

  USE QLHS

INDEX ON TEN TO CD1. idx FOR KHOA = ‘40’

  LIST  TO PRINTER

  USE

  Ví dụ 2: Cần in danh sách khoá 40 xếp theo lớp, cùng lớp xếp theo điểm trung bình tăng dần.

          USE QLHS

          INDEX ON LOP  + STR (DTB, 5, 2) TO CD 2 FOR KHOA = ‘40’

          LIST   TO  PRINTER

          USE

4.5.2. Lệnh SORT

  - Dùng để sắp xếp lại tệp dữ liệu, khác với lệnh INDEX, lệnh SORT không sắp xếp trên các bản ghi của tệp đang mở mà tạo ra một tệp mới với các bản ghi lấy của tệp dữ liệu đang mở đã được sắp xếp theo yêu cầu của lệnh.

  - Dạng:

  SORT TO <tên tệp> ON <DS biểu thức khoá [/A/D/C]>[FOR<BT logic>]

  Trong đó:

-  Tên tệp: Là tên tệp dữ liệu để ghi kết quả đã sắp xếp.

-  Danh sách biểu thức gồm các biểu thức viết cách nhau dấu phảy, dùng làm tiêu thức sắp xếp. Nếu có nhiều biểu thức thì ưu tiên cho các biểu thức viết trước.

- Tác động: Lệnh sẽ sắp xếp tệp dữ liệu dựa vào giá trị các biểu thức trong danh sách biểu thức.

Nếu có /A thì xếp tăng dần. Nếu có /D thì xếp giảm dần. (Ngầm định là /A)

Nếu có /C thì sẽ không phân biệt sự khác nhau giữa chữ in và thường.

Kết quả sắp xếp được ghi vào một tệp dữ liệu có tên xác định bởi <tên tệp>.

Nếu có FOR <BT logic> thì trong tệp kết quả chỉ chứa các bản ghi làm <BT logic> nhận giá trị đúng.

- Ví dụ: Xét tệp VATTU.DBF

  Ta cần xem lại các chứng từ tháng 10/1999 đã nhập vào máy được xếp theo mã vật tư, nếu cùng mã vật tư, xếp theo số tiền giảm dần.

USE VATTU

SORT  TO  SXEP  ON    MAVT,  TT/D/C FOR MONTH (NLCT) = 10;       .AND. YEAR (NLCT) = 1999

USE  SXEP

DISPLAY  ALL

USE

Trên thực tế lệnh SORT ít được sử dụng hơn lệnh INDEX vì tốn bộ nhớ và tốc độ thực hiện chậm.

4.5.3. Lệnh LOCATE

  - Dùng để tìm kiếm và định vị con trỏ bản ghi đến bản ghi thoả mãn một điều kiện nào đó. Lệnh được dùng để tìm kiếm bản ghi.

  - Dạng:        LOCATE  FOR  <BTlogic>

Trong đó: BT logic xác định điều kiện tìm kiếm

  - Tác động:

  FOX sẽ duyệt lần lượt từng bản ghi bắt đầu từ đầu tệp và sẽ dừng lại đặt con trỏ vào bản ghi đầu tiên thoả mãn biểu thức logic.

  Trường hợp có nhiều bản ghi cùng thoả mãn điều kiện tìm kiếm, FOX vẫn đặt con trỏ vào bản ghi đầu tiên làm biểu thức logic đúng, muốn chuyển con trỏ đến các bản ghi tiếp theo cũng thỏa mãn biểu thức logic, ta dùng lệnh CONTINUE. Với cách thức tìm kiếm của LOCATE như vậy, người ta còn gọi LOCATE là lệnh tìm kiếm theo kiểu tuần tự. Cách này có ưu điểm là tìm kiếm được trên bất kỳ tệp có được sắp xếp hay không. Tuy nhiên, nhược điểm của lệnh là tốc độ tìm kiếm rất chậm.

  Ví dụ: Xét tệp VATTU.DBF, cần tìm để đưa ra xem số lượng, đơn giá, số tiền trên chứng từ số 20/VL nhập ngày 15/10/1999

USE VATTU

LOCATE  FOR SOCT = ‘10/VL’ . AND. NLCT = {10/15/99}

? ‘số lượng:’ , KL, ‘ đơn giá:’  , DG, ‘số tiền:’   , TT

USE

4.5.4. Lệnh SEEK và FIND

4.     Cả hai lệnh đều dùng để tìm kiếm nhanh các bản ghi trên tệp đã được sắp xếp bởi lệnh INDEX.

5.      Dạng:          SEEK  <Biểu thức>

          FIND <Biểu thức>

  Trong đó:

     Biểu thức của SEEK có thể là biểu thức bất kỳ (Số, xâu, ngày, logic).

      Biểu thức của FIND phải là loại xâu, nếu không bắt đầu là khoảng trống thì không cần đặt trong cặp dấu nháy.

  - Tác động: Xét trên tiêu thức đã dùng để sắp xếp, FOX sẽ tìm từ đầu tệp và đặt con trỏ vào bản ghi đầu tiên mà tiêu thức đó có giá trị bằng <biểu thức> viết trong lệnh.

  - Ví dụ: Yêu cầu như ở mục 4.5.3, song tìm kiếm nhanh.

  USE  VATTU

  INDEX  ON  SOCT  + DTOC(NLCT)  TO  CD

  SEEK   ‘20/VL 10/15/99’

  ? KL, DG, TT                

  USE

Dùng FIND cũng tương tự

Ưu điểm của SEEK và FIND là tốc độ tìn kiếm nhanh, nhưng nếu trong tệp có ít nhất hai bản ghi cùng thoả mãn điều kiện tìm kiếm thì không thực hiện được, vì nó chỉ tìm tới bản ghi đầu tiên thoả mãn điều kiện. Do vậy các lệnh này chỉ được sử dụng trong điều kiện giá trị tìm kiếm là duy nhất (không có quá 2 bản ghi có cùng giá trị khoá tìm kiếm).

4.6. Các lệnh tính toán trên tệp dữ liệu.

4.6.1. Lệnh AVERAGE

- Dùng để : Tính trung bình cộng của các trường số trong tệp dữ liệu.

- Dạng lệnh:

  AVERAGE  [ DS trường số]  [TO < ds biến nhớ>]  [ FOR  < BT logic]

  Trong đó:

            DS trường số: Xác định tên các trường số cần tính trung bình cộng, ngầm định là mọi trường số trong tệp đang mở.

            DS biến nhớ: Gồm các tên biến nhớ để lưu giữ kết quả sau khi tính

            Tác động: Lệnh sẽ tính trung bình cộng của các trường số được chỉ định rồi gửi kết quả vào các biến trong <ds biến>, nếu có For <BTlogic> thì chỉ tính trên các bản ghi làm biểu thức logic nhận giá trị đúng (. T.)

  - Ví dụ: Giả sử có tệp LUONGCB. DBF để tính lương cho cán bộ có cấu trúc như sau:

Name

-----------

Type

-----------

Width

-----------

Dec

-----------

Ghi chú

-------------

HT

C

27

Họ tên cán bộ

SH

C

5

Số hiệu cán bộ

MADV

C

5

Mã đơn vị

HSL

N

5

2

Hệ số lương

HSPC

N

4

2

Hệ số phụ cấp

PT

N

7

0

Các khoản trừ

TL

N

8

0

Thực lĩnh

NLL

D

8

Ngày lên lương

Cần tính lương (thực lĩnh) bình quân của cán bộ thuộc đơn vị có mã HCO6

USE  LUONGCB

AVERAGE    TL TO LTB FOR  MADV = ‘HCO6’

? LTB

USE

4.6.2. Lệnh SUM

- Dùng để tính tổng giá trị trong các trường số của tệp dữ liệu.

- Dạng lệnh:

SUM [<DS trường >TO <ds biến>] [ FOR <BT logic>]

Trong đó:

            DS trường: Xác định tên các trường số cần tính tổng, ngầm định là mọi trường số của tệp đang mở.

            DS biến: Gồm tên các biến để lưu giữ kết quả sau khi tính tổng.

  - Tác động: Lệnh sẽ tính tổng các trường số có tên trong DS trường rồi gửi kết quả vào các biến trong danh sách biến (nếu có).

  Nếu có For <BT logic> thì chỉ tính tổng trên các bản ghi làm BTlogic đúng.

  - Ví dụ:

  Xét tệp LUONGCB. DBF, cần tính tổng tiền thực lĩnh và các khoản phải trừ của đơn vị có mã 01

  USE   LUONGCB

  SUM  PT, TL, TO T1, T2  FOR MADV = ‘01’

  ? ‘Tổng phải trừ:’, T1

  ? ‘Tổng thực lĩnh:’, T2

  USE

4.6.3. Lệnh COUNT

  - Dùng để: Đếm số bản ghi trong tệp, từ đó suy ra số đối tượng tương ứng.

  - Dạng lệnh:

  COUNT      [ TO <Biến> ] [ FOR < BTlogic>]

  Trong đó: Biến là một biến bộ nhớ để lưu giữ kết quả sau khi đếm.

  - Tác động: Lệnh sẽ đếm số bản ghi trong tệp rồi gửi kết quả vào biến.

     Nếu không có TO <biến> thì hiện kết quả lên màn hình với trạng thái môi trường đang ở chế độ SET TALK ON

     Nếu có FOR <BT logic> thì chỉ đếm các bản ghi làm biểu thức logic đúng.

- Ví dụ: Xét tệp QLHS. dbf . Cần tính tỷ lệ (%) học sinh nữ có điểm trung bình từ 9 trở lên

USE QLHS

COUNT  TO TSO FOR .NOT. GT

COUNT  TO TGIOI  FOR  .NOT.GT. AND. DTB > = 9

? ‘Tỷ lệ:’  , TGIOI/TSO    100, ‘%’

USE

4.6.4. Lệnh TOTAL

- Dùng để : Tính tổng các trường số trên từng nhóm bản ghi của tệp dữ liệu.

Nhóm bản ghi gồm tập hợp các bản ghi kế tiếp nhau có cùng giá trị của tiêu thức phân nhóm. Khi phân nhóm, sẽ xét từ đầu tệp.

Ví dụ: Giả sử tệp LUONGCB. DBF có nội dung

HT              MADV        ...                PT               TL

A                 01                ...                1                 2

B                 02                ...                3                 4                

C                 01                ...                5                 6

Nếu dựa vào mã đơn vị (trường MADV) để phân nhóm thì Fox sẽ chia tệp thành ba nhóm bản ghi. Như vậy là không phù hợp với quan niệm chung về nhóm đối tượng vì Fox không chỉ xét đến giá trị của tiêu thức phân nhóm mà còn xét cả đến vị trí các bản ghi. Để cho phù hợp, trước khi phân nhóm ta sắp xếp tệp để các bản ghi không bị ảnh hưởng bởi vị trí khi phân nhóm.  Nguyên tắc là muốn phân nhóm dựa vào tiêu thức nào thì trước đó phải tiến hành sắp xếp dựa vào tiêu thức đó.

Chẳng hạn  tệp LUONGCB.DBF  , sau khi thực hiện lệnh: INDEX  ON  MADV  TO  P  các bản ghi sẽ có trật tự như sau:

HT                        MADV         ...               PT               TL

A                          01                ...               1                 2       

C                          01                                   5                 6       

B                          02                                   3                 4

Bây giờ có thể phân nhóm chính xác: Hai bản ghi đầu là một nhóm, bản ghi thứ ba là một nhóm.

- Dạng lệnh:

TOTAL TO <tên tệp> ON <Biểu thức>[FIELDS<ds trường>][FOR<BT logic>]

Trong đó:

            Tên tệp: Là tên tệp dữ liệu dùng để lưu giữ kết quả sau khi tính tổng.

            Biểu thức: Là biểu thức bất kỳ, dùng làm  tiêu thức phân nhóm.

            DS trường gồm tập hợp tên các trường số cần tính tổng, ngầm định là tất cả các trường số trong tệp đang mở.

  - Tác động: Dựa vào giá trị của biểu thức để phân tệp dữ liệu thành các nhóm bản  ghi, sau đó tính tổng các trường số có tên trong danh sách trường của từng nhóm rồi gửi tổng mỗi nhóm vào một bản ghi của tệp có tên xác định bởi <tên tệp>. Tệp kết quả này  có cùng cấu trúc với tệp gốc; Trên các bản ghi, giá trị các trường cần tính tổng sẽ nhận giá trị là tổng của nhóm tương ứng, còn các trường không được tính tổng sẽ lấy giá trị trên bản ghi đầu tiên của nhóm.

  Trường hợp có For <BT logic> thì chỉ các bản ghi làm biểu thức logic đúng mới được tham gia tính tổng.

  - Ví dụ:

  Ví dụ 1: Xét tệp LUONGCB.DBF, cần in ra bảng tổng hợp lương của từng đơn vị

USE LUONGCB

INDEX   ON  MADV  TO  CD1

TOTAL   TO  KQ1. dbf  ON  MADV

USE  KQ1

LIST  FIELDS  MADV, PT,  TL  TO  PRINTER

USE

Ví dụ 2: Xét tệp VATTU.DBF, cần lập một báo cáo đơn giản về tổng khối lượng và số tiền nhập vật tư từng loại trong quí 4/1999

USE  VATTU

INDEX  ON  MAVT  TO  CD2  FOR  LNV. AND. MONTH(NLCT) = 10;  . AND. YEAR(NLCT) = 1999

TOTAL  TO  KQ2  ON  MAVT  FIELDS  KL, TT

USE  KQ2

LIST  FIELDS  TENVT, MAVT, KL, TT

CLOSE ALL

5. CÁC LỆNH DÙNG CHO LẬP TRÌNH TRÊN FOX.

5.1. Nhóm lệnh gán, vào ra.

5.1.1. Lệnh gán.

Dùng để gán giá trị của biểu thức cho biến nhớ.

Dạng lệnh:

a. <Biến>  = < Biểu thức>

b. STORE <Biểu thức>  TO <ds biến>

- Tác động:

+ Dạng a: Tính giá trị của biểu thức ở vế phải rồi gán cho biến. Kiểu biến được Fox tự xác định cho phù hợp loại biểu thức.

+ Dạng b: Máy tính giá trị biểu thức rồi gán cho tất cả các biến trong ds biến.

- Ví dụ:

A = 10

STORE  1  TO  C, D, E

C  = C + 1

Thực hiện xong lệnh 1 thì biến A thuộc loại số, nhận giá trị là 10; thực hiện xong lệnh 2 thì các biến C, D, E đều nhận giá trị là 1 thuộc loại số; thực hiện xong lệnh 3 thì biến C nhận giá trị là 2.

5.1.2. Lệnh INPUT

- Dùng để đưa dữ liệu từ ngoài vào máy bằng bàn phím trong quá trình thực hiện chương trình.

- Dạng lệnh: INPUT  [ lời nhắc]  TO  <Biến>

Trong đó:

  [Lới nhắc]  là biểu thức xâu, để nhắc người sử dụng khi vào dữ liệu.

  <Biến> là tên biến nhớ cần vào dữ liệu.

  - Tác động:

  Máy dừng lại chờ người sử dụng vào dữ liệu, trên màn hình sẽ xuất hiện lời nhắc là giá trị của biểu thức xâu ( nếu có). Người sử dụng vào dữ liệu từ bàn phím, dữ liệu vào có thể là hằng số, xâu, ngày hay logic, không được là biểu thức tổng quát. Kết thúc ấn ¿ , máy sẽ gán giá trị dữ liệu cho biến.

  - Ví dụ:

  INPUT  ‘vào họ tên:’ TO  HT

  INPUT  ‘ Ngày sinh:’ TO NS

  INPUT  ‘Hệ số lương:’ TO HLS

  Chú ý: Khi vào dữ liệu cho INPUT, phải viết hằng theo đúng quy định của FOX.

5.1.3. Lệnh ACCEPT

  - Dùng để nhận một xâu ký tự từ bàn phím trong quá trình thực hiện chương trình.

  - Dạng:        ACCEPT  [ Lời nhắc] TO  <Biến>

  - Tác động: Tương tự INPUT, nhưng dữ liệu vào phải là một hằng xâu, không cần đặt trong cặp dấu nháy.

  - Ví dụ:

  ACCEPT ‘In cho khoá:’ TO KH

5.1.4. Lệnh ? và lệnh ??

Đều dùng để đưa thông tin ra màn hình hoặc máy in.

   Dạng:          ? [Danh sách biểu thức] [ FONT  ‘Kiểu font’, <cỡ>]

          ?? [ Danh sách biểu thức] [ FONT  ‘Kiểu font’, <cỡ>]

Trong đó: Kiểu Font xác định font chữ cần đưa ra.

Cỡ xác định cỡ chữ  đưa ra.

   - Tác động: Cả hai lệnh đều đưa ra màn hình hoặc máy in giá trị các biểu thức trong danh sách biểu thức, song:

     Lệnh  ?  luôn đưa từ đầu dòng mới;

      Lệnh ??  Đưa tiếp từ vị trí trống còn lại trên dòng hiện tại.

  Việc đưa ra thiết bị nào là do lệnh:

  SET PRINTER ON /OFF đang  có hiệu lực. Ngầm định là SET PRINTER OFF -  nghĩa là đưa ra màn hình, ngược lại nếu là SET  PRINTER  ON thì cả hai lệnh đều đẩy thông tin ra máy in.

  Mệnh đề [ FONT  ‘Kiểu font’, <cỡ>  ]  nếu có thì thông tin đưa ra sẽ theo Font và cỡ chữ được chọn.

  Nếu trong lệnh không có danh sách biểu thức thì để trắng chỗ đưa ra.

  Ví dụ: In tiêu đề: DANH  SÁCH LƯƠNG

                                                            Đơn vị: 01

  SET  PRINTER  ON

  ? ‘ Danh sách lương’   FONT ‘.VntimeH’, 16

  ? ‘ Đơn vị:’          FONT ‘.Vntime’, 16

  ?? ‘01’

5.1.5. Lệnh SAY

  - Dùng để đưa ra màn hình hoặc máy in giá trị một biểu thức.

  - Dạng:

  @ <Dòng>, < Cột>   SAY  [ Biểu thức] [ FONT  ‘Kiểu font’, <cỡ> ]

  Trong đó:

  Biểu thức là một biểu thức bất kỳ cần đưa ra.

  Kiểu Font xác định font chữ cần đưa ra.

  Cỡ xác định cỡ chữ  đưa ra.

  - Tác động: Lệnh sẽ đưa ra màn hình hoặc máy in giá trị của biểu thức bắt đầu từ vị trí xác định bởi tọa độ dòng, cột chỉ ra trong lệnh.

  Mệnh đề [ FONT  ‘Kiểu font’, <cỡ>  ]  nếu có thì thông tin đưa ra sẽ theo Font và cỡ chữ được chọn.

  Lệnh chọn thiết bị ra cho lệnh SAY là:

  SET   DEVICE   TO  SCREEN / PRINTER

Nếu chọn là SCREEN thì đưa ra màn hình (ngầm định).

  Nếu là SET DEVICE  TO PRINTER thì đưa ra máy in

  Ví dụ: In tiêu đề: Bảng lương tháng10/99

                               Đơn vị: 02

  SET  DEVICE  TO PRINTER

  @ 1, 15 SAY ‘Bảng lương tháng 10/99’;

FONT ‘.VntimeH’, 16

  @ 3, 20 SAY ‘Đơn vị: 02’ FONT ‘.Vntime’, 12

  SET  DEVICE  TO SCREEN

Bạn đang đọc truyện trên: truyentop.pro

Tags: #lam