Lệnh UPDATE
Lệnh này dùng để cập nhật dữ liệu vào tệp CSDL hiện hành từ một tệp CSDL
thứ hai đang mở trong một vùng làm việc khác. Cú pháp lệnh như sau:
UPDATE ON
FROM |
REPLACE WITH
[, WITH .]
[RANDOM]
146 trang |
Chia sẻ: truongthinh92 | Lượt xem: 2284 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Giáo trình Visual FoxPro 6.0, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
n1 OF AnSang ACTIVATE POPUP C1M1
ON PAD Mon2 OF AnSang ACTIVATE POPUP C2M2
DEFINE POPUP C1M1 MARGIN MESSAGE 'Các lo ại bánh khác nhau'
DEFINE BAR 1 OF C1M1 PROMPT 'B ánh nhân hoa qủa'
DEFINE BAR 2 OF C1M1 PROMPT 'Bánh nhân th ịt '
ON BAR 1 OF C1M1 ACTIVATE POPUP C1M1B1
ON BAR 2 OF C1M1 ACTIVATE POPUP C1M1B2
DEFINE POPUP C1M1B1 MARGIN MESSAGE 'Các Lo ại nhân hoa qủa'
DEFINE BAR 1 OF C1M1B1 PROMPT 'Bánh nhân cam '
DEFINE BAR 2 OF C1M1B1 PROMPT 'Bánh nhân táo '
DEFINE BAR 3 OF C1M1B1 PROMPT 'Bánh nhân lê '
DEFINE BAR 4 OF C1M1B1 PROMPT 'Bánh nhân chu ối'
DEFINE POPUP C1M1B2 MARGIN MESSAGE 'Các lo ại nhân thịt'
DEFINE BAR 1 OF C1M1B2 PROMPT 'Bánh nhân th ịt lợn'
DEFINE BAR 2 OF C1M1B2 PROMPT 'Bánh nhân th ịt bò '
DEFINE BAR 3 OF C1M1B2 PROMPT 'Bánh nhân th ịt gà '
ON BAR 3 OF C1M1B2 ACTIVATE POPUP C1M1B2C1
DEFINE POPUP C1M1B2C1 MARGIN
DEFINE BAR 1 OF C1M1B2C1 PROMPT 'Bánh nhân th ịt gà công nghiệp'
DEFINE BAR 2 OF C1M1B2C1 PROMPT 'Bánh nhân th ịt gà ta '
DEFINE POPUP C2M2 MARGIN MESSAGE 'Các lo ại nước uống'
DEFINE BAR 1 OF C2M2 PROMPT 'Cà phê '
DEFINE BAR 2 OF C2M2 PROMPT 'Nư ớc chanh'
ON BAR 1 OF C2M2 ACTIVATE POPUP C2M2B1
DEFINE POPUP C2M2B1 MARGIN MESSAGE 'Các Loại cà phê'
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 106
DEFINE BAR 1 OF C2M2B1 PROMPT 'Cà phê đen'
DEFINE BAR 2 OF C2M2B1 PROMPT 'Ca phê nâu'
ON BAR 2 OF C2M2B1 ACTIVATE POPUP C2M2B2C2
DEFINE POPUP C2M2B2C2 MARGIN MESSAGE 'Các lo ại cà phê nâu'
DEFINE BAR 1 OF C2M2B2C2 PROMPT 'Cà phê nâu có đường '
DEFINE BAR 2 OF C2M2B2C2 PROMPT 'Cà phê nâu không đư ờng'
ON SELECTION POPUP ALL DO Chon
ACTIVATE MENU AnSang
PROCEDURE Chon
ACTIVATE WINDOW Win1
CLEAR
?Popup(), Prompt()
WAIT 'Ấn phím'
RETURN
Bài tập:
1. Phần 7.4.1 (Di chuyển cửa sổ)
2. Phần 7.4.2 (Mở File bằng MENU POPUP)
3. Phần 7.4.3 (Mở nội dung Field băng MENU POPUP)
4. Phân 7.4.4 (Di chuyển MENU POPUP)
5. Phần 7.4.5 (Di chuyển Window)
6. Phần 7.4.6 (Menu Hệ thống)
7. Phần 7.4.7 (Lưu và phục hồi cửa sổ)
8. Phần 7.4.8 (Lưu và phục hồi nội dung màn hình)
9. Phần 7.4.9 (Menu dẫn xuất)
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 107
Chương 8. Tạo các bẫy trong chương trình
8.1 Lệnh ON ERROR
Khi gặp một lỗi bất kỳ ta muốn chương trình sẽ thực hiện một chương trình con
nào đó hoặc thông báo dạng lỗi xuất hiện. Nhờ quá tr ình đó mà ta có thể vượt
qua lỗi đó để làm một việc khác hoặc sửa lỗi đó. Lệnh ON ERRORS có dạng
sau:
ON ERROR []
Khi gặp lỗi chương trình sẽ thông báo lỗi bằng các hàm sau:
Hàm ERROR ()thông báo mã lỗi
Hàm MESSAGE() thông báo lỗi
Hàm MESSAGE (1) hiển thị lệnh sai
Hàm LINENO() thông báo số thứ tự dòng bị lỗi
Lệnh ON ERROR thông có tham số cho phép huỷ bỏ bẫy lỗi.
Ví dụ:
set talk off
clear
ON ERROR DO ThongBao WITH MESS(1), ERROR(), MESS(), LINENO()
?sin(9
USU Nhansu
Brws
ON ERROR
PROCEDURE ThongBao
PARAMETER a, b, c,d
? 'Sai lệnh nào? : ' +a
? 'Mã của lỗi : ' + STR(b)
? 'Sai gì? : ' + c
?' Dòng nào sai :'+Str(c)
?'----------------------------------------------- '
RETURN
8.2 Lệnh ON KEY
Lệnh có dạng như sauL:
ON KEY []
Khi ấn một phím bất kỳ th ì lệnh được kích hoạt và thực hiện .
Chương trình sau ta tạo một vòng lặp, khi chương trình đang chạy nếu ấn một
phím bất kỳ thi lệnh ON KEY được kích hoạt và chương trình con có tên
TamDung được thực hiện:
SET TALK OFF
USE khoia
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 108
CLEAR
ON KEY DO TamDung
FOR i=1 to 10000
?i,sin(i),cos(i)
Next
PROCEDURE TamDung
h= INKEY()
?'Bạn đã gõ phím:',H
WAIT
RETURN
8.3 Lệnh ON KEY =
Lệnh có dạng:
ON KEY [=]
Trong đó là mã phím hoặc tổ hợp phím. Bảng mã phím như sau:
Mã phím Tên phím khi gõ
272-281 Alt+Q đến Alt +P
286-294 Alt+A đến Alt +L
300- 306 Alt+Z đến Alt +M
315-324 F1 đến F10
327 HOME
328 Up arrow ( )
329 PgUp
331 Left arrow ( )
333 Right arrow ( )
335 End
336 Down arrow ( )
337 PgDn
338 Ins
339 Ins
340-349 Shift+F1 đến Shift +F10
350 - 359 Ctrl+F1 đến Ctrl +F10
360 - 369 Alt+F1 đến Alt +F10
370 Ctrl+Print+Scrn
371 Ctrl+left arrow
372 Ctrl+right arrow
373 Ctrl+End
374 Ctrl+PgDn
375 Ctrl+Home
376 - 387 Alt+1 đến Alt +0,Alt+-,Alt+=
388 Ctrl+PgUp
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 109
Ví dụ 1:
CLEAR
ON KEY = 315 DO TroGiup WITH VARREAD()
SET TALK OFF
USE khoia
SCATTER TO temp
DEFINE WINDOW VAO FROM 6,10 TO 20,70 PANEL
ACTIVATE WINDOW VAO
DO WHILE NOT EOF()
@ 1,3 SAY 'Ho va dem: ' GET hodem
@ 3,3 SAY 'Ten : ' GET ten
@ 5,3 SAY 'Diem toan: ' GET toan
@ 7,3 SAY 'Diem ly : ' GET ly
@ 9,3 SAY 'Diem hoa : ' GET hoa
@ 11,8 SAY 'An ESC de thoat hoac an F1 de tro giup'
READ
SKIP
ENDDO
DEACTIVATE WINDOW VAO
RELEASE WINDOW VAO
PROCEDURE TroGiup
PARAMETERS TenTruong
CLEAR
DEFINE WINDOW HelpMe FROM 1,0 TO 5,79
ACTIVATE WINDOW HelpMe
@ 0,20 SAY 'Đây là tên trường có tên: ' + TenTruong+ ' bạn chỉ vào DL hoặc
chấp nhận'
WAIT
RELEASE WINDOW HelpMe
RETURN
8.4 Lệnh ON KEY LABEL
Lệnh có dạng sau:
ON KEY [LABEL ] []
Sau đây là các nhãn phím:
Tên nhãn Cách viết
Shift+F11, Shift+F12 Shift+F11 ...
Alt+F1 đến Alt +F12 Alt+F1, Alt+F2 ...
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 110
Alt+0 đến Alt -9 Alt+0, Alt+1 ...
Alt+A đến Alt +Z Alt+A, Alt+B ...
Alt+PgUp Alt+PGUP
Alt+PgDn Alt+PGDN
Ctrl+left arrow Ctrl+LEFTARROW
Ctrl+right arrow Ctrl+RIGHTARROW
Ctrl+Home Ctrl+HOME
Ctrl+End Ctrl+END
Ctrl+PgUp Ctrl+PGUP
Ctrl+PgDn Ctrl+PGDN
Ctrl+A đến Ctrl +Z Ctrl+A, Ctrl+B ...
Right Mouse RIGHTMOUSE
Left Mouse LEFTMOUSE
Mouse MOUSE
Escape ESC
8.5 Lệnh ON ESCAPE
Lệnh có dạng sau:
ON ESCAPE
Khi ấn phím ESC thì được thi hành
Ví dụ chương trình:
SET TALK OFF
CLEAR
ON KEY LABEL RIGHTARROW? 'Đây là phím d ịch phải (Right Arrow) '
ON KEY LABEL LEFTARROW? 'Đây là phím d ịch trái (Left Arrow)'
ON KEY LABEL UPARROW? 'Đây là phím lên d òng (Up Arrow)'
ON KEY LABEL DNARROW? 'Đây là phím xuống một dòng (Down Arrow)'
SET ESCAPE ON
Thoat=.T.
ON ESCAPE Thoat=.F.
@ 2,0 SAY 'Ấn các phím , , và để xem lệnh ON KEY LABEL, ấn ESC
để thoát'
DEFINE WINDOW Input FROM 10,20 TO 14,60 DOUBLE
ACTIVATE WINDOW Input
DO WHILE Thoat
ENDDO
DEACTIVATE WINDOW Input
ON KEY
8.6 Lệnh ON READERROR
Lệnh có dạng:
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 111
ON READERROR []
Khi nhập dữ liệu nếu gặp lỗi th ì thực hiện
Ví dụ chương trình:
CLOSE DATABASES
SET STATUS OFF
SET TALK OFF
USE KhoiA
ON READERROR DO LoiNhap
@ 10,13 SAY 'Vào họ và đệm : ' GET HODEM
@ 12,13 SAY 'Vào Tên : ' GET Ten
@ 14,13 SAY 'Vào số báo danh : '
@ 14,30 GET SBDC Valid Val(right(sbdc,4))<=3000
READ
PROCEDURE LoiNhap
?'Không có số báo danh '+sbdc
WAIT 'ấn phím để tiếp tục'
Clear
RETURN
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 112
Chương 9: Mảng và chuyển giao dữ liệu giữa các môi trường
9.1 Mảng
Mảng được định nghĩa như sau:
DIMENSION ( [, ])
a. Mảng một chiều
Giả sử ta khai báo mảng A có 10 thành phần:
DIMENSION A(10)
Thứ tự truy cập mảng như sau: A(1), A(2), A(3), A(4),...,A(10)
b. Mảng hai chiều
DIMENSION B(2,4)
Thứ tự truy cập mảng như sau:
B(1,1), B(1,2), B(1,3), B(1,4)
B(2,1), B(2,2), B(2,3), B(2,4)
Ta có thể khai báo ngắn gọnT:
DIMENSION A(10),B(2,4)
Để gán giá trị ban đầu cho mảng ta dùng lệnh gán:
A=0 hay STORE 0 TO A
B='Tin học' hay STORE 'Tin học' TO B
Điều đó có nghĩa là các thành phần của mảng A: A(1),...,A(10) đều bằng 0 v à
các thành phần của mảng B:
B(1,1),B(1,2) v.v..đều có cùng giá trị 'Tin học'
Giả sử ta có mảng:
DIMENSION M(2)
STORE 'A' TO M(1)
STORE 'B' TO M(2)
DISPLAY MEMORY LIKE M
Sau đó hiện lên:
M Pub A
( 1) C "A"
( 2) C "B"
Còn nếu:
DIMENSION M(4)
STORE 'A' TO M(1)
STORE 'B' TO M(2)
DISPLAY MEMORY LIKE M
Sau đó hiện lên:
M Pub A
( 1) C "A"
( 2) C "B"
( 3) L .F.
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 113
( 4) L .F.
Hãy quan sát các ví dụ sau:
DIMENSION M(4)
STORE 'E' TO M(1)
STORE 'F' TO M(2)
STORE 'G' TO M(3)
STORE 'H' TO M(4)
DISPLAY MEMORY LIKE M
M Pub A
( 1) C "E"
( 2) C "F"
( 3) C "G"
( 4) C "H"
Còn nếu:
DIMENSION M(2,3)
DISPLAY MEMORY LIKE M
M Pub A
( 1, 1) C "E"
( 1, 2) C "F"
( 1, 3) C "G"
( 2, 1) C "H"
( 2, 2) L .F.
( 2, 3) L .F.
Như vậy khi mảng 2 chiều chuyển sang một chiều, th ì nội dung của mảng hai
chiều được sao chép từ mảng một chiều theo trật tự trên.
Ví dụ:
DIMENSION ViDu(2,3)
STORE 'Tạm biệt' TO ViDu(1,2)
STORE 'Hello' TO ViDu(2,2)
STORE 99 TO ViDu(6)
STORE .T. TO ViDu(1)
DISPLAY MEMORY LIKE ViDu
Sau khi chạy sẽ có kết quả:
VIDU Priv A
( 1, 1) L .T.
( 1, 2) C "Tạm biệt"
( 1, 3) L .F.
( 2, 1) L .F.
( 2, 2) C "Hello"
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 114
( 2, 3) N 99 ( 99.00000000)
9.2 Copy mảng
Để copy nội dung của mảng a (nguồn) sang mảng b (đích) ta d ùng:
=COPY (A,B)
Ví dụ:
set talk off
clear
dime a(4),b(4), c(5)
a(1)=2
a(2)=5
a(3)=99
a(4)=1234
=ACOPY(a, b)
?B(1)
?B(2)
?B(3)
?B(4)
=ACOPY(b,c)
?c(1)
?c(2)
?c(3)
?c(4)
?C(5)
9.3 Một số thuật toán về mảng
a. Tìm max của mảng
Giả sử ta tìm phần tử lớn nhất của mảng 20 thành phần. Ta lập trình như sau:
Set talk off
Clear
Dimension A(20)
A=0
For i=1 to 20
Input 'Vào phần tử A ( '+Str(i,2)+' )=' To A(i)
Next
Max=a(1)
For i=2 to 20
If max<=a(i)
max=a(i)
next
?'Phần tử lớn nhất là:',max
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 115
b. Tìm min của mảng
Giả sử ta tìm phần tử nhỏ nhất của mảng 20 thành phần. Ta lập trình như sau:
Set talk off
Clear
Dimension A(20)
A=0
For i=1 to 20
Input 'Vào phần tử A ( '+Str(i,2)+' )=' To A(i)
Next
Min=a(1)
For i=2 to 20
If min>=a(i)
min=a(i)
next
?'Phần tử nhỏ nhất là:',max
c. Xếp mảng
Giả sử ta xếp giảm dần các phần tử của mảng 20 th ành phần, ta lập trình như
sau:
Set talk off
Clear
Dimension A(20)
A=0
For i=1 to 20
Input 'Vào phần tử A ( '+Str(i,2)+' )=' To A(i)
Next
for i=1 to 20
for j=i+1 to 19
if a(i)>a(j)
tg=a(i)
a(i)=a(j)
a(j)=tg
Endif
9.4 Chuyển bản ghi ra mảng hoặc biến nhớ
Để dễ trình bày ta nên dựa vào một tệp CSDL, giả sử ta có tệp CSDL có t ên
KHOIA.DBF như sau:
STT SBDC HODEM TEN NGAYSINH KV DT
TOAN LY HOA TONG TIEUSU
1 99A0001 Nguyễn Thị Hà 171279 1 01 6.5 5.0 5.5 17.0
2 99A0002 Trịnh Vĩnh Anh 280278 2 02 5.0 3.5 4.0 12.5
3 99A0003 Đỗ Văn Hùng 280679 3 03 7.0 5.5 6.0 18.5
4 99A0004 Trần Thanh Hải 011080 1 01 8.5 7.0 7.5 23.0
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 116
5 99A0005 Phan Trọng Thanh 241280 1 5A 9.0 7.5 8.0 24.5
6 99A0006 Đàm Hữu Thắng 190581 1 5B 3.0 1.5 2.0 6.5
7 99A0007 Lê Thanh Hồng 171177 2 09 4.5 3.0 3.5 11.0
8 99A0008 Nguyễn Phi Chung 020979 2 08 5.5 4.0 4.5 14.0
9 99A0009 Trần Tuấn Bảo 090280 2 07 6.5 5.0 5.5 17.0
10 99A0010 Nguyễn Đình Thu 151179 2 06 7.0 5.5 6.0 18.5
11 99A0011 Nguyễn Văn Hoàng 100177 2 09 8.5 7.0 7.5 23.0
12 99A0012 Đinh Việt Hữu 020180 2 09 9.0 7.5 8.0 24.5
13 99A0013 Đỗ Nguyễn Chu 071180 2 04 10.0 8.5 9.0 27.5
14 99A0014 Lý Xuân Thanh 200880 2 04 2.5 1.0 1.5 5.0
15 99A0015 Phạm Quốc Bình 140975 2 02 4.5 3.0 3.5 11.0
16 99A0016 Đoàn Mạnh Khanh 030280 3 10 5.0 3.5 4.0 12.5
17 99A0017 Nguyễn Văn Khoa 031278 3 11 6.0 4.5 5.0 15.5
18 99A0018 Tạ Hồng An 081180 2 09 8.0 6.5 7.0 21 .5
19 99A0019 Đỗ Trọng Ân 201180 2 07 7.0 5.5 6.0 18.5
20 99A0020 Đỗ Đình Khải 190479 2 08 5.0 3.5 4.0 12.5
Trong đó các tên Trường như sauT:
STT :
Số thứ tự
HODEM :
Họ đệm
NGAYSINH : Ngày sinh
KV :
Khu vực
DT : Đối tượng
TOAN : Điểm toán
LY : Điểm lý
HOA : Điểm hoá
TONG :
Tổng điểm
TIEUSU :
Tiểu sử
Lệnh có dạng như sau:
SCATTER [FIELDS
| FIELDS LIKE
| FIELDS EXCEPT ]
TO | TO BLANK
| MEMVAR
Copy dữ liệu từ bản ghi hiện thời sang mảng hoặc sang các biến nhớ.
SCATTER tự động tạo ra các biến nhớ hoặc mảng nếu chúng ch ưa tồn tại.
FIELDS
Chỉ một số trường trong danh sách trường mới được Copy
FIELDS LIKE | FIELDS EXCEPT
Chúng ta có thể copy các trường vào biến nhớ hoặc mảng bằng dùng từ khoá
LIKE hoặc EXCEPT
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 117
SCATTER FIELDS LIKE A*,P* TO myarray
SCATTER FIELDS LIKE A*,P* EXCEPT PARTNO* TO myarray
TO
Nội dung các trường được đưa vào mảng
TO BLANK
Một mảng được tạo với các phần tử trống.
MEMVAR
Chuyển nội dung bản ghi ra các biến nhớ (các biến n hớ mang tên trườngc) và
viết như sau: m.SBDC, m.HODEM v.v..
Ví dụ1:
set talk off
clear
use khoia
copy to khoia1
use khoia1
Dimension A(10)
do while not eof()
scatter to a
?a(1),a(2),a(3),a(4),a(5),a(6),a(7),a(8),a(9),a(10)
Skip
Enddo
Giả sử không khai báo mảng thì máy sẽ tự động tạo ra mảng để lưu bản ghi đó
set talk off
clear
use khoia
copy to khoia1
use khoia1
do while not eof()
scatter to a
?a(1),a(2),a(3),a(4),a(5),a(6),a(7),a(8),a(9),a(10)
Skip
Enddo
Ví dụ 2: chuyển nội dung bản ghi ra biến nhớ
SET TALK OFF
USE Khoia
COPY TO Khoia1
USE Khoia1
SCATTER MEMVAR MEMO && cất dữ liệu cũ
DEFINE WINDOW Win1 FROM 5,10 to 20,70 PANEL
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 118
ACTIVATE WINDOW Win1
@ 1,3 SAY 'Số báo danh: ' GET m.sbdc
@ 3,3 SAY 'Họ đệm : ' GET m.hodem
@ 5,3 SAY 'Tên : ' GET m.ten
@ 7,3 SAY 'Ngày sinh : ' GET m.Ngaysinh
@ 7,18 SAY 'Khu vực : ' GET m.KV
@ 9,13 SAY 'Tiểu sử : '
@ 9,23 EDIT m.Tieusu SIZE 3,26
@ 13,13 SAY 'ấn Escape để thay đổi'
READ
? m.sbd, m.hodem, m.ten, m.ngaysinh, m.kv
IF LASTKEY() != 27
GATHER MEMVAR
WAIT WINDOW 'Cất sự thay đổi' NOWAIT
ELSE
WAIT WINDOW 'Không cất sự thay đổi' NOWAIT
ENDIF
DEACTIVATE WINDOW Win1
BROWSE
USE
9.5 Chuyển dữ liệu từ mảng vào bản ghi
GATHER FROM | MEMVAR
[FIELDS
| FIELDS LIKE
| FIELDS EXCEPT ]
Lệnh GATHER để lưu dữ liệu từ mảng hoặc từ biến nhớ v ào bản ghi hiện
thời.
FROM
Copy từ mảng
MEMVAR
copy vào bản ghi từ biến nhớ
FIELDS
Chỉ những trường liệt kê trong mới nhận dữ liệu vào
FIELDS LIKE | FIELDS EXCEPT
Ví dụ:
GATHER FROM myarray FIELDS LIKE A*,P*
GATHER FROM myarray FIELDS LIKE A*,P* EXCEPT PARTNO*
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 119
Ví dụ:
SET TALK OFF
USE Khoia
COPY TO Khoia1
USE Khoia1
SCATTER MEMVAR MEMO && save old values
DEFINE WINDOW Win1 FROM 5,10 to 20,70 PANEL
ACTIVATE WINDOW Wind1
@ 1,3 SAY 'Số báo danh: ' GET m.sbdc
@ 3,3 SAY 'Họ đệm : ' GET m.hodem
@ 5,3 SAY 'Tên : ' GET m.ten
@ 7,3 SAY 'Ngày sinh : ' GET m.Ngaysinh
@ 7,18 SAY 'Khu vực : ' GET m.KV
@ 9,13 SAY 'Tiểu sử:'
@ 9,23 EDIT m.Tieusu SIZE 3,26
@ 13,13 SAY 'ấn Escape để thay đổi'
READ
IF LASTKEY() != 27
GATHER MEMVAR
WAIT WINDOW 'Cất sự thay đổi' NOWAIT
ELSE
WAIT WINDOW 'Không cất sự thay đổi' NOWAIT
ENDIF
DEACTIVATE WINDOW Wind1
BROWSE
USE
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 120
Chương 10: Một số lệnh hiệu chỉnh dữ liệu
10.1 Các tuỳ chọn cao cấp của lệnh BROWSE
Lệnh BROWSE có dạng sau:
BROWSE
[FIELDS ]
[FONT [, ]]
[STYLE ]
[FOR ]
[FREEZE ]
[KEY [, ]]
[LEDIT]
[REDIT]
[LOCK ]
[LPARTITION]
[NOAPPEND]
[NOCLEAR]
[NODELETE]
[NOEDIT | NOMODIFY]
[NOLGRID] [NORGRID]
[NOLINK]
[NORMAL]
[NOWAIT]
[PARTITION ]
[PREFERENCE ]
[SAVE]
[TIMEOUT ]
[TITLE ]
[VALID
[ERROR ]]
[WHEN ]
[WIDTH ]
[[WINDOW ]
[IN [WINDOW] | IN SCREEN]]
[COLOR SCHEME | COLOR ]
BROWSE là một trong những lệnh mạnh của FoxPro. Sử dụng BROWSE để mở
cửa sổ Browse và hiển thị các bản ghi của tệp cơ sở dữ liệu. Nếu như bạn cảm
thấy cú pháp quá phức tạp th ì nhiều khi chỉ cần gõ BROWSE là có thể
hiệu chỉnh được các bản ghi. Nhưng muốn tận dụng được sức mạnh của nó bạn
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 121
nên tuỳ từng tình huống cụ thể mà sử dụng các mệnh đề và từ khoá của lệnh. Sau
đây là mô tả các mệnh đề và từ khoá của nó.
1. [FIELDS ]
Mệnh đề [FIELDS ] định ngh ĩa các trường cần hiển thị, ví dụ:
USE KHOIA
BROWSE FIELD Hodem,ten,sbdc
· · Nếu muốn một trường nào đó không được phép sửa ta thêm: R vào sau
trường đó
Ví dụ:
USE KHOIA
BROWSE FIELD Hodem,ten,sbdc :R
Như vậy trường SBDC chỉ đọc mà không được phép sửa
· · Có thể xác định độ rộng của trường đó như sau:
USE KHOIA
BROWSE FIELD Hodem,ten,sbdc :R :8
Ở trên trường SBDC chỉ đọc (:R) và có độ rộng 8 kí tự (:8)
· · Giả sử ta khống chế trường SBDSO (Số báo danh số) chỉ đ ược sửa từ số
báo danh 1 đến số báo danh 12, ta viết như sau:
USE KHOIA
BROWSE FIELD Hodem,ten,sbdso :V=(sbdso<13) :F
· · Khi dùng tuỳ chọn: V và : F ở trên, nếu muốn có một thông báo lỗi ta viết
như sau:
USE KHOIA
BROWSE FIELD Hodem, ten, sbdso :V=(sbdso<13) :F:E='Không đư ợc phép'
· · Nếu muốn chỉ định một khoảng giá trị để hiệu chỉnh, giả sử chỉ đ ược sửa
SBDSO (số được gõ vào thay cho số cũ) từ 12, 20 ta viết như sau:
USE KHOIA
BROWSE FIELD Hodem, ten, sbdso :B=12,20
· · Muốn hiển thị môt tên trường mới thay cho tên trường đã có ta gõ như
sau:
USE KHOIA
BROWSE FIELD Hodem, ten, sbdso :H='So Bao Danh'
· · Chỉ được sửa những bản ghi có SBDSO <12 ta g õ như sau:
USE KHOIA
BROWSE FIELD Hodem, ten, sbdso :W=SBDSO<12
2. [FONT [, ]]
Khi chạy trong môi trường Windows thì là tên phông chữ (VnTime,
VnTimeH v.v..) còn là cỡ phông, nếu không có tham số này, FoxPro sẽ
dùng cỡ phông 10.
Ví dụ:
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 122
USE KHOIA
BROWSE FIELD Hodem, ten, sbdso Font '.VnTime', 14
3. [STYLE ]
Biểu thức ký tự xác định kiểu của phông (B= Béo, I=nghiêng v.v..)
USE KHOIA
BROWSE FIELD Hodem, ten, sbdso Font '.VnTime', 14 Style 'B'
4. [FOR ]
Điều kiện để hiển thị các bản ghi, ví dụ:
USE KHOIA
BROWSE FIELD Hodem, ten, TongDiem For TongDiem >=16
5. [FREEZE ]
Chỉ cho phép hiệu chỉnh trường C , ví dụ:
USE KHOIA
BROWSE FIELD Hodem, ten, TongDiem FREEZE TongDiem
6. [KEY [, ]]
Mệnh đề KEY được dùng để giới hạn phạm vi các bản ghi đ ược hiển thị, ví dụ:
USE Khoia
INDEX ON SBDSO TO SBDINDEX
BROWSE KEY 1,40
Nghĩa là chỉ hiện các bản ghi có số báo danh từ 1 đến 40
USE Khoia
INDEX ON Ten TO TenIndex
BROWSE KEY 'A', 'N'
Hiển thị những bản ghi có tên với chữ cái đầu từ A đến N
USE Khoia
INDEX ON Ten TO TenIndex
BROWSE KEY 'A''
Hiển thị những bản ghi có tên với chữ cái đầu từ A
7. [LEDIT] [REDIT]
[LEDIT] cho phép hiển thị dữ liệu dạng BROWSE
[REDIT] cho phép chuyển sang hiển thị dạng lệnh EDIT hoặc CHANGE
8. [LOCK ]
Cho phép cố định trường bên trái trong khi vẫn di chuyển trỏ sang
phải. phải nhỏ hơn số lượng các trường hiện ra màn hình.
USE KHOIA
BROWSE FIELD Hodem, ten, TongDiem LOCK 2
9. [LPARTITION]
Đưa trỏ sang vùng bên trái, ví dụ:
USE KHOIA
BROWSE PARTITION 40 LPARTITION
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 123
Mệnh đề PARTITION 40 chia cửa sổ th ành hai phần, đường phân cách đứng
nằm ở cột 40, bình thường trỏ nằm ở bên phải nhưng nếu có mệnh đề
LPARTITION thì trỏ sẽ được đặt ở phần trái.
10. [NOAPPEND]
Từ khoá NOAPPEND sẽ không cho phép ghép các bản ghi v ào sau tệp, ví dụ:
USE KHOIA
BROWSE FIELD Hodem, ten, TongDiem NOAPPEND
11. [NOCLEAR]
Từ khoá NOCLEAR báo cho lệnh BROWSE để lại tr ên màn hình một ảnh của
cửa sổ BROWSE sau khi thoát, ví dụ:
USE KHOIA
BROWSE FIELD Hodem, ten, TongDiem NOCLEAR
12. [NODELETE]
Không cho xoá các bản ghi, ví dụ:
USE KHOIA
BROWSE FIELD Hodem, ten, TongDiem NODELETE
13. [NOEDIT | NOMODIFY]
Loại bỏ việc hiệu chỉnh dữ liệu.
USE KHOIA
BROWSE FIELD Hodem, ten, TongDiem NOEDIT
Hoặc:
USE KHOIA
BROWSE FIELD Hodem, ten, TongDiem NOMODIFY
14. [NOLGRID] [NORGRID]
Không hiển thị đường kẻ dọc phân cách các trường của phân vùng bên trái hoặc
bên phải, ví dụ:
USE KHOIA
BROWSE PARTITION 40 NOLGRID
15. NOLINK
Từ khoá NOLINK báo cho lệnh BROWSE không nối kết các phân v ùng, nghĩa
là khi ta di chuyển trỏ đến các bản ghi khác nhau ở phân v ùng này thì các bản
ghi ở phân vùng kia vẫn nằm yên, ví dụ:
USE KHOIA
BROWSE PARTITION 40 NOLINK
16. [NORMAL]
Nếu chỉ định từ khoá NORMAL th ì cửa sổ BROWSE vẫn xuất hiện ở màn hình
mặc dù có thể đang có một cửa sổ hoạt động, ví dụ:
DEFINE WINDOW W1 FROM 1,2 TO 12,40 PANEL
ACTIVATE WINDOW W1
USE KHOIA
BROWSE
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 124
Dữ liệu sẽ xuất hiện trong cửa sổ W1 v à cửa sổ BROWSE sẽ kết thừa các tính
chất như màu, ZOOM, SIZE v.v.. của cửa sổ W1, con nếu:
DEFINE WINDOW W1 FROM 1,2 TO 12,40 PANEL
ACTIVATE WINDOW W1
USE KHOIA
BROWSE NORMAL
Thì dữ liệu sẽ xuất hiện ở màn hình (không phải trong W1) và nó kế thừa màu,
ZOOM, SIZE v.v..của chính cửa sổ BROWSE.
17. [NOWAIT]
Nếu có từ khoá NOWAIT, lệnh BROWSE sẽ hiển thị dữ liệu v à sau đó làm tiếp
các lệnh trong chương trình mà không phải gõ CTRL +W hoặc CTRL +END, ví
dụ:
Set talk off
Clear
DEFINE WINDOW w1 FROM 1,2 TO 12,40 PANEL
ACTIVATE WINDOW w1
USE KHOIA
BROWSE
WAIT 'ấn phím để tiếp tục'
BROWSE NOWAIT &&sẽ hiển thị dữ liệu nhưng không dừng
DEFINE WINDOW w2 FROM 14,20 TO 20,70 PANEL
ACTIVATE WINDOW w2
FOR i=1 TO 1000
?i,sin(i)
NEXT
CLEAR ALL
18. [PARTITION ]
Tách cửa sổ BROWSE thành hai phân vùng, có đường ngăn cách tại cột
.
USE KHOIA
BROWSE PARTITION 40
19. [PREFERENCE ]
Từ khoá PREFERENCE báo cho lệnh BROWSE l ưu cất các thuộc tính và tuỳ
chọn của cửa sổ BROWSE và tệp tin tài nguyên có tên , để sau đó
dùng lại, ví dụ:
USE KHOIA
BROWSE FIELD HODEM,TEN, SBDC COLOR SCHEME 3 PREFERENCE
File1
**** Thoát bằng CTRL +W********
**** Phục chế lại nguyên dạng *********
BROWSE PREFERENCE File1
20. [SAVE]
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 125
Để lại trên màn hình cửa sổ BROWSE và các trường trước khi thoát, ví dụ:
USE KHOIA
BROWSE FIELD HODEM,TEN, SBDC SAVE
21. [TIMEOUT ]
Từ khoá TIMEOUT báo cho lệnh BROWSE chờ T giây, ví dụ:
USE KHOIA
BROWSE FIELD HODEM,TEN, SBDC TIMEOUT 5
Chú ý: Chỉ dùng TIMEOUT trong chương tr ình.
22. [TITLE ]
Đặt tiêu đề cho cửa sổ BROWSE, ví dụ:
USE KHOIA
BROWSE FIELD HODEM,TEN TITLE ' Thi khoi A'
23.[VALID [:F] [ERROR ]]
Chỉ sửa dữ liệu khi thoả mãn , ví dụ:
USE KHOIA
BROWSE VALID KV0 ERROR 'Không đư ợc phép'
Nghĩa là khi sửa trường KV (Khu vực), ta chỉ có thể g õ vào các số 1,2, 3 mà
thôi, còn nếu gõ vào khác các số đó thì có thông báo lỗi .
24. [WHEN ]
Chỉ hiệu chỉnh khi thoả mãn điều kiện
USE KHOIA
BROWSE WHEN KV0
25. [WIDTH ]
Đặt độ rộng cho các trường, nếu độ rộng thực của trường lớn hơn thì
nội dung trường sẽ được cuốn theo chiều ngang.
USE KHOIA
BROWSE WIDTH 10
26. [[WINDOW ]
Cửa sổ BROWSE sẽ được hiện trong cửa sổ được định nghĩa trước đó.C
DEFINE WINDOW W1 FROM 1,1 TO 20,40 PANEL
USE KHOIA
BROWSE WINDOW W1
27. [IN [WINDOW] | IN SCREEN]]
Hiện ở một cửa sổ bên trong một cửa sổ khác, ví dụ:
USE KHOIA
DEFINE WINDOW WTo FROM 1,1 TO 20,40 PANEL
DEFINE WINDOW WNho FROM 4,4 TO 15,30 PANEL
ACTIVATE WINDOW Wto
BROWSE WINDOW WNho In Wto
28. [COLOR SCHEME | COLOR ]
Chỉ định lược đồ màu hoặc danh sách các thuộc tính màu. Thông thường
COLOR SCHEME 10 là màu ngầm định.C
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 126
USE KHOIA
BROWSE COLOR SCHEME 5
Hoặc:
USE KHOIA
BROWSE COLOR 4
10.2 Các tuỳ chọn cao cấp của Lệnh CHANGE v à EDIT
CHANGE
[FIELDS ]
[]
[FOR ]
[WHILE ]
[FONT [, ]]
[STYLE ]
[FREEZE ]
[KEY [, ]]
[LEDIT] [REDIT]
[LPARTITION]
[NOAPPEND]
[NOCLEAR]
[NODELETE]
[NOEDIT | NOMODIFY]
[NOLINK]
[NORMAL]
[NOWAIT]
[PARTITION ]
[PREFERENCE ]
[SAVE]
[TIMEOUT ]
[TITLE ]
[VALID [:F] [ERROR ]]
[WHEN ]
[WIDTH ]
[[WINDOW ]
[IN [WINDOW] | IN SCREEN]]
[COLOR SCHEME | COLOR ]
Nếu không cung cấp [scope] th ì ALL được thiết lập, mỗi mệnh đề và từ khoá
khác như lệnh BROWSE.
Lệnh EDIT hoàn toàn như lệnh CHANGE.
10.3 Các tuỳ chọn cao cấp của lệnh @...SAY...GET
Lệnh có dạng tổng quát như sau:
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 127
@
SAY
[FUNCTION ]
[PICTURE ]
[SIZE , ]
[FONT [, <expN3]]
[STYLE ]
[COLOR SCHEME | COLOR ]
GET |
[FUNCTION ]
[PICTURE ]
[FONT [, ]]
[STYLE ]
[ENABLE | DISABLE]
[MESSAGE ]
[[OPEN] WINDOW ]
[RANGE [] [, ]]
[SIZE , ]
[VALID | [ERROR ]]
[WHEN ]
[COLOR SCHEME | COLOR ]
READ
1.
Dòng (row) và cột (column) nơi bắt đầu hiển thị dữ liệu, nếu dùng SET DEVICE
TO PRINTER để đưa kết xuất ra máy in th ì hàng có thể nằm trong phạm vi từ 0
ddến 32.768 và cột từ 0 đến 255.
2.
là biểu thức bất kỳ, ví dụ:
@10,12 SAY 'Chào bạn'
@11,12 SAY 12*23
Phần chung cho cả SAY và GET
3. [FUNCTION ]
Tạo khuôn dạng cho dữ liệu, biểu thức nhận các ký tự sau:
a. Ký tự!
Chuyển mọi ký tự viết thường thành viết hoa:
@2,10 SAY 'Chào bạn ' FUNCTION '!'
Khi hiển thị chữ 'Chào bạn' sẽ biến thành 'chào bạn'.
b. Ký tự ^
Hiện thị các số theo dạng động:
@12,10 SAY 1232*7654 FUNCTION '^'
Sẽ hiển thị ở dòng 12 cột 10 số: .94279E+7
c. Ký tự $
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 128
Hiện thị dữ liệu theo dạng thức tiền tệ:
@12,10 SAY 12*54 FUNCTION '$'
Sẽ hiển thị kết quả: $648
d. Ký tự (
Bao các con số âm bằng các dấu ngoặc đơn:
@12,10 SAY -112*54 FUNCTION '('
Sẽ hiển thịS: ( 6048)
e. Ký tự A hoặc a
Chỉ cho phép nhập các ký tự thuộc bảng chữ cái:
Clear
Ten=Space(7)
@12,10 SAY 'Vào tên của ban? ' GET Ten FUNCTION 'A'
READ
? Ten
f. Ký tự B hoặc b
Gióng thẳng hàng lề trái của trường, ví dụ
USE KHOIA
@12,10 SAY 'Vào họ đệm ? ' GET Hodem FUNCTION 'B'
@13,10 SAY 'Vào tên ? ' GET Ten FUNCTION 'B'
@14,10 SAY 'Vào điểm toán?' GET Toan FUNCTION 'B'
READ
g. Ký tự C
Hiển thị ký tự CR sau một số dương:
@14,10 SAY 1235 FUNCTION 'C'
Kết quả: 1235 CR
h. Ký tự D
Hiển thị giá trị Date:
@14,10 SAY 12345 FUNCTION 'D'
Kết quả sẽ là:1/23/45
i. Ký tự E
Hiển thị và nhập ngày tháng theo kiểu châu âu (ngày/Tháng /Năm):
Clear
A={}
@14,10 SAY 'Vào dữ liệu dạng Date?' GET a FUNCTION 'E'
?a
j. Ký tự I
Canh văn bản nằm giữa:
USE KHOIA
@12,10 SAY 'Vào họ đệm ? ' GET Hodem FUNCTION 'I'
@13,10 SAY 'Vào tên ? ' GET Ten FUNCTION 'I'
@14,10 SAY 'Vào điểm toán?' GET Toan FUNCTION 'I'
READ
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 129
k. Ký tự J
Dóng thẳng hàng bên phải:
USE KHOIA
@12,10 SAY 'Vào họ đệm ? ' GET Hodem FUNCTION 'J'
@13,10 SAY 'Vào tên ? ' GET Ten FUNCTION 'J'
@14,10 SAY 'Vào điểm toán?' GET Toan FUNCTION 'J'
READ
l. Ký tự K
Nguyên cả trường được chọn (bôi đen)
USE KHOIA
@12,10 SAY 'Vào họ đệm ? ' GET Hodem FUNCTION 'K'
@13,10 SAY 'Vào tên ? ' GET Ten FUNCTION 'K'
@14,10 SAY 'Vào điểm toán?' GET Toan FUNCTION 'K'
READ
Nên dùng K khi ta định gõ lại toàn bộ nội dung của trường đó
m. Ký tự L
Hiển thị các chữ số 0 ở đầu thay vì dấu cách:
A=123
@14,10 SAY 'Vào a =' GET a FUNCTION 'L'
READ
n. Ký tự M
Lựa một giá trị trong
USE KHOIA
@12,10 SAY 'Vào khu vực? ' GET kv FUNCTION 'M 1,2,3'
@13,10 SAY 'Vào ưu tiên?' GET ut FUNCTION 'M 1,2,3,4,5, 6,7,8,9,10,11'
READ
o. Ký tự S
Cuốn duyệt theo chiều ngang trong khi sửa biến sau GET kiểu ký tự:
p. Ký tự T
Cắt bỏ dấu cách trước vào sau ra khỏi trường ký tự
2. [PICTURE ]
a. Ký tự!
Chuyển mọi ký tự viết thường thành viết hoa:
@2,10 SAY 'chào bạn?' PICTURE '!!!!!!!!'
Khi hiển thị chữ 'chào bạn' sẽ biến thành 'chào bạn'.
Chú ý: Số ký tự! bằng số ký tự của dữ liệu
b. Ký tự #
Chỉ cho phép nhập các ký số, dấu cách v à dấu +,-
USE KHOIA
@10,12 SAY 'Vao khu vực?' GET kv PICTURE '#'
READ
c. Ký tự $
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 130
Hiển thị giá trị tiền tệH:
@10,20 Say 12345 PICTURE '$$$$$$'
d. Ký tự,
Dấu phẩy ngăn cách ba chữ số để dễ đọc:
@10,20 Say 1234567.87 PICTURE '99,999,999.99'
Kết quả:1,234,567.89
e. Ký tự 9
Với dữ liệu character chỉ cho phép nhập ký số, với dữ liệu kiểu Numeric, chỉ cho
phép nhập các ký số và dấu -,+
A=0
@10,20 Say 'Vào a =' GET a PICTURE '99999'
READ
f. Ký tự A
Chỉ cho phép nhập các ký tự chữ cái:
Ten=Space(7)
@10,20 Say 'Vào tên của bạn?' GET ten PICTURE 'AAAAAAA'
READ
g. Ký tự L
Chỉ cho phép nhập dữ liệu kiểu Logic (T/F/Y/N)
a=.T.
@10,20 Say 'Vào giá trị a?' GET a PICTURE 'L'
READ
h. Ký tự N
Chỉ cho phép nhập các chữ cái và ký số:
a=Space(7)
@10,20 Say 'Vào giá trị a?' GET a PICTURE 'NNNNNNN'
READ
i. Ký tự X
Cho phép nhập bất kỳ ký tự nào.
j. Ký tự Y
Chỉ cho phép nhập Y,y,N,n
3. [SIZE , ]
Cho phép dữ liệu hiện trên dòng và cột.
@1,2 SAY 'Tin học Quản lý' SIZE 4,4
Sẽ hiện thị:
Tin
Học
Quan
Ly
4. [FONT [, <expN3]]
Như trong lệnh BROWSE
5. [STYLE ]
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 131
Như trong lệnh BROWSE
6. [COLOR SCHEME | COLOR ]
Như trong lệnh BROWSE
7. |
Biến sau GET có thể là biến bộ nhớ hoặc biến trường
8. [ENABLE | DISABLE]
Cho phép hoặc không cho phép truy cập đến biến GET.
a=Space(7)
@10,20 Say 'Vào giá trị a?' GET a Disable
READ
Sau đó muốn truy cập biến a:
a=Space(7)
@10,20 Say 'Vào giá trị a?' GET a Enable
READ
9. [MESSAGE ]
Định nghĩa một thông báo khi GET đang đ ược hiểu chỉnh
a='Hoàng Văn Tài'
@10,20 Say 'Vào giá trị a?' GET a MESSAGE 'Chỉ sửa tên'
READ
10. [[OPEN] WINDOW ]
Chỉ định tên cửa sổ nơi sẽ hiệu chỉnh trường MEMO
Ví dụ:
Clear
DEFINE WINDOW Wind1 FROM 1,1 TO 20,20
DEFINE WINDOW Wind2 FROM 12,30 TO 20,70
USE nhansu
@1,1 Get Tieusu1 OPEN WINDOW Wind1
@2,1 Get Tieusu2 OPEN WINDOW Wind2
Giả sử: Tieusu1 và Tieusu2 là hai trường MEMO
11. [RANGE [] [, ]]
Khoảng hợp lệ của dữ liệu nhập
tuoi=0
@10,20 Say 'Vào tuổi của bạn?' GET tuoi RANGE 13,35
READ
12. [VALID | [ERROR ]]
Như trong lệnh BROWSE
13. [SIZE , ]
Vùng hiệu chỉnh được xác định bằng dòng và cột:
Kieu=Space(50)
@10,20 Say 'Vào một câu kiều?' GET Kieu SIZE 4,15
READ
14. [WHEN ]
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 132
Như trong lệnh BROWSE
15. [COLOR SCHEME | COLOR ]
Như trong lệnh BROWSE
Bài tập:
1. 1. Thử lại các tuỳ chọn của lệnh BROWSE tr ên máy
2. 2. Thử lại các tuỳ chọn của lệnh CHANGE v à EDIT trên máy
3. 3. Thử lại các tuỳ chọn của lệnh @...SAY...GET tr ên máy
4. Bạn thử thiết kế một chương trình có sử dụng các tuỳ chọn đó
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 133
Chương 11: Chương tr ình con
11.1 Đặt vấn đề
Khi lập trình để giải quyết một vấn đề, ta th ường chia vấn đề đó thành những
phần nhỏ tương đối độc lập, mỗi phần nhỏ đó th ường được mô tả bằng một
chương trình con dạng PROCEDURE hay FUNCTION. Với cách n ày chúng ta
rút ngắn được chương trình do không phải viết lặp nhiều đoạn lệnh, ngo ài ra nếu
gặp lỗi trong một thủ tục nào đó ta dễ dàng sửa lỗi trong thủ tục đó mà thôi. Khi
thực hiện các PROCEDURE ta dùng lệnh:
DO [WITH ] còn khi thực hiện các
FUNCTION ta viết tên hàm và các tham biến của hàm ví dụ: Tong(x,y), ta sẽ mô
tả chi tiết ở các phần sau.
11.2 Thủ tục (PROCEDURE)
Thủ tục có dạng:
PROCEDURE
PARAMETER [,]...]
RETURN
Sau đây là ý nghĩa của các thành phần trong cấu trúc trên:
PROCEDURE
Đây là dòng đầu của thủ tục, tên thủ tục theo nguyên tắc đặt tên biến (ở phần 1).
PARAMETER [,]...]
Dùng để khai báo các tham số hình thức, để khi gọi sẽ truyền cho nó các tham số
cụ thể, các tham số cụ thể này theo thứ tự của tham số hình thức.
Phần này chứa các lệnh của thủ tục
RETURN
Là lệnh báo kết thúc thủ tục
Ví dụ 1: Vào hai số tính tổng của nó
Clear
Set talk off
Set deci to 4
Store 0 To s, a, b && Khai báo 3 số
Do Vao With a, b &&Chạy chương trình Vao và truyền cho nó hai tham biến a,b
Do Tong With s, a, b &&Chạy chương trình Tong và truyền cho nó ba tham biến
s,a,b
?'Tổng s =',s && In kết quả ở chương trình chính
*** Thủ tục vào hai số *******
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 134
Procedure Vao
Parameter x,y
Input 'Vào x =' To x
Input 'Vào y =' To y
Return
*** Thủ tục tính tổng hai số *******
Procedure Tong
Parameter Tong,x,y
Tong=x+y
Return
Ví dụ 2:
SET CENTURY ON
a={}
Do longdate With a,{11/29/99}
?a
PROCEDURE longdate
PARAMETER c,mdate
c=CDOW(mdate) + ', ' + MDY(mdate)
RETURN
Sau khi chạy chương trình sẽ cho kết quả:
Monday, November 29, 1999
Chương trình trên cũng còn có thể viết như sau:
SET CENTURY ON
?longdate ({11/29/99})
PROCEDURE longdate
PARAMETER mdate
RETURN CDOW(mdate) + ', ' + MDY(mdate)
Ta không dùng DO mà dùng như FUNCTION.
Ví dụ 3: Truyền mảng vào thủ tục
Clear
Set talk off
Dimension a(10)
Store 0 to a
Do Vao With a
For i=1 to 10
?a(i)
Next
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 135
** Thủ tục vào mảng ****
Proc Vao
Para c
For i=1 to 10
Input 'vao c('+str(i,1)+')=' to c(i)
Next
Return
Ví dụ 4: Giả sử ta có tệp CSDL có t ên KHOIA như sau:
STT SBDC HODEM TEN NGAYSINH KV DT TOAN LY HOA TONG
1 99A0001 Nguyễn Thị Hà 171279 1 01 6.5 5.0 5.5 17.0
2 99A0002 Trịnh Vĩnh Anh 280278 2 02 5.0 3.5 4.0 12.5
3 99A0003 Đỗ Văn Hùng 280679 3 03 7.0 5.5 6.0 18.5
4 99A0004 Trần Thanh Hải 011080 1 01 8.5 7.0 7.5 23.0
5 99A0005 Phan Trọng Thanh 241280 1 5A 9.0 7.5 8.0 24.5
6 99A0006 Đàm Hữu Thắng 190581 1 5B 3.0 1.5 2.0 6.5
7 99A0007 Lê Thanh Hồng 171177 2 09 4.5 3.0 3.5 11.0
8 99A0008 Nguyễn Phi Chung 020979 2 08 5.5 4.0 4.5 14.0
9 99A0009 Trần Tuấn Bảo 090280 2 07 6.5 5.0 5.5 17.0
10 99A0010 Nguyễn Đình Thu 151179 2 06 7.0 5.5 6.0 18.5
11 99A0011 Nguyễn Văn Hoàng 100177 2 09 8.5 7.0 7.5 23.0
12 99A0012 Đinh Việt Hữu 020180 2 09 9.0 7.5 8.0 24.5
13 99A0013 Đỗ Nguyễn Chu 071180 2 04 10.0 8.5 9.0 27.5
14 99A0014 Lý Xuân Thanh 200880 2 04 2.5 1.0 1.5 5.0
Lập một thủ tục tính tổng trung b ình của cột tổng, sau đó chương trình chính
truyền tham biến thực vào để nhận:
Set Talk off
Clear
Store 0 To Tb
Do TrungBinh With Tb
?'Điểm trung bình chung là:',Tb
PROCEDURE TBINH
PARAMETER DTB
USE KhoiA
AVERAGE Tong To DTB
RETURN
11.3 Hàm (FUNCTION)
Hàm có cấu trúc như sau:
FUNCTION
PARAMETER [,]...]
RETURN
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 136
Sau đây là ý nghĩa của các thành phần trong cấu trúc trên:
FUNCTION
Đây là dòng đầu của thủ tục, tên thủ tục theo nguyên tắc đặt tên biến (ở phần 1).
PARAMETER [,]...]
Dùng để khai báo các tham số h ình thức, để khi gọi sẽ truyền cho nó các tham số
cụ thể, các tham số cụ thể này theo thứ tự của tham số hình thức.
Phần này chứa các lệnh của hàm
RETURN
Là lệnh báo kết thúc hàm và gán giá trị của biểu thức cho tên hàm.
Ví dụ 1. Giả sử ta có tệp A99.DBF là tệp chứa các thông tin về tuyển sinh khối A
như sau:
STT SBDC HODEM TEN NGAYSINH KV
DOITUONG TOAN LY HOA TONG TC
1 99A0001 Nguyễn Thị Hà 171279 1 01 6.5 5.0 5.5 17.0
2 99A0002 Trịnh Vĩnh Anh 280278 2 02 5.0 3.5 4.0 12.5
3 99A0003 Đỗ Văn Hùng 280679 3 03 7.0 5.5 6.0 18.5
4 99A0004 Trần Thanh Hải 011080 1 01 8.5 7.0 7.5 23.0
5 99A0005 Phan Trọng Thanh 241280 1 5A 9.0 7.5 8.0 24.5
6 99A0006 Đàm Hữu Thắng 190581 1 5B 3.0 1.5 2.0 6.5
7 99A0007 Lê Thanh Hồng 171177 2 09 4.5 3.0 3.5 11.0
8 99A0008 Nguyễn Phi Chung 020979 2 08 5.5 4.0 4.5 14.0
9 99A0009 Trần Tuấn Bảo 090280 2 07 6.5 5.0 5.5 17.0
10 99A0010 Nguyễn Đình Thu 151179 2 06 7.0 5.5 6.0 18.5
11 99A0011 Nguyễn Văn Hoàng 100177 2 09 8.5 7.0 7.5 23.0
12 99A0012 Đinh Việt Hữu 020180 2 09 9.0 7.5 8.0 24.5
13 99A0013 Đỗ Nguyễn Chu 071180 2 04 10.0 8.5 9.0 27.5
14 99A0014 Lý Xuân Thanh 200880 2 04 2.5 1.0 1.5 5.0
.......
Tuỳ theo Đối tượng mà điểm được tăng như sau:
Tăng 3.5 điểm nếu Đối tượng là '01','02','03','04','5A','5B' và khu vực 3
Tăng 2.5 điểm nếu Đối tượng là '06','07','08' và khu vực 3
Không tăng nếu Đối tượng là '10','11' và khu vực 3
Tăng 4.5 điểm nếu Đối tượng là '01','02','03','04','5A','5B' và khu vực 2
Tăng 3.5 điểm nếu Đối tượng là '06','07','08 và khu vực 2
Tăng 1 điểm nếu Đối tượng là '10','11' và khu vực 2
Tăng 5.5 điểm nếu Đối tượng là '01','02','03','04','5A','5B' và khu vực 1
Tăng 4.5 điểm nếu Đối tượng là '06','07','08' và khu vực 1
Tăng 4 điểm nếu Đối tượng là '10','11' và khu vực 1
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 137
Tăng 2 điểm nếu đối tượng là '09'
Ta lập trình dùng hàm INLIST như sau:
set talk off
use a99
REPL all TC with tonghs+ 3.5 for ut1(DoiTuong) and khuvuc='3'
REPL all TC with tonghs+ 2.5 for ut2(DoiTuong) and khuvuc='3'
REPL all TC with tonghs for ut3(DoiTuong) and khuvuc ='3'
REPL all TC with tonghs+ 4.5 for ut1(DoiTuong) and khuvuc='2'
REPL all TC with tonghs+ 3.5 for ut2(DoiTuong) and khuvuc='2'
REPL all TC with tonghs+ 1 for ut3(DoiTuong) and khuvuc='2'
REPL all TC with tonghs+ 5.5 for ut1(DoiTuong) and khuvuc='1'
REPL all TC with tonghs+ 4.5 for ut2(DoiTuong) and khuvuc='1'
REPL all TC with tonghs+ 4 for ut3(DoiTuong) and khuvuc='1'
REPL all TC with tonghs+ 2 for DoiTuong='09' and khuvuc='2'
************ chuong trinh con ***********
Function ut1
Parameter DoiTuong
Ut1=Inlist(DoiTuong,'01','02','03','04','5A','5B')
Return Ut1
Function ut2
Parameter DoiTuong
Ut2=Inlist(Doituong,'06','07','08')
Return Ut2
Function ut3
Parameter DoiTuong
Ut3=!Inlist(Doituong,'01','02','03','04','5A','5B','06','07','08','09')
Return Ut3
11.4 Biến toàn cục (Global) và biến cục bộ (Private)
a. Biến toàn cục
Trong một chương trình khi chúng ta khởi tạo giá trị cho các biến nhớ v à mảng,
thì giá trị các biến đó sẽ tồn tại trong bộ nhớ cho đến khi ch ương trình kết thúc
và chương trình chạy sau không thể sử dụng được các biến nhớ đó. Nhưng có
nhiều khi ta muốn chương trình chạy sau sử dụng được các biến đó thì làm thế
nào?
Để làm được điều này ta phải khai báo các biến đó là toàn cục bằng lệnh sau:
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 138
PUBLIC
Ví dụ:
PUBLIC a,b,c
Như vậy a,b, c là biến toàn cục.
Để khai báo mảng toàn cục ta dùng lệnh:
PUBLIC [ARRAY]
Ví dụ:
PUBLIC ARRAY A(4), B(4), C(4,5) ho ặc
PUBLIC A(4), B(4) ,C(4,5)
Chú ýC:
Các biến toàn cục được khởi tạo bởi PUBLIC có giá trị ba n đầu là .F.
Lệnh PUBLIC phải thực hiện trước, trước khi gán giá trị cho các biến.
Các biến tạo ra trong cửa sổ lệnh là toàn cục
b. Biến cục bộ
Khi thực hiện một chương trình, nếu trong một chương trình con ta muốn dùng
tên biến trùng với biến toàn cục, nhưng không muốn làm thay đổi biến toàn cục
thì nên khai báo biến đó là biến cục bộ theo lệnh sau:
PRIVATE
Ví dụ:
PRIVATE a, b, c
Thì biến a, b, c là biến cục bộ, nghĩa là nó chỉ có ý nghĩa trong chương trình con
đó mà thôi. Sau đây là ví dụ về chương trình.
Set talk off
Clear
PUBLIC a, b
a=1
b=2
Do InAn
?a, b
Procedure InAn
Private a
a=150
b=100
?' a b '
?a, b
Return
Kết quả sau khi chạy chương trình là:
a b
150 150 100 (giá trị trong chương trình con InAn)
1 1 100 (a là cục bộ, nên ra khỏi chương trình con a vẫn bằng 1)
Lệnh PRIVATE còn có dạng khác:
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 139
PRIVATE ALL [LIKE | EXCEPT ]
Ví dụ 1:
Cục bộ cho tất cả các biến.
PRIVATE ALL
Ví dụ 2:
Cục bộ với những biến có chữ đầu là B.C
PRIVATE ALL LIKE b*
Ví dụ 3:
Cục bộ với tất cả các biếnC, trừ biến có chữ đầu l à a
PRIVATE ALL LIKE EXCEPT A*
Ví dụ 4:
Cục bộ với tất cả các biếnC, trừ biến có chữ đầu l à a và chữ thứ 3 là c.
PRIVATE ALL LIKE EXCEPT a?c*
Ví dụ 5: Cục bộ với tất cả các biến có 3 ký tự, trừ biến có chữ đầu l à A và chữ
thứ 3 là d
PRIVATE ALL LIKE EXCEPT a?d
Chú ý:
Biến khai báo ở chương trình chính là toàn cục, ví dụ trên có thể viết như sau:
Set talk off
Clear
a=1
b=2
Do InAn
?a, b
Procedure InAn
Private a
a=150
b=100
?' a b '
?a, b
Return
c. Hiển thị biến nhớ
Để hiển thị nội dung biến nhớ (tên biến, toàn cuc hay cục bộ, kiểu và độ lớn) hãy
dùng lệnh sau:
DISPLAY MEMORY [LIKE ]
[TO PRINTER | TO FILE ]
d. Giải phóng các biến nhớ
Để giải phóng các biến nhớ khỏi bộ nhớ h ãy thực hiện lệnh sau:
RELEASE
Ví dụ
a=1
b='Tin hoc'
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 140
c=.T.
Release b,c
Display memo
Khi chạy chương trình chỉ có biến a được hiển thị.
Lệnh giải phóng biến nhớ còn có cách viết khác:
RELEASE ALL [ LIKE | EXCEPT ]
Ví dụ:
D1=12
D2=11
C=4
RELEASE ALL Like D*
Hoặc có thể viết:
D1=12
D2=11
C=4
RELEASE ALL EXCEPT C*
Chú ý: Chỉ có lệnh RELEASE mới xoá đ ược biến toàn cục.
Ví dụ:
PUBLIC a1, a2,a3, b
Store 10 to a1, a2, a3
Store 2 To b
Release all like a*
Display Memory
Sau khi chạy chương trình ta thấy biến a1,a2, a3 không bị xo á
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 141
Chương 12. Lệnh ghép ngang (JOIN) và lệnh cập nhật (UPDATE)
12.1 Lệnh Join
Tạo một tệp CSDL mới từ tệp CSDL hiện h ành và một tệp CSDL thứ hai mở
trong vùng làm việc khác. Mỗi bản ghi của tệp CSDL mới đ ược tạo bởi các
trường trong hai bản ghi tương ứng. Sau đây là cú pháp lệnh:
JOIN WITH | WITH
TO
FOR
[FIELDS | FIELDS LIKE | FIELDS EXCEPT
]
Các mệnh đề trên có ý nghĩa như sau:
|
Xác định vùng làm việc của tệp CSDL thứ hai. Vùng làm việc có thể được xác
định qua biểu thức số hoặc qua biểu thức ký tự .
TO
là tên của tệp CSDL mới được tạo thành từ lệnh trên.
FOR
Khi thực hiện lệnh JOIN mỗi bản ghi trong tệp CSDL hiện h ành sẽ được kết hợp
lần lượt với từng bản ghi trong tệp CSDL thứ hai, nh ưng chỉ những bản ghi thoả
mãn điều kiện .
[FIELDS | FIELDS LIKE | F IELDS EXCEPT ]
Chỉ những trường trong hoặc trong LIKE hoặc không phải
trong EXCEPT mới được kết nối, ví dụ:
FIELDS LIKE A*,P*
FIELDS LIKE A*,P* EXCEPT PARTNO*
Ví dụ ta có hai tệp CSDL. Tệp thứ nhất có t ên HOSO.DBF với nội dung sau:
Record# HOTEN NGAYSINH SBDC KHUVUC DOITUONG
1 Hoàng Thanh Hà 191180 99A311 3 11
2 Hoàng Trung Thành 231181 99A669 1 08
3 Nguyễn Anh Tuấn 250880 99A784 2 10
4 Vương Văn Hiệp 250778 99A971 2 09
5 Hoàng Văn Mạnh 300680 99A483 2 09
6 Hoàng Thọ Diện 281177 99A116 2 09
7 Vũ Thị Na 100479 99A492 1 08
8 Hoàng Văn Tường 260179 99A806 2 09
9 Nguyễn Văn Thuyết 210680 99A627 2 11
10 Bùi Thế Thuật 180281 99A633 2 10
11 Nguyễn Văn Đại 020879 99A171 2 09
12 Lê Thanh Nam 170880 99A504 2 09
13 Nguyễn Xuân Đô 041080 99A953 1 08
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 142
14 Đỗ Trí Duy 100481 99A123 2 09
15 Đinh Quang Hải 280479 99A328 2 10
16 Dương Thị Lan 230481 99A411 3 10
17 Nguyễn Quang Phú 240480 99A565 3 10
18 Hà Tất Thắng 151181 99A689 2 10
19 Bùi Duy Thức 100981 99A700 3 10
20 Lâm Hồng Hiệp 080180 99A223 3 11
Tệp thứ hai có tên DIEMTHI.DBF có nội dung như sau:
Record# SBDC TOAN10 LY10 HOA10 TONGDIEM30
1 99A311 5.5 4.5 6.8 16.8
2 99A669 6.5 4.3 6.4 17.2
3 99A784 7.5 5.9 7.5 20.9
4 99A971 6.5 6.0 7.0 19.5
5 99A483 5.6 7.4 4.6 17.6
6 99A116 4.8 6.2 5.0 16.0
7 99A492 5.8 6.6 5.1 17.5
8 99A806 6.8 6.9 3.7 17.4
9 99A627 6.9 6.1 4.9 17.9
10 99A633 6.9 5.4 5.6 17.9
11 99A171 7.0 5.7 6.6 19.3
12 99A504 7.0 5.4 6.8 19.2
13 99A953 3.0 4.2 5.7 12.9
14 99A123 4.1 4.4 5.3 13.8
15 99A328 4.1 8.7 5.4 18.2
16 99A411 4.1 7.6 4.3 16.0
17 99A565 4.1 6.8 7.3 18.2
18 99A689 5.1 6.2 8.6 19.9
19 99A700 5.1 6.6 3.1 14.8
20 99A223 6.3 6.1 8.8 21.2
Ví dụ 1:
Set talk off
Select 1
Use HoSo
Select 2
Use DiemThi
Join With HoSo To TepMoi For sbdc=HoSo.Sbdc
Use TepMoi
Browse
Khi chương trình chạy ta được TepMoi như sau:
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 143
Record#
SBDC TOAN10 LY10 HOA10 TONGDIEM30 HOTEN NGAYSINH KHUVUC DOITU ONG
1 99A311 5.5 4.5 6.8 16.8 Hoàng Thanh Hà 191180 3 11
2 99A669 6.5 4.3 6.4 17.2 Hoàng Trung Thành 231181 1 08
3 99A784 7.5 5.9 7.5 20.9 Nguyễn Anh Tuấn 250880 2 10
4 99A971 6.5 6.0 7.0 19.5 Vương Văn Hiệp 250778 2 09
5 99A483 5.6 7.4 4.6 17.6 Hoàng Văn M ạnh 300680 2 09
6 99A116 4.8 6.2 5.0 16.0 Hoàng Th ọ Diện 281177 2 09
7 99A492 5.8 6.6 5.1 17.5 Vũ Thị Na 100479 1 08
8 99A806 6.8 6.9 3.7 17.4 Hoàng Văn Tư ờng 260179 2 09
9 99A627 6.9 6.1 4.9 17.9 Nguyễn Văn Thuyết 210680 2 11
10 99A633 6.9 5.4 5.6 17.9 Bùi Thế Thuật 180281 2 10
11 99A171 7.0 5.7 6.6 19.3 Nguyễn Văn Đại 020879 2 09
12 99A504 7.0 5.4 6.8 19.2 Lê Thanh Nam 170880 2 09
13 99A953 3.0 4.2 5.7 12.9 Nguyễn Xuân Đô 041080 1 08
14 99A123 4.1 4.4 5.3 13.8 Đỗ Trí Duy 100481 2 09
15 99A328 4.1 8.7 5.4 18.2 Đinh Quang H ải 280479 2 10
16 99A411 4.1 7.6 4.3 16.0 Dương Th ị Lan 230481 3 10
17 99A565 4.1 6.8 7.3 18.2 Nguyễn Quang Phú 240480 3 10
18 99A689 5.1 6.2 8.6 19.9 Hà Tất Thắng 151181 2 10
19 99A700 5.1 6.6 3.1 14.8 Bùi Duy Th ức 100981 3 10
20 99A223 6.3 6.1 8.8 21.2 Lâm Hồng Hiệp 080180 3 11
Ví dụ 2:
Set talk off
Select 1
Use HoSo
Select 2
Use DiemThi
Join With HoSo To TepMoi For sbdc=HoSo.Sbdc Fields Hoso.Hoten, SBDC,
TongDiem30
Use TepMoi
Browse
Khi chương trình chạy ta được TepMoi như sau:
Record# HOTEN SBDC TONGDIEM30
1 Hoàng Thanh Hà 99A311 16.8
2 Hoàng Trung Thành 99A669 17.2
3 Nguyễn Anh Tuấn 99A784 20.9
4 Vương Văn Hiệp 99A971 19.5
5 Hoàng Văn Mạnh 99A483 17.6
6 Hoàng Thọ Diện 99A116 16.0
7 Vũ Thị Na 99A492 17.5
8 Hoàng Văn Tường 99A806 17.4
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 144
9 Nguyễn Văn Thuyết 99A627 17.9
10 Bùi Thế Thuật 99A633 17.9
11 Nguyễn Văn Đại 99A171 19.3
12 Lê Thanh Nam 99A504 19.2
13 Nguyễn Xuân Đô 99A953 12.9
14 Đỗ Trí Duy 99A123 13.8
15 Đinh Quang Hải 99A328 18.2
16 Dương Thị Lan 99A411 16.0
17 Nguyễn Quang Phú 99A565 18.2
18 Hà Tất Thắng 99A689 19.9
19 Bùi Duy Thức 99A700 14.8
20 Lâm Hồng Hiệp 99A223 21.2
12.2 Lệnh UPDATE
Lệnh này dùng để cập nhật dữ liệu vào tệp CSDL hiện hành từ một tệp CSDL
thứ hai đang mở trong một vùng làm việc khác. Cú pháp lệnh như sau:
UPDATE ON
FROM |
REPLACE WITH
[, WITH ...]
[RANDOM]
Các mệnh đề trên có ý nghĩa như sau:
ON
Field là trường khoá, tệp CSDL hiện thời phải đ ược sắp xếp theo lệnh SORT
hoặc lệnh INDEX trên trường này theo thứ thự tăng dần.
FROM |
Xác định vùng làm việc của tệp CSDL thứ hai, nơi để lấy dữ liệu chuyển cho tệp
hiện thời. Vùng làm việc có thể được xác định qua biểu thức số hoặc
qua biểu thức ký tự .
REPLACE WITH [, WITH ...]
Trường trong tệp CSDL hiện thời sẽ đ ược nhận giá trị v.v..
RANDOM
Sẽ được dùng nếu tệp CSDL thứ hai không được sắp xếp theo trường khoá tăng
dần. Nếu tệp CSDL thứ hai được sắp xếp tăng dần theo trường khoá thì mệnh đề
này không cần thiết và qúa trình cập nhật được tiến hành nhanh hơn.
Giả sử ta có tệp Hoso.dbf có các trường sau:
Record# HOTEN NGAYSINH SBDC TONG
1 Hoàng Thọ Diện 281177 99A116 0.00
2 Đỗ Trí Duy 100481 99A123 0.00
3 Nguyễn Văn Đại 020879 99A171 0.00
4 Lâm Hồng Hiệp 080180 99A223 0.00
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 145
5 Hoàng Thanh Hà 191180 99A311 0.00
6 Đinh Quang Hải 280479 99A328 0.00
7 Dương Thị Lan 230481 99A411 0.00
8 Hoàng Văn Mạnh 300680 99A483 0.00
9 Vũ Thị Na 100479 99A492 0.00
10 Lê Thanh Nam 170880 99A504 0.00
11 Nguyễn Quang Phú 240480 99A565 0.00
12 Nguyễn Văn Thuyết 210680 99A627 0.00
13 Bùi Thế Thuật 180281 99A633 0.00
14 Hoàng Trung Thành 231181 99A669 0.00
15 Hà Tất Thắng 151181 99A689 0.00
16 Bùi Duy Thức 100981 99A700 0.00
17 Nguyễn Anh Tuấn 250880 99A784 0.00
18 Hoàng Văn Tường 260179 99A806 0.00
19 Nguyễn Xuân Đô 041080 99A953 0.00
20 Vương Văn Hiệp 250778 99A971 0.00
Và tệp Diem.dbf có các trường sau:
Record# SBDC TOAN10 LY10 HOA10 TONGDIEM30
1 99A223 6.3 6.1 8.8 21.2
2 99A784 7.5 5.9 7.5 20.9
3 99A689 5.1 6.2 8.6 19.9
4 99A971 6.5 6.0 7.0 19.5
5 99A171 7.0 5.7 6.6 19.3
6 99A504 7.0 5.4 6.8 1 9.2
7 99A328 4.1 8.7 5.4 18.2
8 99A565 4.1 6.8 7.3 18.2
9 99A627 6.9 6.1 4.9 17.9
10 99A633 6.9 5.4 5.6 17.9
11 99A483 5.6 7.4 4.6 17.6
12 99A492 5.8 6.6 5.1 17.5
13 99A806 6.8 6.9 3.7 17.4
14 99A669 6.5 4.3 6.4 17.2
15 99A311 5.5 4.5 6.8 16.8
16 99A116 4.8 6.2 5.0 16.0
17 99A411 4.1 7.6 4.3 16.0
18 99A700 5.1 6.6 3.1 14.8
19 99A123 4.1 4.4 5.3 13.8
20 99A953 3.0 4.2 5.7 12.9
Ta muốn đưa cột TongDiem30 của tệp CSDL Diem.dbf sâng cột Tong của tệp
Hoso.dbf theo trường khoá là SBDC, ta lập trình như sau:
Set talk off
Clear
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI
ELEC Trang 146
Select 1
Use Diem
Select 2
Use Hoso
Index on sbdc to sbdc1
Update On Sbdc From Diem Replace Tong With Diem.To ngDiem30 Random
Select 2
Browse
Sau khi chạy chương trình ta có kết quả:
Record# HOTEN NGAYSINH SBDC TONG
1 Hoàng Thọ Diện 281177 99A116 16.00
2 Đỗ Trí Duy 100481 99A123 13.80
3 Nguyễn Văn Đại 020879 99A171 19.30
4 Lâm Hồng Hiệp 080180 99A223 21.20
5 Hoàng Thanh Hà 191180 99A311 16.80
6 Đinh Quang Hải 280479 99A328 18.20
7 Dương Thị Lan 230481 99A411 16.00
8 Hoàng Văn Mạnh 300680 99A483 17.60
9 Vũ Thị Na 100479 99A492 17.50
10 Lê Thanh Nam 170880 99A504 19.20
11 Nguyễn Quang Phú 240480 99A565 18.20
12 Nguyễn Văn Thuyết 210680 99A627 17.90
13 Bùi Thế Thuật 180281 99A633 17.90
14 Hoàng Trung Thành 231181 99A669 17.20
15 Hà Tất Thắng 151181 99A689 19.90
16 Bùi Duy Thức 100981 99A700 14.80
17 Nguyễn Anh Tuấn 250880 99A784 20.90
18 Hoàng Văn Tường 260179 99A806 17.40
19 Nguyễn Xuân Đô 041080 99A953 12.90
20 Vương Văn Hiệp 250778 99A971 19.50
Hoặc ta có thể viết lại chương trình để chạy nhanh hơn như sau:
Set talk off
Clear
Select 1
Use Diem
Index on SBDC to SbdDiem
Select 2
Use Hoso
Index on sbdc to sbdc1
Update On Sbdc From Diem Replace Tong With Diem.TongDiem30
Select 2
Browse
Các file đính kèm theo tài liệu này:
- giao_trinh_tin_4_visual_fox_2441.pdf