Tiếp nội dung phần 1, Giáo trình Hệ quản trị cơ sở dữ liệu: Phần 2 cung cấp cho người học những kiến thức như: Lập trình trong Visual Foxpro; Lập trình hướng đối tượng; Phân phối ứng dụng và tạo bộ đĩa cài đặt. Mời các bạn cùng tham khảo để nắm chi tiết nội dung giáo trình!
Trang 1Chương 7 LẬP TRÌNH TRONG VISUAL FOXPRO
7.1 Giới thiệu về lập trình
Trong Visual FoxPro, lập trình thủ tục (lập trình cấu trúc) và phương pháp lập trình hướng đối tượng làm việc chung với nhau, vì thế ta có thể tạo các ứng dụng một cách mềm dẻo Lập trình thủ tục là viết một dãy các lệnh liên tiếp với nhau để thực hiện một nhiệm vụ nào đó
Thông thường bất cứ nhiệm vụ nào làm bằng chương trình đều có thể làm bằng hội thoại hoặc sử dụng công cụ nếu có thời gian
7.1.1 Các kỹ thuật lập trình trong Visual FoxPro
Ta có thể viết chương trình trong Visual FoxPro bằng cách viết các câu lệnh trong:
- Cửa sổ lệnh
- Trong một file chương trình
- Trong các cửa sổ tình huống (Sự kiện- Event) hay phương thức (Method) của Form Designer,
- Trong các cửa sổ thủ tục của Form Designer,
1) Sử dụng cửa sổ lệnh
Ta có thể thực hiện các câu lệnh bằng cách gõ chúng vào cửa sổ lệnh rồi ấn phím Enter Để thực hiện lại các câu lệnh này ta di chuyển con trỏ đến dòng chứa câu lệnh đó rồi ấn phím Enter Ta cũng có thể cho thực hiện nhiều dòng lệnh một lúc bằng cách sau:
- Chọn các dòng lệnh cần thi hành
- Ấn phím Enter
Việc thi hành lệnh trên cửa sổ lệnh có ưu điểm là không lưu các lệnh cần thực hiện vào một file chương trình mà vẫn thực hiện được các lệnh đó
Trang 22) Các bước tạo một file chương trình
a) Một file chương trình Visual FoxPro là một file văn bản chứa dãy các câu lệnh có phần mở rộng là PRG Để tạo một file chương trình ta thực hiện một trong các cách sau:
Trong cửa sổ Project Manager, chọn trang Code, sau đó chọn mục Program rồi chọn nút New
Trong cửa sổ lệnh gõ vào lệnh Modify Command <Tên chương trình> b) Mẫu một File chương trình
Phần giới thiệu: Tên chương trình, ngày viết, tác giả Trước mỗi dòng của phần này đều có dấu *
Phần thiết lập môi trường nhờ các lệnh SET
Phần nhập dữ liệu: Khởi tạo các hằng, biến Nhập dữ liệu cho các biến nhớ,
mở các CSDL
Phần tính toán: Thực hiện các nhiệm vụ của chương trình
Phần in kết quả tính toán
Phần kết thúc: Đóng các bảng CSDL, trả về môi trường làm việc cũ
Ví dụ: Chương trình sau tìm và in ra họ tên, ngày sinh và năm làm việc của một nhân
viên trong bảng nhanvien.dbf có mã nhân viên nhập từ bàn phím
set talk off
set date to french
set default to c:\dulieu
clear
close all
use nhanvien
accept 'nhap ma nhan vien:' to bma
locate for MANV =bma
if found()
? 'Ho va ten:' , hoten
? ' ngay sinh:', ngaysinh
?'nam lam viec:', namlv
Trang 37.1.2 Lưu file chương trình
Sau khi tạo xong một file chương trình để lưu chương trình lên đĩa ta chọn Menu File/ Chọn Save
Nếu tạo file chương trình trong cửa sổ Project Manager, chương trình này sẽ được đưa vào đề án (Project)
7.1.3 Sửa chương trình
Để sửa một chương trình đã có ta thực hiện một trong các cách sau:
- Trong cửa sổ Project Manager chọn trang Code/ chọn mục Program/ Chọn chương trình cần sửa/ Chọn nút Modify
- Trong cửa sổ lệnh gõ vào lệnh Modify Command <Tên chương trình>
7.1.4 Thực hiện chương trình
Để thực thi một chương trình, ta thực hiện theo các cách sau:
- Nếu chương trình nằm trong một Project, chọn chương trình trong Project Manager , rồi chọn nút Run
- Trong cửa sổ lệnh, gõ lệnh Do <Tên file chương trình> Có thể gõ do ? để hiện lên danh sách các chương trình (Nếu không nhớ chương trình)
7.1.5 Ghi chú trong chương trình
Trong khi soạn thảo một chương trình, nên tập thói quen ghi chú cho từng câu lệnh Việc ghi chú giúp cho chương trình dễ đọc, dễ hiểu, dễ bảo trì Khi chạy chương trình máy bỏ qua phần ghi chú
Để ghi chú trong chương trình, ta sử dụng kí hiệu * hoặc && đặt trước mỗi câu ghi chú
* Sử dụng cho câu ghi chú nằm trên một dòng
&& Sử dụng cho câu ghi chú nằm cuối câu lệnh
Trang 47.2 Chương trình con
Chương trình con là một chương trình được một chương trình khác gọi nó tại một nơi nào đó trong thân chương trình Chương trình gọi chương trình con gọi là chương trình gọi Chương trình gọi có đuôi là PRG được người sử dụng gọi nó tại cửa
sổ lệnh gọi là chương trình chính
Visual FoxPro có hai loại chương trình con: thủ tục và hàm Các tệp chương trình riêng lẻ trên đĩa cứng cũng coi như là một thủ tục Thủ tục và hàm cho phép lưu đoạn chương trình thường được sử dụng trong một nơi và có thể gọi thi hành nó mọi nơi trong ứng dụng Điều này làm cho ứng dụng dễ dàng trong việc bảo trì vì nếu có sửa đổi thì chỉ cần sửa đổi một nơi thay cho nhiều nơi
7.2.1 Hàm tự tạo
Hàm tự tạo là một chương trình do người dùng lập ra, nó nhằm trả về cho chương trình gọi nó một giá trị duy nhất thuộc một kiểu dữ liệu nào đó Hàm tự tạo có cấu trúc sau:
Trang 5SET TALK OFF && bật chế độ lập trình
CLEAR
ACCEPT „Họ và tên: ‟ TO ht
INPUT „Điểm toán: ‟ TO t
INPUT „Điểm văn: ‟ TO v
INPUT „Điểm lý: ‟ TO l
INPUT „Điểm anh: ‟ TO a
? ht + „ tốt nghiệp loại: ‟ + loai(t,v,l,a)
WAIT „‟
SET TALK ON && bật chế độ đối thoại
* Phần trình bày chương trình con
Trang 6ENDPROCEDURE | RETURN
Lệnh gọi thủ tục: Ta gọi thủ tục theo mẫu
DO <Tên_thủ_tục> WITH <d.sách_tham_số_thực_sự> [IN <Tên_tệp>]
Danh sách các tham số thực sự phải tương ứng với các tham số hình thức Phần
IN <Tên_tệp> dùng để chỉ ra tệp chứa thủ tục cần gọi Lời gọi thủ tục được sử dụng như một câu lệnh Visual FoxPro coi các tệp chương trình như là các thủ tục
INPUT „Chiều dài: ‟ TO dai
INPUT „Chiều rộng: ‟ TO rong
STORE 0 TO p, s, c
DO chunhat WITH dai,rong,p,s,c
? „Chu vi: ‟, p , ‟Diện tích: ‟ , s , „Đường chéo: ‟, c
1) Tổ chức thành các tệp chương trình riêng biệt
Ta có thể viết các chương trình con dưới dạng các chương trình (có đuôi PRG) và lưu thành từng tệp riêng biệt trên đĩa Giả sử trên đĩa có các tệp ct1.PRG, ct21.PRG, ct22.PRG, ct221.PRG
Trong chương trình ct1.PRG có các lệnh:
DO CT21
Trang 7Cách tổ chức trên có ưu điểm là các chương trình con có tính độc lập Song có nhược điểm thời gian thực hiện chương trình lâu vì máy phải đọc chương trình trên đĩa nhiều lần Cách tổ chức này tiện lợi khi thử chương trình Sau khi chương trình chạy thông, ta nên gộp các chương trình con thành một tệp thủ tục
2) Tổ chức các chương trình con ngay trong chương trình gọi
Nếu độ dài các chương trình con không dài quá, ta có thể tổ chức chúng thành các hàm hay thủ tục và viết chúng vào cuối chương trình gọi theo mẫu:
SET PROCEDURE TO THUVIEN1.PRG
<Dãy_lệnh>
DO CT21
<Dãy_lệnh>
Trang 8Ta có thể không cần dùng tới lệnh SET PROCEDURE TO THUVIEN1.PRG mà dùng lệnh sau:
DO <Tên_thủ_tục> [ WITH <d.sách_th.số_thực_sự>] IN THUVIEN1.PRG
Ví dụ: DO CT21 IN THUVIEN1.PRG
4) Tổ chức các chương trình con trong các cửa sổ thủ tục, sự kiện, phương thức, trang code của project manager,
(sẽ giới thiệu ở phần sau)
7.3 Biến toàn cục, biến cục bộ
bộ tự động mất đi khi chương trình con khai báo nó thực hiện xong hoặc gặp trong các lệnh: QUIT, CLEAR ALL, CLEAR MEMORY, RELEASE <danh_sách_biến>
Trang 9Khi đã che chắn một biến thì việc thay đổi các giá trị của biến ở chương trình cấp dưới không làm thay đổi các giá trị vốn có của nó ở chương trình cấp cao hơn
* Đến đây biến x,y không xác định
x = 33 && khai báo biến x mới và khởi đầu
y = 44 && khai báo biến y mới và khởi đầu
PRIVATE a, b, i, j, alpha, z
Trang 107.4 Truyền tham số
Khi một chương trình A gọi thực hiện chương trình con B, chương trình A có thể truyền cho B một giá trị (hằng, biến, biểu thức) để sử dụng Ngược lại trong quá trình thực hiện, B có thể thay làm đổi giá trị một số biến của A Đó chính là sự truyền tham
số Có hai hình thức truyền tham số:
7.4.1 Truyền theo giá trị (truyền theo tham trị):
A truyền tham số cho B, trị của tham số trong B có thể bị thay đổi, nhưng trị nguyên thủy của tham số trong A không bị thay đổi
7.4.2 Truyền theo địa chỉ (truyền theo tham biến):
A truyền tham số cho B, nếu trị của tham số trong B bị thay đổi thì trị nguyên thủy của tham số trong A cũng thay đổi theo
Việc truyền tham số cho thủ tục: Visual Foxpro mặc định các biến nhớ truyền theo địa chỉ, các tham số khác (các biểu thức và các biến trường) truyền theo giá trị Để cho một biến đơn truyền theo giá trị ta phải đặt nó trong 2 dấu ngoặc đơn (xem như là một biểu thức)
Ví dụ 1: Biến LUONG được truyền cho thủ tục theo giá trị
SET TALK OFF CLEAR
hoten = „Nguyễn Văn An‟
ngaysinh = {09/23/49}
luong = 500 phucap = 200
Do Thutuc1 WITH hoten, ngaysinh, (luong), phucap IN Thutuc
? hoten, ngaysinh,luong, phucap WAIT „‟
*Tệp Thutuc.PRG có nội dung sau:
PROCEDURE Thutuc1 PARA ht,ns,lg,ph
? ht,ns,lg,ph
ht = „Trần Bình‟
ns = „Không nhớ ngày sinh‟
Trang 11lg = 1000
ph = 300 RETURN Kết quả khi chạy chương trình:
Nguyễn Văn An 09/23/49 500 200 Trần Bình Không nhớ ngày sinh 500 300 Việc truyền tham số cho hàm tự tạo có thể theo địa chỉ và theo giá trị, mặc định
là theo giá trị Để thiết lập việc truyền tham số cho hàm tự tạo theo địa chỉ thì phải dùng lệnh:
SET UDFPARMS TO REFERENCE Khi kết thúc chương trình nên thiết lập lại chế độ truyền tham số theo giá trị (mặc định) bằng lệnh:
SET UDFPARMS TO VALUE
Ta cũng có thể truyền tham số theo giá trị hay theo địa chỉ cho hàm tự tạo mà không cần dùng lệnh SET UDFPARMS TO REFERENCE bằng cách: muốn truyền theo giá trị thì đặt các tham số của hàm trong dấu ngoặc đơn bình thường, muốn truyền theo tham biến thì trước tham số truyền theo tham biến phải có dấu @ Hãy xem Ví dụ
2 ở dưới
Các tham số là biến mảng khi truyền vào hàm tự tạo nhất thiết phải truyền theo địa chỉ, nếu truyền theo giá trị sẽ bị lỗi Muốn truyền các biến mảng vào hàm thì ta phải dùng SET UDFPARMS TO REFERENCE hoặc đặt @ trước tên biến mảng Chú ý:
Lệnh SET UDFPARMS TO VALUE không có tác dụng đối với thủ tục
Khi dùng lệnh SET UDFPARMS TO REFERENCE mà cuối chương trình không có SET UDFPARMS TO VALUE thì lệnh SET UDFPARMS TO VALUE vẫn
bị ảnh hưởng tới các lần chạy sau đối với các chương trình khác Lỗi này rất khó phát hiện Nói chung nên dùng @ để truyền theo địa chỉ
Ví dụ 2:
SET TALK OFF CLEAR
Trang 12u = u + 2
v = v + 2 RETURN u + v Kết quả khi chạy chương trình:
Ban đầu: x =1 y = 1 Trị hàm = 6
Sau khi gọi hàm: x = 3 y = 3
Ban đầu: x = 1 y = 1 Trị hàm = 6
Sau khi gọi hàm: x = 1 y = 1
Trang 13CLEAR INPUT „Vào số phần tử của mảng: ‟ TO n DIME a(n),b(n)
FOR i =1 TO n INPUT „a(„+LTRIM(STR(i)+‟) = ‟ TO a(i) INPUT „b(„+LTRIM(STR(i)+‟) = ‟ TO b(i) ENDFOR
t = tvh(n,a,b) && Lệnh 2
? „Tích vo hướng: ‟+ STR(t,9,5) WAIT „ ‟
SET UDFPARMS TO VALUE
*************************************
FUNCTION tvh PARA n,a,b
s = 0
FOR i=1 TO n
s = s+a(i)*b(i) ENDFOR RETURN Nếu bỏ lệnh (1) thì lệnh (2) là sai cú pháp vì phần tử mảng bao giờ cũng truyền theo địa chỉ Nếu bỏ lệnh (1) hoặc lệnh (1) là SET UDFPARMS TO VALUE thì lệnh (2) phải đổi là: t = tvh(n,@a,@b)
7.5 Một số câu lệnh của Visual FoxPro
7.5.1 Các câu lệnh thiết lập môi trường làm việc
SET DATE TO FRENCH | AMERICAN thiết lập ngày tháng dạng dd/mm/yy hoặc mm/dd/yy (ngầm định là AMERICAN)
SET CENTURY ON | OFF : thiết lập năm có 4 chữ số (ngầm định là OFF) SET TALK ON | OFF : bật/tắt chế độ đối thoại (ngầm định là ON)
SET DEFAULT TO <đường dẫn> : chọn thư mục làm việc
CLEAR : xoá sạch màn hình
Trang 14CLEAR ALL: xoá sạch biến nhớ
CLOSE ALL: đóng tất cả các tệp đang mở
7.5.2 các câu lệnh vào, ra dữ liệu đơn giản
Cú pháp ACCEPT [<lời nhắc>] to <biến chuỗi>
Chức năng : Khi gặp lệnh này máy in ra màn hình lời nhắc (nếu có), chờ người
sử dụng nhập một chuỗi từ bàn phím vào cho biến chuỗi
Ví dụ:
ACCEPT „nhap ho ten‟ to bhoten
b) Lệnh INPUT
Cú pháp: INPUT [<Lời nhắc>] to <biến nhớ>
Chức năng: Tương tự lệnh ACCEPT nhưng khác ở chỗ người sử dụng có thể nhập dữ liệu có kiểu bất kỳ cho biến nhớ Khi nhập dữ liệu cần chú ý:
- Kiểu Character: Phải được đặt trong cặp dấu ' ' hay " "
- Kiểu Numberic: Nhập như số bình thường
- Kiểu Date: Phải được để trong dấu {}
- Kiểu Logic: Nhập giá trị T hay F
Ví dụ:
INPUT 'Nhap ngay sinh' TO bngaysinh INPUT 'Nhap diem‟ TO bdiem
Trang 15c) Lệnh WAIT
Cú pháp: WAIT [< lời nhắc>] to <biến chuỗi> [WINDOW]
Chức năng: In ra màn hình lời nhắc (nếu có) và chờ người sử dụng ấn một phím bất kỳ, ký tự gõ vào được lưu vào biến chuỗi Nếu không có lời nhắc máy in ra màn hình dòng chữ “Press any key to continue…” Từ khoá WINDOW dùng để hiện lời nhắc ở cửa sổ nhỏ góc trên, bên trái màn hình
Lệnh ? đưa con trỏ xuống dòng mới, in kết quả của các biểu thức, in xong con trỏ
ở cuối giá trị của biểu thức sau cùng
Lệnh ?? không đưa con trỏ xuống dòng mới, in ngay kết quả các biểu thức tại vị trí con trỏ, in xong con trỏ ở cuối giá trị của biểu thức sau cùng
Trang 16luong = 554.550
phucap = 150.50 clear
@11,20 say „Họ và tên: ‟ + hoten
@12,20 say „Ngày sinh: ‟ + dtoc(ngaysinh)
@13,20 say „Giới tính: ‟ + iif(gioitinh,‟Nam‟,‟Nữ‟)
@14,20 say „Lương chính: ‟ + str(luong,7,2)
@dòng1, cột1 SAY <Lời nhắc1> GET <biến1>
@dòng2, cột2 SAY <Lời nhắc2> GET <biến2>
@1,1 say 'Ma khach hang: ' get Makh
@3,1 say 'Ho ten: ' get Tenkh
@4,1 say 'Gioi tinh: ' get Gioitinh
@5,1 say 'Dia chi: ' get Diachi
@6,1 say 'Dien thoai: ' get Dienthoai
@7,1 say 'An Ctrl+W de ghi lai ban ghi vua sua'
Read
Trang 177.6 Các cấu trúc điều khiển chương trình
Ví dụ: Viết chương trình nhập vào hai số, cho biết số lớn nhất
set talk off clear Input “Nhap so thu nhat” to so1 Input „Nhap so thu hai' to so2 max=so1
If max < so2
max=so2 Endif
? "So lon nhat la:”, max set talk on
return
Trang 18Ví dụ: Dựa vào bảng nhanvien.dbf, hãy nhập vào một họ tên nhân viên, tìm
xem có đúng là nhân viên của công ty hay không, nếu đúng thì thông báo năm sinh và năm làm việc, ngƣợc lại thì thông báo là không phải nhân viên của công ty
set talk off
set date to french
set defaut to c:\dulieu
clear
close all
use NHANVIEN
accept 'nhap ho ten nhan vien:' to bhoten
locate for HOTEN =bhoten
if found()
? ' ngay sinh là:', ngaysinh'
? 'nam lam viec:', namlv else
? 'khong phai la nhan vien cua cong ty' endif
set talk on
return
Trang 19Trong trường hợp không có <bthức Li> nào với i từ 1 đến n có giá trị T thì
<dãy lệnh n+1> sẽ được thực hiện nếu có
Ví dụ: Viết chương trình nhập vào một năm (có 4 chữ số), sau đó nhập thêm một
tháng, cho biết tháng này có bao nhiêu ngày
set talk off
set date to french
set defaut to c:\dulieu
clear
Trang 20input 'nhap vao mot nam' to bnam
input 'nhap vao mot thang' to bthang
do case
case bthang = 4 or bthang = 6 or bthang = 9 or bthang = 11
songay =30 case bthang = 2
if (mod(bnam, 4) = 0 and (mod(bnam, 100) <> 0)
songay = 29 else
songay = 28 endif
otherwise
songay =3 1 endcase
? 'thang', bthang, 'nam', bnam, 'co', so ngay, 'ngay'
Trang 21động quay lại kiểm tra điều kiện trong <Bthức L> và cứ tiếp tục nhƣ thế mãi cho đến khi <Bthức L> có giá trị F
Ví dụ: Cho biết dang sách họ tên của các nhân viên trong công ty
set talk off set date to french set defaut to c:\dulieu clear
close all use NHANVIEN
? 'danh sach ho ten hoc vien la:'
do while !eof()
? HOTEN skip enddo set talk on return
Chú ý: Khi sử dụng cấu trúc này, dãy lệnh trong thân vòng lặp phải làm thay đổi đƣợc
giá trị của <Bthức L> để đảm bảo tính kết thúc, nếu không có thể sẽ rơi vào vòng lặp
vô hạn
Ví dụ: Nhập vào một năm, hãy thông báo danh sách họ tên, ngày sinh của những nhân
viên làm việc trong năm đó, nếu không có thì thông báo là không có
set talk off
set date french
set defaut to c:\dulieu
clear
close all
use NHANVIEN
input “nhap nam lam viec" to bnam
set filter to NAMLV = bnam
count to dem
Trang 22? ' khong co nhan vien nao' else
go top
? 'danh sach nhan vien lam viec năm', bnam
? "HO TEN NGAY SINH'
do while !eof()
? HOTEN, NGAYSINH skip
enddo endif
Chức năng: Khi gặp cấu trúc này trước hết <biến đếm> được gán giá trị của
<btN1>, rồi kiểm tra xem giá trị của <biến đếm> có nhỏ hơn hoặc bằng giá trị của
<btN2> không? ( nếu <btN3> lớn hơn 0) hoặc kiểm tra xem giá trị của <biến đếm> có lớn hơn hoặc bằng giá trị của <btN2> không? ( nếu <btN3> nhỏ hơn 0) nếu việc kiểm tra cho kết quả đúng thì <dãy lệnh> được thực hiện và biến đếm được cộng thêm giá trị của <btN3> rồi tự động quay lại việc kiểm tra, cứ tiếp tục như thế cho đến khi việc kiểm tra cho kết quả sai thì kết thúc cấu trúc lặp FOR và chuyển đến thực hiện lệnh sau ENDFOR Trường hợp không có mệnh đề STEP thì ngầm định là STEP 1
Trang 23Ví dụ:
Nhập vào một dãy số dương từ bàn phím, quá trình nhập dừng khi nhập vào số 0, nếu nhập vào số âm thì yêu cầu nhập lại và in ra màn hình tổng các số dương vừa nhập
SET TALK OFF
Trang 24ELSE
IF N = 0 EXIT ELSE
S = S + n ENDIF
USE <tên bảng dữ liệu>
Chức năng : Dùng để mở bảng dữ liệu tại vùng làm việc hiện thời
CLOSE ALL: Đóng tất cả các loại tệp đang mở
CLOSE DATABASES: Đóng tất cả các bảng CSDL trên tất cả các vùng
7.7.2 Dịch chuyển con trỏ bản ghi – Lệnh GO và SKIP
Tại một thời điểm Visual FoxPro chỉ làm việc với bản ghi, bản ghi này gọi là bản ghi hiện hành
Sau khi mở bảng CSDL bằng lệnh USE, bản ghi hiện hành là bản ghi đầu tiên trong CSDL Để dịch chuyển con trỏ bản ghi dùng lệnh sau:
Trang 25GO <n>: Chuyển tới bản ghi có số hiệu là n
GO TOP: Chuyển tới bản ghi đầu tiên
GO BOTTOM: Chuyển tới bản ghi cuối cùng
SKIP: Dịch chuyển theo chiều tiến (về phía cuối bảng) một bản ghi
SKIP <n>: Dịch chuyển theo chiều tiến n bản ghi (nếu n>0) hoặc lùi lại n bản
ghi (nếu n<0)
7.7.3 Lệnh LOCATE
Cú pháp:
LOCATE FOR <Bthức L> [<Phạm vi>]
Chức năng: Lệnh này định vị con trỏ bản ghi của bảng dữ liệu hiện thời vào bản ghi đầu tiên (theo thứ tự trên xuống), thuộc <Phạm vi> thỏa mãn <Bthức L>
Hàm FOUND() cho giá trị T nếu tìm thấy, ngược lại cho giá trị F Trong trường hợp tìm thấy, để tìm kiếm tiếp tục hãy lặp lại lệnh:
CONTINUE
7.7.4 Lệnh BROWSE
Một số lệnh của Visual Foxpro có các tuỳ chọn:
[Phạm vi] nếu có thì phạm vi là một trong các giá trị sau:
ALL : Tất cả các bản ghi
REST : Tất cả các bản ghi từ bản ghi hiện thời đến hết bảng
NEXT <n> : n bản ghi từ bản ghi hiện thời về phía cuối bảng
RECORD <n> : Bản ghi có số hiệu là n
Cú pháp câu lệnh với các tham số hay dùng:
BROWSE [FIELDS <ds trường>][FOR <btL>]
Trang 26Chức năng : Đưa ra các bản ghi thoả mãn điều kiện của bảng dữ liệu đang mở gồm các thông tin nằm trong <ds trường> để người sử dụng xem, sửa, bổ sung và xóa
Ví dụ:
USE hsns
BROWSE
Xuất hiện màn hình:
Manv HoTen Ngaysinh Gioi Donvi luong
001 Nguyễn Văn Thiều 01/08/48 T Kinh tế 500.05
002 Lê Quang Bình 12/25/50 T Tin học 605.50
003 Phạm Bích Hằng 09/29/70 F Du lịch 400.00
7.7.5 Bổ sung bản ghi – Lệnh APPEND
Cú pháp:
APPEND
Chức năng: Để bổ sung các bản ghi vào cuối bảng CSDL đang mở
Màn hình nhập dữ liệu như của lệnh CREAT, các thao tác nhập tương tự Nhập xong ấn CTRL + W để ghi lại
Lệnh bổ sung bản ghi trắng vào cuối tệp (không hiện màn hình nhập dữ liệu, con trỏ ở bản ghi trắng, hay dùng trong chế độ lập trình)
APPEND BLANK
7.7.6 Xóa bản ghi – Lệnh DELETE, RECALL, PACK, ZAP
1) Đánh dấu xóa một số bản ghi
Cú pháp:
DELETE [<phạm vi>] [FOR <btL>]
Phạm vi ngầm định là bản ghi hiện thời
2) Lệnh xóa hẳn các bản ghi đã đánh dấu xóa
PACK
3) Lệnh khôi phục các bản ghi đã đánh dấu xóa
RECALL [<Phạm vi>] [FOR <btL>]
Trang 27Phạm vi ngầm định là bản ghi hiện thời
Kết quả xuất hiện màn hình:
Manv HoTen Ngaysinh Gioi Donvi luong
001 Nguyễn Văn Thiều 01/08/48 T Kinh tế 500.05
002 Lê Quang Bình 12/25/50 T Tin học 605.50
2) Đặt lọc các trường
Cú pháp:
SET FIELDS TO <danh sách các trường>
Chức năng:
Trang 28Lệnh này dùng tạo ra bộ lọc trên bảng CSDL đang mở, sau lệnh này chỉ có các trường trong <danh sách các trường> mới được tham gia vào quá trình xử lý Sau khi đặt lọc ta có thể tắt hoặc bật việc đặt lọc các trường nhờ lệnh
SET FIELDS OFF | ON Khi đóng bảng CSDL lọc sẽ bị mất tác dụng
Chức năng: Lệnh này dùng để duyệt các bản ghi nằm trong phạm vi, thoả mãn
<Bthức L> của một bảng cơ sở dữ liệu đang mở và <Dãy lệnh> được thi hành với mỗi bản ghi được duyệt Duyệt xong mỗi bản ghi con trỏ tự động chuyển sang bản ghi tiếp theo Khi sử dụng lệnh này ta phải đưa con trỏ về đầu phạm vi
Ví dụ: Chương trình sau in ra màn hình danh sách các nữ nhân viên nằm trong bảng CSDL NHANVIEN gồm các thông tin họ tên, ngày sinh có năm sinh nhập vào từ bàn phím
SET TALK OFF
SET DATE FRENCH
SET DEFAUT TO c:\dulieu
CLEAR
CLOSE ALL
USE NHANVIEN
Trang 29INPUT 'nhap nam lam viec" TO bnam
INPUT 'nhap nam:' TO bnam
? ' DANH SACH CAC NU NHAN VIEN, SINH NAM', bnam
SCAN for !GIOITINH and year(NGAYSINH)=bnam
?HOTEN, NGAYSINH ENDSCAN
SET TALK ON
7.8 Một số ví dụ về lập trình cơ sở dữ liệu
7.8.1 Chương trình nhập dữ liệu cho một bảng
Lập chương trình nhập dữ liệu cho tệp khhanh.dbf đặt trong thư mục dữ liệu ở ổ
C gồm các trường MaKH, TenKH, Gioitinh, Diachi, Dienthoai
Set talk off
Set default to c:\dulieu
append blank
@0,1 say „Nhap ban ghi: ‟ + str(recno(),4)
@2,1 say „Ma khach hang: ‟ get maKH
@3,1 say „Ho ten: ‟ get TenKH
@4,1 say „Gioi tinh: ‟ get Gioitinh default F
@5,1 say „Dia chi: ‟ get Diachi default „Nam Dinh‟
@6,1 say „Dien thoai: ‟ get Dienthoai
@7,1 say „An Ctrl+W de ghi lai ban ghi vua nhap‟
Read
enddo
use
set talk on
Trang 307.8.2 Chương trình tìm kiếm và xử lý bản ghi của một bảng
Giả sử tệp Khhang đã được sắp xếp theo chỉ mục theo biểu thức MaKH Lập chương trình thực hiện các công việc sau:
Nếu tìm thấy chương trình cho phép xoá bản ghi này (nếu muốn)
Ta tổ chức một tệp chương trình thư viện TV.PRG chứa các chương trình con tìm, sửa, xem, xoá một bản ghi đặt trong thư mục dữ liệu ở ổ C
@2,1 say 'Ban ghi: ' + str(recno(),4)
@3,1 say 'Ho ten: ' get Tenkh
@4,1 say 'Gioi tinh: ' get Gioitinh
@5,1 say 'Dia chi: ' get Diachi
@6,1 say 'Dien thoai: ' get Dienthoai
@7,1 say 'An Ctrl+W de ghi lai ban ghi vua sua'
Trang 31Procedure xem
If found()
clear
@2,1 say 'Ban ghi: ' + str(recno(),4)
@3,1 say 'Ho ten: ' + Tenkh
@4,1 say 'Gioi tinh: ' + iif(Gioitinh,"Nam","Nu" )
@5,1 say 'Dia chi: ' + Diachi
@6,1 say 'Dien thoai: ' + Dienthoai
Nội dung chương trình chính CTC.PRG
Set talk off
Set default to c:\Dulieu
Trang 32endif
mma=space(10)
@1,2 say „Nhap vao ma khach hang: ‟ get mma
Read
Do Tim with mma
@2,2 say „Chon chuc nang: 1-Sua 2-Xem 3-Xoa‟ get chon default 1
Do Xem Case chon=3
Do Xoa EndCase
enddo
7.8.3 Tìm kiếm trên nhiều bảng
Muốn tìm kiếm trên nhiều bảng, trước hết tạo một View bằng cách kết nối cả bảng lại Sau đó coi View như một bảng (bảng ảo) và tiến hành thực hiện tương tự
Ví dụ: Hãy đưa ra các thông tin gồm MaKH, TenKH, Diachi, TenMH, Soluong, Dongia, Thanhtien của khách hàng khi mua một mặt hàng trong mỗi lần
Trước hết Tạo view vidu bằng cách kết nối 3 bảng Khhang, MatHang, MuaBan gồm các thông tin: MaKH, TenKH, Diachi, TenMH, Soluong, Dongia, Thanhtien có Muaban=.F
Trang 33Nội dung chương trình chính CTCVD.PRG
Set talk off
Set default to c:\Dulieu
Do Tim with mma in TV1
DO xem WITH mma in TV1
enddo
Close all
SET TALK on
Trang 34Chương 8 LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Trong khi Visual FoxPro vẫn hỗ trợ cho lập trình hướng thủ tục, nó còn cung cấp thêm công cụ mạnh và uyển chuyển đó là lập trình hướng đối tượng, giúp hoàn thành nhanh chóng các ứng dụng
Thiết kế và lập trình hướng đối tượng trình bày một sự thay đổi về lập trình so với lập trình hướng thủ tục Thay vì việc nghĩ về luồng chương trình từ dòng đầu tiên đến dòng cuối cùng các câu lệnh, chỉ cần nghĩ về các đối tượng cần tạo
Lập trình hướng đối tượng dựa trên các khái niệm cơ bản: Class (lớp), Object (đối tượng), Event (sự kiện, biến cố, tình huống), Property (Thuộc tính) và Method (phương thức, cách thức, hành vi)
Ví dụ: Để lập chương trình giải phương trình bậc hai theo hướng thủ tục ta phải biên
soạn văn bản chương trình Giai_phuong_trinh_bac_2.prg
Set talk off
Trang 35EndIf
Set talk on
Để lập chương trình giải phương trình bậc hai theo hướng đối tượng ta phải tạo ra một form; gắn các đối tượng vào form; xác định các thuộc tính cho các đối tượng; viết các đoạn mã lệnh cho các sự kiện
Chẳng hạn có thể tạo một form như sau:
Hình 8.1 Form giải phương trình bậc 2
Trang 37thisform.kq.value=" phuong trinh vo nghiem "
8.1 Một số khái niệm cơ bản
8.1.1 Đối tượng trong Visual FoxPro
- Trong Visual FoxPro, các Form và các Control là các đối tượng liên quan đến ứng dụng
- Các đối tượng này được thể hiện thông qua các thuộc tính, được tác động thông qua các biến cố và cách thức của chúng
- Lập trình hướng đối tượng cung cấp một số lượng lớn các điều khiển (Control) cho các đối tượng trong những ứng dụng, giúp ta dễ dàng tạo và duy trì các thư viện của các câu lệnh để có thể dùng lại, nó cho ta:
Trang 388.1.2 Class và Object
- Lớp (Class) và đối tượng liên hệ chặt chẽ với nhau, nhưng chúng không giống nhau Một Class chứa thông tin về một đối tượng chính là bảng thiết kế, mẫu, khuôn dạng hay sơ đồ của đối tượng, còn một đối tượng là một minh họa cụ thể của lớp Như vậy một Class chứa các thuộc tính và các phương thức của đối tượng; đối tượng có các thuộc tính và các phương thức cụ thể Hay nói một cách khác: Lớp là một tập hợp các đối tượng tương tự nhau, có cùng tập các thuộc tính và các phương thức còn đối tượng
là một phần tử của lớp; mỗi thuộc tính của đối tượng có một giá trị cụ thể, xác định
- Các thuộc tính của lớp được hiểu như là các biến, còn các thuộc tính của đối tượng
là các giá trị cụ thể của các biến tại thời điểm nào đó
- Các phương thức của lớp được hiểu như là các phép toán, các thao tác trên các đối tượng
Ví dụ 1: + Lớp Phân số là tập hợp các số có dạng P/Q sao cho PZ; QN+
Ví dụ 2: + Command button (nút lệnh) trong Visual Foxpro là một lớp
Các thuộc tính cơ bản: Name, Caption, Height, Width, Left, Top, …
+ Nút Ok là một đối tượng của lớp Command button có các thuộc tính cụ thể là:
Trang 39Các thuộc tính cơ bản: Name, Caption, Height, Width, Autocenter, Picture, …
- Form1 là một đối tượng của lớp Form có các thuộc tính trên và giá trị cụ thể của các thuộc tính đó như sau:
- Một sự kiện là một hành động tác động lên đối tượng và được chỉ định trước,
nó thường được khởi phát từ người sử dụng hay hệ thống Khi xảy ra một sự kiện thì hành động gắn với sự kiện đó được thực hiện, rồi đến lượt nó (hành động vừa xảy ra)
có thể lại là một sự kiện
Trong Visual FoxPro, những sự kiện thường có là: kích trái chuột (Click Event),
di chuyển chuột (MouseMove Event), …
- Những phương thức (Method) là những thủ tục, đó là đoạn mã lệnh được liên kết với đối tượng Method được gắn chặt với đối tượng và được đặt trong các sự kiện của đối tượng đó, nó được gọi (kích hoạt) khi có các sự kiện xảy ra hay nói cách khác phương thức là hành động đáp lại của đối tượng khi có sự kiện xảy ra
Đối tượng, sự kiện và phương thức luôn liên kết chặt chẽ với nhau
8.1.3 Các Class cơ sở trong Visual FoxPro
Visual FoxPro cung cấp một số lượng lớn các Class (Class cơ sở) giúp ta hoàn thành các ứng dụng một cách nhanh chóng Mỗi Class cơ sở chứa khuôn mẫu về một
Trang 40đối tượng như các OptionGroup, CommandButton, text box, combo box, CheckBox, EditBox, Form, Label…
CommandButton FormSet OLEBoundControl Shape
CommandGroup Grid OLEContainerControl Spinner
Container Hyperlink
Để tạo ra một đối tượng cụ thể, ta chỉ việc sử dụng khuôn mẫu của lớp cơ sở và gán cho nó những thuộc tính, phương thức và sự kiện cụ thể
Tất cả các class cơ sở trong Visual FoxPro công nhận tập hợp các biến cố nhỏ nhất sau:
Init Xảy ra khi đối tượng này được tạo
Destroy Xảy ra khi đối tượng này được thoát ra từ bộ nhớ
Error Xảy ra bất cứ khi nào có lỗi trong các thủ tục của biến cố
hoặc phương thức của class Tất cả các class cơ sở Visual FoxPro có tập hợp các thuộc tính nhỏ nhất sau:
Class Nó là kiểu class nào
BaseClass Là class cơ sở xây dựng nên class cần tạo
như Form, CommandButton, Custom, …
ClassLibrary Thư viện class mà class này được lưu trữ
trong đó
ParentClass Tên của class cha của class cần tạo