Giáo trình Visual FoxPro 6.0

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]

pdf146 trang | Chia sẻ: truongthinh92 | Lượt xem: 2284 | Lượt tải: 1download
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:

  • pdfgiao_trinh_tin_4_visual_fox_2441.pdf