phương thức hoạt động+ Độ dài mỗi dòng lệnh không quá 254 ký tự + Không phân biệt ký tự hoa hay ký tự thường đối với các từ khoá hay các tên hàm mẫu + Cho phép chỉ cần viết 4 ký tự đầu..
Trang 1HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Microsoft Visual FoxPro
TS ĐỖ QUANG VINH Email: dqvinh@live.com
Hà Nội - 2008
Trang 2I - TỔNG QUAN VỀ Microsoft Visual FoxPro
- VFP 9.0 SP2 phát hành vào năm 2007
Máy tính PC Pentium
Bộ nhớ 64 MB RAM (128 MB or cao hơn)
Dung lượng đĩa cứng dành cho VFP 9.0 165 MB
Màn hình có độ phân giải 800 x 600, 256 màu hoặc High color 16-bit
Ổ đĩa CD-ROM/DVD
Chuột
Hệ điều hành WINDOWS XP và Windows Server 2003
Tốt nhất là cài đầy đủ VFP9.0 SP2 từ đĩa CD
Trang 3 KHỞI ĐỘNG Microsoft Visual FoxPro
Trang 4phương thức hoạt động
+ Độ dài mỗi dòng lệnh không quá 254 ký tự
+ Không phân biệt ký tự hoa hay ký tự thường đối với các từ khoá hay các tên hàm mẫu
+ Cho phép chỉ cần viết 4 ký tự đầu
Trang 5- Phạm vi là miền tác động của lệnh khi thực hiện: 4
+ ALL thao tác với tất cả các bản ghi
+ RECORD <n> thao tác với bản ghi thứ <n>
+ NEXT <n> thao tác với <n> bản ghi tiếp theo kể từ bản ghi hiện thời
+ REST thao tác với các bản ghi kể từ bản ghi hiện thời đến bản ghi cuối cùng
CÁC KIỂU DỮ LIỆU
- Kiểu ký tự C (Character )
+ có dạng một xâu ký tự thuộc bảng mã ASCII
+ có độ rộng tối đa là 254 ký tự
+ phân biệt giữa ký tự hoa và ký tự thường
- Kiểu số thập phân N (Numeric)
biểu diễn một giá trị số với tối đa 20 ký số kể cả phần nguyên, thập phân và dấu chấm thập phân
Trang 6- Kiểu ngày tháng D (Date)
+ ngày dương lịch từ 01/01/0001 đến 31/12/9999
+ dạng mặc định là mm/dd/yy
+ Độ rộng cố định là 8
+ dùng lệnh SET DATE và SET CENTURY ON
- Kiểu Logic L (Logical)
+ chỉ lấy một trong hai giá trị: đúng T hoặc sai F
- Kiểu chung G (General)
+ dùng để lưu trữ các đối tượng OLE
+ Độ rộng khai báo = 4
Trang 7- Kiểu số dấu chấm động F (Float)
BIẾN
- Là đại lượng có giá trị thay đổi
- 3 loại biến:
Trang 8+ Biến bộ nhớ+ Biến trường+ Biến hệ thống
HÀM
- Là một loại chương trình con
- Xây dựng một thư viện các hàm mẫu
- Cú pháp: <tên hàm>(danh sách đối số)
Trang 9LOG(x) tính loga cơ số e của x
INT(x) lấy phần nguyên của x
ROUND (x,n) làm tròn số x với n chữ số thập phân
MAX(<biểu thức 1>,<biểu thức 2>) cho giá trị lớn nhất của hai biểu
thức
MIN(<biểu thức 1>,<biểu thức 2>) cho giá trị nhỏ nhất của hai biểu
thức
MOD(<biểu thức 1>,<biểu thức 2>) cho số dư của phép toán <biểu
thức 1> chia cho <biểu thức 2>
VAL(s) trả lại giá trị số của xâu s
Trang 10+ Hàm xâu
LEN(s) cho biết độ dài của xâu s
LEFT(s,n) trích n ký tự bên trái xâu s
RIGHT(s,n) trích ký tự bên phải của xâu s
SUBSTR(s,i,n) trích n ký tự của xâu s kể từ ký tự thứ i
REPLICATE(s,n) tạo một xâu gồm n lần xâu s
SPACE(n) tạo một xâu gồm n ký tự trắng
LTRIM(s) cắt các dấu trắng bên trái xâu s
RTRIM(s) cắt các dấu trắng bên phải xâu s
ALLTRIM(s) cắt các dấu trắng ở hai bên xâu s
TRIM(s)
UPPER(s) biến tất cả các chữ cái trong xâu s
thành chữ hoa LOWER(s) biến tất cả các chữ cái trong xâu s
thành chữ nhỏ PROPER(s)
STR(x,n,m) trả lại giá trị xâu của số x, gồm n ký tự với m
chữ số lẻ
ASC(s) cho biết mã ASCII của ký tự đầu tiên trong
xâu s
Trang 11CHR(n) cho biết ký tự có mã ASCII là n
AT(t,s) cho biết vị trí đầu tiên xâu con t xuất hiện trong
xâu s, nếu không tìm thấy t trong s, hàm trả lại giá trị 0
+ Hàm ngày tháng
CTOD(s) chuyển đổi xâu s sang kiểu ngày tháng D
DTOC(d) chuyển đổi ngày D sang kiểu ký tự C
DTOS(d) ‘yyyymmdd’
YEAR(d) cho biết giá trị số của năm trong ngày d
MONTH(d) cho biết giá trị số của tháng trong ngày d
DAY(d) cho biết giá trị số của ngày trong ngày d
DOW(d) trả lại ngày trong tuần của ngày d (1 là chủ nhật, 2
là thứ hai , ,7 là thứ bảy)
DATE () cho biết giá trị của ngày hiện tại
+ Hàm đối với tệp dữ liệu
DBF([<biểu thức số N>]) cho tên đầy đủ của tệp dữ liệu đang
mở trong vùng làm việc thứ <biểu thức số N>
Trang 12ALIAS([<biểu thức số N>]) chỉ bí danh của tệp dữ liệu đang mở
trong vùng làm việc thứ <biểu thức số N>
BOF([<biểu thức số N>]) dùng để kiểm tra xem vị trí con trỏ có ở
đầu tệp dữ liệu trong vùng <biểu thức số N> không?
EOF([<biểu thức số N>]) dùng để kiểm tra xem vị trí con trỏ có ở
cuối tệp dữ liệu trong vùng <biểu thức số N> không?
DELETED([<biểu thức số N>]) cho giá trị T nếu bản ghi hiện thời
trong vùng làm việc thứ <biểu thức số N> bị đánh dấu xoá
FOUND([<biểu thức số N>]) cho giá trị T nếu lệnh tìm kiếm
LOCATE CONTINUE, SEEK, FIND trong vùng <biểu thức số N> tìm được một bản ghi
Trang 13RECCOUNT([<biểu thức số N>]) cho biết số bản ghi có trong tệp
cơ sở dữ liệu đang mở trong vùng <biểu thức số N>
RECNO([<biểu thức số N>]) cho số hiệu của bản ghi hiện thời
trong vùng <biểu thức số N>
SELECT() cho số hiệu của vùng làm việc hiện thời
+ Hàm môi trường làm việc
hiện thời
đang sử dụng
Trang 14+ Hàm logic
IIF(<biểu thức logic L>, <biểu thức 1>, <biểu thức 2>)
cho giá trị <biểu thức 1> nếu <biểu thức logic L> là T., ngược lại, hàm cho giá trị <biểu thức 2>
Trang 15 Hàm tự xây dựng của người sử dụng UDF
(User Defined Function)
- Là một tổ hợp các hằng, biến, hàm và toán tử
- Phân loại biểu thức: biểu thức ký tự C, biểu thức số N, biểu thức logic L, biểu thức ngày tháng D
Trang 16II - TẠO LẬP BẢNG DỮ LIỆU
1 KHÁI NIỆM
- Bảng dữ liệu: Là một tập hợp thông tin về một đối tượng quản lý và được tổ chức theo một nguyên tắc nhất định
- Trường (Field): Là một thuộc tính của đối tượng quản lý
- Bản ghi (Record): Là các thông tin phản ánh về từng đối tượng được quản lý
- Mỗi trường nhận một tên, kiểu dữ liệu và có độ rộng nhất định Số lượng trường tối đa trong một bảng dữ liệu
là 255 trường
Trang 172 TẠO LẬP BẢNG DỮ LIỆU
- 2 bước:
+ Khai báo cấu trúc bảng dữ liệu
+ Nhập bản ghi dữ liệu ban đầu vào bảng dữ liệu
a Tạo và khai báo cấu trúc bảng dữ liệu: 2 cách
CREATE <tên bảng dữ liệu>
+ Bước 1: tại khung cửa sổ lệnh, gõ:
CREATE SINHVIEN
+ Bước 2: khai báo từng trường như Tên trường (Name), Kiểu trường (Type), Độ rộng trường (Width), Phần thập phân (Decimal)
Trang 18 Cách 2: tạo cấu trúc bằng hộp thoại Table Designer
Bước 1: từ menu File, chọn New hoặc ấn 2 phím
<Ctrl+N> để xuất hiện hộp thoại New Chọn mục Table rồi chọn tiếp New File.
Bước 2: hộp thoại CREATE xuất hiện
Bước 3: Khai báo cấu trúc bảng dữ liệu
- DISPLAY
- LIST
- BROWSE
Trang 194 KHAI BÁO SỬ DỤNG BẢNG DỮ LIỆU
2 cách khai báo để sử dụng bảng dữ liệu:
Tại khung cửa sổ lệnh, gõ:
USE <Tên bảng dữ liệu>
Chọn lệnh File\Open
DISPLAY STRUCTURE [TO <PRINTER>] [TO FILE
<tên tệp>]
hoặc
LIST STRUCTURE [TO <PRINTER>] [TO FILE <tên tệp>]
Trang 20III - CẬP NHẬT DỮ LIỆU
1 ĐẶT VẤN ĐỀ
- Cập nhật có thể là việc huỷ bỏ một số bản ghi lỗi thời hoặc nhập sai gây dư thừa hay trùng lặp dữ liệu.
- Cập nhật có thể liên quan đến việc chèn thêm bản ghi mới, xảy ra sau khi tệp dữ liệu đã được tạo lập, hoặc trong một chu kỳ xử lý
- Cập nhật có thể là việc thay đổi nội dung của, thay đổi trị
Trang 21+ Chèn thêm vào cuối bảng dữ liệu
Trang 22USE <tệp tin nguồn>
APPEND FROM <tệp tin trung gian> [<điều kiện>]
INSERT
- Cú pháp: INSERT [BLANK] [BEFORE]
3 SỬA ĐỔI DỮ LIỆU: 3
Trang 23EDIT/CHANGE [<phạm vi>] [FIELDS <danh sách trường>] [FOR <biểu thức logic L>] [WHILE <biểu thức logic L>]
[FONT<tên font chữ> [, <cỡ chữ>]]
[STYLE <kiểu chữ>] [FREEZE <tên trường>]
[KEY <biểu thức1> [,<biểu thức 2>]] [LAST/ NOINIT]
[LPARTITION] [NAME <tên đối tượng>]
[NOAPPEND] [NOCLEAR] [NODELETE]
[NOEDIT/ NOMODIFY] [NOLINK] [NOMENU]
[NOOPTIMIZE] [NORMAL] [NOWAIT]
- Là một trong những lệnh mạnh nhất của Visual FoxPro
- Cú pháp:
Trang 24BROWSE [FIELDS <danh sách trường>]
[FOR <biểu thức logic L> [REST]]
[FONT <tên font chữ> [,< cỡ chữ>]] [FORMAT]
[STYLE <kiểu chữ>] [FREEZE <tên trường>]
[KEY <biểu thức 1>] [,<biểu thức 2>]]
[LOCK <n>]
[LPARTITION] [NAME <tên đối tượng>]
[NOAPPEND] [NOCLEAR] [NODELETE]
[NOEDIT/ NOMODIFY] [NOLINK] [NOMENU]
[NOLGRID] [NORGRID]
[NOOPTIMIZE] [NOREFRESH] [NORMAL] [NOWAIT] [PARTITION <m>] [LEDIT] [REDIT]
Trang 25[ phạm vi] [FOR <biểu thức logic L>]
[WHILE <biểu thức logic L>]
[IN <n>/ <bí danh bảng dữ liệu>] [NOOPTIMIZE]
4 XOÁ DỮ LIỆU: 2 mức
tham gia vào xử lý thông tin, nhưng vẫn tồn tại trong bảng
dữ liệu và có thể phục hồi bằng lệnh RECALL
Trang 26+ Mức 2: xoá vật lý các bản ghi đã bị đánh dấu xoá bản ghi bị xoá hoàn toàn, không tồn tại trong bảng dữ liệu, không thể phục hồi
- Cú pháp:
DELETE [phạm vi] [FOR <biểu thức logic L>] [WHILE
<biểu thức logic L>][IN <n>/ <bí danh bảng dữ liệu>]
Trang 27+ Đổi tên trường/ kiểu trường/ độ rộng trường
+ Thay đổi thứ tự các trường
- Cú pháp:
MODIFY STRUCTURE
Trang 286 SAO CHÉP CẤU TRÚC BẢNG DỮ LIỆU
- Tạo lập một tệp dữ liệu mới, rỗng
- Cú pháp:
USE <tên bảng dữ liệu gốc>
COPY STRUCTURE TO <tên bảng dữ liệu mới>
[FIELDS <danh sách trường>]
- Cú pháp:
APPEND FROM <tên tệp nguồn>/ ?[FIELDS <danh sách trường>] [FOR<biểu thức logic L>][TYPE] DIF/ MOD/ SDF/ SYLK/ WK1/ WK3/ WKS/ FW2/ PDOX/ WR1/
Delimiter/WITH BLANK / WITH TAB]] [AS <n>]
Trang 297 SAO LƯU CẤU TRÚC TỆP DỮ LIỆU
- Cú pháp:
USE <tên bảng dữ liệu>
COPY STRUCTURE EXTENDED TO <tên bảng sao lưu cấu trúc> [FIELDS <danh sách trường>]
- Cú pháp:
cấu trúc>
Trang 30IV - SẮP XẾP VÀ CHỈ MỤC
1 ĐẶT VẤN ĐỀ
- 2 cách:
cùng kích thước như tệp nguồn nhưng được sắp xếp theo một trật tự mới về mặt vật lý
nguồn không thay đổi, nhưng một tệp chỉ mục (index file) được tạo ra theo tiêu chí cần sắp xếp
+ Trường/ biểu thức dùng làm tiêu chí để sắp xếp là khoá sắp xếp khi dùng SORT hoặc INDEX.
+ Có thể sắp xếp theo theo thứ tự tăng dần hoặc giảm dần
Trang 312 SẮP XẾP VẬT LÝ SORT
- Cú pháp:
[/C][,<tên trường 2> [/A] [/D] [/C], .] [ASCENDING | DESCENDING][<phạm vi>] [FOR <biểu thức logic L> | WHILE <biểu thức logic L>] [FIELDS <danh sách trường> | FIELD LIKE <Skeleton> | FIELD EXCEPT <Skeleton>] [NOOPTIMIZE]
+ <tên bảng sắp xếp > là tên bảng đã được sắp xếp (bảng đích) + <tên trường i> là trường thứ i dùng làm tiêu chí sắp xếp Trường hợp dùng nhiều trường khoá thì tên các trường khoá phải được phân cách bằng dấu phẩy
+ Số trường khoá không hạn chế nhưng tổng độ dài của lệnh SORT không quá 254 ký tự
Trang 32+ Trường khoá có thể là dữ liệu kiểu C, N, D, L
+ Có thể sắp xếp tăng dần [/A] hoặc giảm dần [/D] Nếu không
có tham số [/A] hoặc [/D] thì mặc định là tăng dần
+ Đối với trường khoá, nếu không có tham số [/A] hoặc [/D] thì sắp xếp tăng dần khi dùng từ khoá [ASCENDING] hoặc giảm dần khi dùng từ khoá [DESCENING]
+ Đối với trường kiểu C, nếu sắp xếp không phân biệt chữ hoa
Trang 33- Chỉ thích hợp đối với các tệp dữ liệu nhỏ và vừa
Đối với các tệp dữ liệu có kích thước lớn lệnh SORT có những nhược điểm sau đây:
chép lại các bản ghi Nếu tệp nhỏ ~ 1000 ÷ 2000 bản ghi thì tốc độ thực hiện chậm của lệnh SORT không thể hiện rõ, nhưng khi tệp lớn trên chục nghìn bản ghi thì tốc độ thực hiện rất chậm.
- Các bản ghi của tệp đích không cùng số hiệu với các bản ghi tương ứng trong tệp dữ liệu nguồn
- Gây khó khăn cho người dùng vì mỗi lần thực hiện lệnh SORT tạo ra một tệp dữ liệu mới cùng với tiêu chí sắp xếp
Trang 343 SẮP XẾP THEO CHỈ MỤC
- Sắp xếp theo chỉ mục được dựa trên nguyên tắc tương tự như bảng mục lục của một quyển sách
- Tệp chỉ mục độc lập IDX (còn gọi là stand-alone IDX)
- Chỉ mục thông thường (regular index)
- Chỉ mục duy nhất (unique index)
Trang 35 TẠO TỆP CHỈ MỤC
- Cú pháp:
đính mục> [OF <tên tệp CDX>] [FOR <biểu thức logic L>] [COMPACT] [ASCENDING | DESCENDING] [UNIQUE | CANDIDATE] [ADDITIVE]
a Mở bảng dữ liệu qua khung giao diện hoặc gõ lệnh USE <tên bảng dữ liệu> tại khung cửa sổ lệnh
b Chọn mục View\Browse để hiển thị bảng dữ liệu ở chế
độ Browse hoặc gõ Browse tại cửa sổ lệnh
c Chọn mục View\Table Designer, khung hội thoại Table Designer xuất hiện với thẻ mặc định là Fields
d Chọn thẻ Indexes
Trang 36e Nhập tên tệp chỉ mục (hoặc tên đính mục)
f Sau khi nhập xong cột Name cột Type hiện lên giá trị mặc định
+ Chỉ mục trên một biểu thức kiểu xâu
+ Chỉ mục trên nhiều trường có kiểu dữ liệu khác nhau
+ Dùng hàm mẫu có sẵn và UDF trong biểu thức chỉ mục
Trang 37 Lệnh SET INDEX
- Dùng để mở một hoặc nhiều tệp chỉ mục IDX hoặc CDX của tệp dữ liệu hiện thời
- Cú pháp:
SET INDEX TO [<danh sách tệp chỉ mục>| ?] [ORDER <n>|
<tên tệp chỉ mục IDX>| [TAG] <tên đính mục> [OF <tên tệp CDX>]] [ASCENDING | DESCENDING] [ADDITIVE]
- Cú pháp:
USE [<tên bảng dữ liệu>|<SQLViewName>|<?>] [IN <n> | <bí
[<nDataSessionNumber>]] [NODATA][INDEX <danh sách tệp chỉ mục>|<?> [ORDER [<n> | <tên tệp IDX>[TAG] <tên đính mục> [OF <tên tệp CDX>] [ASCENDING| DESCENDING]]]][ALIAS <bí danh bảng dữ liệu>] [EXCLUSIVE] [SHARED] [NOUPDATE]
Trang 38dụng chỉ mục, nghĩa là tệp dữ liệu được liệt kê hoặc truy xuất theo thứ tự vật lý ban đầu nhưng các tệp chỉ mục vẫn đang mở
Trang 39+ Cách 2:
USE <tên bảng dữ liệu>
SET INDEX TO <danh sách tệp chỉ mục>
REINDEX
DELETE FILE [<tên tệp> | <?>
SET INDEX TO
CLOSE INDEX
Trang 40V - TÌM KIẾM THÔNG TIN
- Có 3 cách di chuyển con trỏ bản ghi:
+ Di chuyển tương đối - lệnh SKIP
+ Di chuyển “ẩn” nằm ngay trong các lệnh như: LIST, DISPLAY ALL, LOCATE/CONTINUE, SCAN, COUNT, AVERACE, SUM, TOTAL
Trang 41 DI CHUYỂN TUYỆT ĐỐI - LỆNH GO/GOTO
- Di chuyển con trỏ tới bản ghi mang số hiệu được chỉ định
- Di chuyển con trỏ về bản ghi nằm phía trước/ phía sau bản ghi hiện hành <n> bản ghi
Trang 422 LIỆT KÊ DỮ LIỆU
- Cú pháp:
[FOR <biểu thức logic L> | WHILE <biểu thức logic L>] [NOCONSOLE][TO PRINTER [PROMPT] | TO FILE
<tên tệp >] [NOOPTIMIZE]
trường>] [FOR <biểu thức logic L> | WHILE <biểu thức logic L>[NOCONSOLE][TO PRINTER [PROMPT] | TO FILE <tên tệp>] [NOOPTIMIZE]
Trang 43- Cú pháp:
BROWSE [FIELDS <danh sách trường>] [FOR <biểu thức logic L>] [WINDOW <tên cửa sổ 1>] [IN WINDOW <tên cửa sổ 2> | IN SCREEN] [TITLE <biểu thức ký tự C>] [WIDTH <biểu thức số N1>] [LPARTTION] [PARTION
<biểu thức số N2>] [NOLINK] [LEDIT] [REDIT] [LOCK<biểu thức số N3>] [FREEZE <tên trường>] [NOEDIT | NOMODIFY] [NOAPPEND] [NODELETE]
3 TÌM KIẾM TUẦN TỰ
- Cú pháp:
LOCATE FOR <biểu thức logic L> [<phạm vi>] [WHILE
<biểu thức logic L>] [NOOPTIMIZE]
Trang 44chỉ mục IDX> [TAG] <tên đính mục> [OF <tên tệp CDX>]] [ASCENDING | DESCENDING] [IN <vùng làm việc n> | <bí danh bảng dữ liệu>]