25
NGÔN NGỮ LẬP TRÌNH VISUAL FOXPRO I. GIỚI THIỆU VISUAL FOXPRO: Microsoft Visual Foxpro là một phần mềm Quản lý CSDL, bao gồm một số công rất mạnh giúp có thể tổng hợp, truy xuất thông tin một cách thuận tiện, có một bộ lệnh dùng trong lập trình rất phong phú, cho phép tạo được một giao diện thân thiện. Điều đáng lưu ý là các ứng dụng được thiết kế từ các phiên bản trước của Foxpro vẫn còn hiệu lực trong Visual Foxpro, nghĩa là vẫn có thể chạy được trong Visual Foxpro. Tuy nhiên, nếu đã sửa đổi nguyên bản cũ trong Visual Foxpro rồi thì không thể thực thi được nữa trong các phiên bản cũ trước đó của nó. Để có thể dùng được Visual Foxpro, máy vi tính cần phải đạt được tối thiểu các điều kiện sau: + Có bộ xử từ 80386 trở đi, nên là 486 hoặc mạnh hơn. + Có bộ nhơ tối thiểu 4MB RAM, nhưng nên là 8MB RAM hoặc hơn. + Có đĩa cứng càng lớn càng tốt, tối thiểu 200MB RAM + Hệ điều hành : Windows 95 hoặc Windows NT. + Đã cài hệ điều hành MS DOS, nên dùng DOS 5.0 trở về sau. + Đã cài hệ giao diện Windows 3.x hoặc Windows ’95 trở đi. Sau khi đã được cài đặt, Visual Foxpro có thể được khởi động bằng một trong các cách như sau : + Click chuột vào thực đơn Start trên màn hình chính của Windows 95 / Windows NT; chọn Programs; chọn Microsoft Visual Foxpro; chọn Visual Foxpro 6.0 + Thực hiện chức năng Run với tên tập thực hiện C:\Vfp\Vfp.exe Visual Foxpro cũng có hai chế độ làm việc : hội thoại và chương trình. Trong chế độ hội thoại, người ta đưa ra một yêu cầu cho Visual Foxpro bằng một lệnh thông qua cửa sổ lệnh (command window) hoặc thông qua thực đơn hệ thống (system menu) và sẽ nhận được kết quả ngay. Sau đó, người dùng có thể tiếp tục thực hiện các yêu cầu khác. Trong chế độ chương trình, các câu lệnh của Visual Foxpro có thể được tập hợp lại thành một tập tin ghi trên đĩa và khi muốn cho thi hành tập tin này, từ cửa sổ lệnh người dùng thực hiện lệnh : DO <Tên chương trình>. Khi đó các lệnh có trong tập tin chương trình này sẽ lần lượt được thực hiện. Một ứng dụng (project) bao gồm nhiều thành phần : CSDL, chương trình, màn hình giao diện, thực đơn, báo biểu, … Một ứng dụng được lưu trữ trong tập tin có phần mở rộng là PJX và quản lý bằng công cụ Project Manager. 1

Tim Hieu Ngon Ngu Lap Trinh Visual FoxPro

  • Upload
    mvmanh

  • View
    614

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Tim Hieu Ngon Ngu Lap Trinh Visual FoxPro

NGÔN NGỮ LẬP TRÌNH VISUAL FOXPRO

I. GIỚI THIỆU VISUAL FOXPRO:Microsoft Visual Foxpro là một phần mềm Quản lý CSDL, bao gồm một số công rất mạnh giúp

có thể tổng hợp, truy xuất thông tin một cách thuận tiện, có một bộ lệnh dùng trong lập trình rất phong phú, cho phép tạo được một giao diện thân thiện. Điều đáng lưu ý là các ứng dụng được thiết kế từ các phiên bản trước của Foxpro vẫn còn hiệu lực trong Visual Foxpro, nghĩa là vẫn có thể chạy được trong Visual Foxpro. Tuy nhiên, nếu đã sửa đổi nguyên bản cũ trong Visual Foxpro rồi thì không thể thực thi được nữa trong các phiên bản cũ trước đó của nó.

Để có thể dùng được Visual Foxpro, máy vi tính cần phải đạt được tối thiểu các điều kiện sau:+ Có bộ xử lý từ 80386 trở đi, nên là 486 hoặc mạnh hơn.+ Có bộ nhơ tối thiểu 4MB RAM, nhưng nên là 8MB RAM hoặc hơn.+ Có đĩa cứng càng lớn càng tốt, tối thiểu 200MB RAM+ Hệ điều hành : Windows 95 hoặc Windows NT.+ Đã cài hệ điều hành MS DOS, nên dùng DOS 5.0 trở về sau.+ Đã cài hệ giao diện Windows 3.x hoặc Windows ’95 trở đi.

Sau khi đã được cài đặt, Visual Foxpro có thể được khởi động bằng một trong các cách như sau : + Click chuột vào thực đơn Start trên màn hình chính của Windows 95 / Windows NT; chọn Programs; chọn Microsoft Visual Foxpro; chọn Visual Foxpro 6.0 + Thực hiện chức năng Run với tên tập thực hiện C:\Vfp\Vfp.exe

Visual Foxpro cũng có hai chế độ làm việc : hội thoại và chương trình. Trong chế độ hội thoại, người ta đưa ra một yêu cầu cho Visual Foxpro bằng một lệnh thông qua

cửa sổ lệnh (command window) hoặc thông qua thực đơn hệ thống (system menu) và sẽ nhận được kết quả ngay. Sau đó, người dùng có thể tiếp tục thực hiện các yêu cầu khác.Trong chế độ chương trình, các câu lệnh của Visual Foxpro có thể được tập hợp lại thành một tập tin ghi trên đĩa và khi muốn cho thi hành tập tin này, từ cửa sổ lệnh người dùng thực hiện lệnh : DO <Tên chương trình>. Khi đó các lệnh có trong tập tin chương trình này sẽ lần lượt được thực hiện.

Một ứng dụng (project) bao gồm nhiều thành phần : CSDL, chương trình, màn hình giao diện, thực đơn, báo biểu, … Một ứng dụng được lưu trữ trong tập tin có phần mở rộng là PJX và quản lý bằng công cụ Project Manager.

CSDL trong Visual Foxpro chứa danh sách các bảng (table), hàm cửa sổ (view), thủ tục, … và được lưu trữ trong một tập tin có phần mở rộng là DBC (trong khi Foxpro 2.6 là DBF).

Visual Foxpro cung cấp cho người dùng các bộ công cụ như : Form Wizard và Form Designer tiện dụng trong thiết kế các màn hình giao diện.

Visual Foxpro cung cấp các bộ công cụ : Report Wizard và Report Designer tiện dụng trong thiết kế các báo biểu.

Visual Foxpro cung cấp các bộ công cụ Menu Designer tiện dụng trong việc tạo các thực đơn nhiều cấp.

Visual Foxpro có sự mở rộng sang phương pháp lập trình hướng đối tượng bên cạnh cách lập trình theo thủ tục như truyền thống.

Trước khi đi vào tương đối chi tiết một số các vấn đề cần lưu tâm, ta lưu ý thêm một số các vấn đề về khả năng, giới hạn và một số thuật ngữ thường dùng của Visual Foxpro. Khả năng và giới hạn của Visual Foxpro có thể được tóm gọn trong bảng sau :

Khả năng Giới hạn1. Tập số liệu và chỉ mụcSố dòng tin tối đa trong 1 table 1 tỷ recordKích thước tối đa cho 1 table 2 GBSố ký tự tối đa cho 1 dòng tin (record) 65 500Số vùng tối đa trên một dòng tin 255Số table tối đa có thể mở cùng lúc 255Số ký tự tối đa cho 1 vùng tin 254Số ký tự tối đa cho một khóa chỉ mục trong tập non-compact index 100Số ký tự tối đa cho một khóa chỉ mục trong tập compact index 240

1

Page 2: Tim Hieu Ngon Ngu Lap Trinh Visual FoxPro

Số tối đa tập tin chỉ mục được mở kèm 1 table Không giới hạnSố tối đa tập chỉ mục được mở trong tất cả các vùng làm việc Không giới hạnSố tối đa các mối quan hệ Không giới hạnChiều dài tối đa của các biểu thức quan hệ Không giới hạn2. Vùng tin (Field)Kích thước tối đa vùng tin kiểu Character 254Kích thước tối đa vùng tin kiểu Numeric hay Float 20Số ký tự tối đa dùng để đặt tên cho vùng tin trong 1 Table riêng lẻ 10Số ký tự tối đa dùng để đặt tên cho vùng tin trong 1 Table bên trong một database

128

Trị số nguyên nhỏ nhất -2 147 483 647Trị nguyên lớn nhất 2 147 483 647Mức chính xác của trị số khi tính toán 16 cột3. Biến bộ nhớ và mảngSố lượng biến bộ nhớ ngầm định 1 024Số lượng tối đa biến bộ nhớ có thể chọn 65 000Số lượng tối đa các mảng có thể khai báo 65 000Số lượng tối đa các phần tử trong một mảng 65 0004. Tập chương trình và thủ tụcSố dòng tối đa trong một tập chương trình Không giới hạnKích thước tối đa cho một thủ tục đã được biên dịch 64 KBSố tối đa các thủ tục trong tập chương trình Không giới hạnSố lượng tối đa các lệnh DO gọi lồng nhau 128Số cấp ra lệnh READ lồng trong nhau 5Số lượng tối đa lệnh lập trình cấu trúc lồng trong nhau 384Số lượng tối đa các thông số được trao 27Số lượng tối đa các xử lý phát sinh đồng thời 55. Báo biểuSố tối đa các object trong một báo biểu Không giới hạnChiều dài tối đa một báo biểu 20 inchesTối đa số cấp phân nhóm 1286. Khả năng khácTối đa số cửa sổ mở cùng một lúc Không giới hạnTối đa số cửa sổ Browse 255Số ký tự tối đa trong một chuỗi 2 GBSố ký tự tối đa trong một dòng lệnh 8 192Số ký tự tối đa cho 1 nhãn Report Label 255Số ký tự cho 1 dòng thay thế vĩ mô 8 192Số lượng tối đa tập tin được mở Giới hạn bởi DOSSố tối đa phóm bấm trong 1 Keyboard macro 1 024Số Fields tối đa có thể chọn bởi một lệnh SQL SELECT 255

Các kiểu số liệu :

Kiểu Dùng trong Kích cỡ Phạm viCharacter Văn bản Từ 1 – 254 ký tự Chứa ký tự nào cũng đượcCharacter (Binary)

Văn bản Không thay đổi khi chuyển từ mã quốc gia này sang mã quốc gia khác

Date Ngày tháng 8 bytes 01/01/100 đến 31/12/9999Date Time Ngày giờ 8 bytes 01/01/100 đến 31/12/999 và

có thêm phần giờ từ 00:00:00 a.m đến 11:59:59 p.m

2

Page 3: Tim Hieu Ngon Ngu Lap Trinh Visual FoxPro

Logical Trị luận lý 1 byte Đúng (.T.) hoặc Sai (.F.)Currency Giá trị bằng tiền 8 bytes Từ –

922337203685477.5808 đến 922337203685477.5807

Numeric Số nguyên hay thập phân

8 bytes bộ nhớ; 1 đến 20 bytes khi lưu giữ trong table

Từ –0.9999999999E+19 đến +0.9999999999E+20

Double Số chính xác kép

8 bytes Từ +/-4.94065645841247E-324 đến +/-1.79769313486232E+308

Float Số nguyên hay thập phân

8 bytes bộ nhớ; 1 đến 20 bytes khi lưu giữ trong table

Từ –0.9999999999E+19 đến +0.9999999999E+20

Integer Số nguyên 4 bytes Từ –2147483647 đến 2147483646

General Đối tượng nhúng

4 bytes trong table Chỉ bị giới hạn bởi bộ nhớ

Memo Văn bản ghi nhớ 4 bytes trong table Chỉ bị giới hạn bởi bộ nhớMemo (Binary)

Văn bản ghi nhớ Không thay đổi khi chuyển từ mã quốc gia này sang mã quốc gia khác

* Các vấn đề khác : Ứng dụng (Application) là một tập hợp gồm Programs, Forms, Menus, Labels, Queries, …

được biên dịch thành một chương trình duy nhất. Các ứng dụng được xây dựng bằng chức năng Project Manager, lưu trên đĩa thành tập tin có phần mở rộng là .APP.

Đồ án (Project) là một tập tin theo dõi các : Programs, Forms, Menus, … Các Project được bảo trì bởi chức năng Project Manager, lưu trên đĩa thành tập tin có phần mở rộng là .PJX.

CSDL (Database) cung cấp một môi trường làm việc trong đó chứa một tập hợp các Tables, quy định mối quan hệ (Relaltionships) giữa các Tables, đề ra các thuộc tính (Propeties) cùng các quy luật kiểm chính số liệu dùng để điều khiển đồng bộ giữa các Tables với nhau. Có thể sử dụng độc lập hoặc liên kết chúng vào một project bằng cách thêm chúng vào Project Manager.

Tables lưu giữ số liệu theo các đơn vị gọi là Records (các mẫu tin) và Fields (các vùng) Record là một bộ các vùng tin trong một Table. Một Field là tên của một cột quy định trong Record để chứa dữ kiện thuộc một kiểu nào đó.

Khi đặt tên trong Visual Foxpro, cần lưu ý : Chỉ dùng các ký tự chữ (từ a đến z và từ A đến Z), ký tự số (0 đến 9), dấu gạch dưới. Tên chỉ được bắt đầu bằng ký tự chữ hoặc dấu gạch dưới. Tên có thể dài từ 1 đến 256 ký tự, ngoại trừ tên Field và tên chỉ mục chỉ dài tối đa 10 ký tự. Không nên đặt tên trùng với từ khóa. Tên tập tin thì theo nguyên tắc đặt tên của hệ điều hành đang dùng.

Các toán tử : toán tử xử lý chuỗi :

+ : ghép chuỗi– : ghép chuỗi dời khoảng trắng về cuối$ : thuộc về (So sánh)

toán tử xử lý ngày giờ :+ : cộng– : trừNgày + Số (tính bằng ngày) Ngày sắp tớiNgày – Số (tính bằng ngày) Ngày trước đóNgày giờ + Số (tính bằng giây) Ngày giờ sắp tớiNgày giờ – Số (tính bằng ngày) Ngày giờ trước đó

toán tử luận lý :( ) : kết nhóm, điều kiện bên trong ngoặc kết nhóm được xét trước

3

Page 4: Tim Hieu Ngon Ngu Lap Trinh Visual FoxPro

NOT hoặc ! : Logical NegativeAND : Logical ANDOR : Logical OR(NOT, AND, OR có thể viết theo kiểu cũ : .NOT., .AND., .OR.)

toán tử so sánh :< : nhỏ hơn> : lớn hơn= : bằng<>, #, !=: không bằng (không sử dụng >< hoặc =! hoặc )<=: nhỏ hơn hay bằng (không sử dụng =< hoặc )>=: lớn hơn hay bằng (không sử dụng => hoặc )==: chuỗi ký tự bằng chính xác

toán tử số học :( ) : kết nhóm**, ^ : lũy thừa* : nhân/ : chia% : số dư phép chia nguyên + : cộng– : trừ

Biến hệ thống là do Visual Foxpro tạo ra khi khởi động. Tên biến hệ thống thường khởi đầu bằng dấu gạch dưới.

Biến bộ nhớ do người sử dụng tạo ra, có thể thay đổi giá trị, kiểu hoặc xóa dễ dàng khi hết phiên làm việc của Visual Foxpro.

Hàm cơ hữu là hàm có sẵn trong bộ chương trình Visual Foxpro. Hàm người dùng là hàm do người dùng tự viết và chỉ có tác dụng trong chương trình hay ứng dụng có định nghĩa hàm đó.Môi trường làm việc muốn chạy thật ổn định cần quan tâm đến các tham số môi trường sao cho phù hợp, đôi khi cần phải quy định lại các tham số này bằng các lệnh thích hợp.

II. QUẢN LÝ ĐỀ ÁN ( PROJECT MANAGER ) :

Một ứng dụng là một tập hợp gồm các tập tin, dữ liệu, tư liệu và các đối tượng. Tất cả các thông tin quản lý ứng dụng được lưu trong tập tin chính có phần mở rộng là PJX và tập tin ký ức có phần mở rộng là PJT.

Cửa sổ quản lý ứng dụng đuợc dùng để tổ chức và quản lý các thành phần trong một ứng dụng. Nó gồm có 6 trang : All, Data, Docs, Classes, Code, Other. Trang All chứa toàn bộ thông tin của 5 trang còn lại. Trang Data gồm 2 thành phần : Database và Query. Trang Docs gồm các thành phần : Forms, Reports, Labels. Trang Classes gồm danh sách các lớp được sử dụng trong ứng dụng. Trang Code gồm các tập tin chương trình, thư viện API và các ứng dụng khác. Trang Other gồm các thực đơn, tập tin kiểu văn bản TXT và các tập tin khác.

Các nút chức năng trong cửa sổ ứng dụng : New : để tạo mới các loại thành phần chi tiết. Add : đưa tập tin các loại đã có trên đĩa vào cửa sổ ứng dụng. Modify : cập nhật trên mục được chọn. Browse : liệt kê một tập tin DBF dưới dạng bảng.

4

Page 5: Tim Hieu Ngon Ngu Lap Trinh Visual FoxPro

Close : đóng các tập tin các loại. Open : mở một CSDL. Remove : loại bỏ một tập tin hay một đối tượng ra khỏi cửa sổ ứng dụng. Build : tạo tập tin thực hiện cho các ứng dụng. Preview : xem một báo cáo ở chế độ xem trước trên màn hình. Run : dùng để thực hiện một truy vấn, biểu mẫu, chương trình.

* Tạo một tập tin ứng dụng :Cú pháp : CREATE PROJECT <.PJX> | ?

* Mở một tập tin ứng dụng :Cú pháp : MODIFY PROJECT <.PJX> | ?

* Dịch một tập tin ứng dụng ra tập tin APP hoặc EXE :- Chọn nút chức năng Build hoặc chọn Project, Build từ thực đơn hệ thống.- Chọn cách dịch tập tin ứng dụng :

Rebuild Project để dịch ra tập tin PJX. Build Application để dịch ra tập tin APP Build Executable để dịch ra tập tin EXE.

III. CƠ SỞ DỮ LIỆU ( Database ):Bảng trong mô hình dữ liệu quan hệ là một bảng hai chiều gồm các dòng và cột. Mỗi bảng được

đặc trưng bởi tên có phần mở rộng là DBF và danh sách các cột (thuộc tính). Thứ tự các cột là không quan trọng và hai bảng khác nhau thì phải có tên khác nhau. Có hai loại bảng : bảng tham chiếu (database table) và bảng tự do (free table) không thuộc danh sách tham chiếu của các CSDL. Mỗi vùng là một cột trong bảng, phải thuộc một trong các kiểu dữ liệu : Numeric, Float, Integer, Double, Currency, Character, Date, Date Time, Logical, Memo, General. Mỗi mẫu tin (record) là một dòng trong bảng. Khi muốn sử dụng một bảng phải tiến hành mở bảng bằng lệnh : USE <table>.

Ràng buộc toàn vẹn (RBTV) là điều kiện ràng buộc dữ liệu trong các bảng tham chiếu của CSDL và tất cả các RBTV phải được thỏa mãn ở bất kỳ thời điểm nào. Việc kiểm tra các RBTV thường được thực hiện sau các thao tác cập nhật dữ liệu như thêm, sửa, đánh dấu xóa và có thể được tiến hành thông qua các thủ tục kiểm tra do người thiết kế chương trình ứng dụng viết hay Visual Foxpro tự động kiểm tra các RBTV dựa trên những mô tả chi tiết của người thiết kế về điều kiện ràng buộc đối với dữ liệu. RBTV có 2 mức : ràng buộc trên vùng (được kiểm tra khi có sự thay đổi dữ liệu trên vùng) và ràng buộc mẫu tin (được kiểm tra khi có sự thay đổi dữ liệu trên mẫu tin và được kiểm tra sau ràng buộc trên vùng). Phân loại các RBTV :

RBTV về giá trị của một vùng : là những điều kiện thu hẹp miền giá trị của các vùng. Các vùng này thường là vùng kiểu số, kiểu Date, kiểu Character. RBTV liên vùng : mô tả mối quan hệ giữa các vùng trong một bảng. RBTV giữa các mẫu tin trong một bảng. Siêu khóa – Khóa chính RBTV về khóa ngoại : còn gọi là ràng buộc về phụ thuộc tồn tại. RBTV giữa các mẫu tin của nhiều bảng. RBTV giữa các vùng của nhiều bảng. RBTV phức tạp trên nhiều bảng.

Tạo CSDL mới : chọn một trong các cách sau : Chọn trang Data của cửa sổ ứng dụng, chọn mục Database và nhấp chuột vào chức năng New

và xác định tên trong ô nhập Enter. Thực hiện thông qua lệnh : CREATE DATABASE <.DBC> | ? Thực hiện qua thực đơn hệ thống : chọn File, New, Database và nhấp chuột vào New File.

Thêm CSDL đã có vào danh sách tham chiếu của ứng dụng : chọn mục Database trong trang Data của cửa sổ ứng dụng và nhấp chuột vào chức năng Add.Loại một CSDL ra khỏi danh sách tham chiếu : chọn một trang các cách sau :

Thực hiện qua cửa sổ ứng dụng : chọn tên CSDL cần xóa trong cửa số ứng dụng, chọn nút chức năng Remove. Trong hộp thoại Remove : chọn Remove để xóa CSDL ra khỏi danh sách tham chiếu, chọn Delete để xóa CSDL ra khỏi đĩa, chọn Cancel để ngưng thao tác.

Thực hiện qua cửa sổ lệnh : DELETE DATABASE <.DBC> | ? [DELETETABLES] [RECYCLE].

5

Page 6: Tim Hieu Ngon Ngu Lap Trinh Visual FoxPro

Tạo một bảng bằng bộ công cụ Database Designer :

Chọn biểu tượng đầu tiên bên trái (New Table) của thanh công cụ Databse Designer, chọn nút ấn New table trong hộp thoại ngay sau đó, xác định thư mục và tên table, định nghĩa cấu trúc bảng qua cửa sổ Table Designer.

Cửa sổ Table Designer có trang : Fields, Indexes và Table. Trang Fiels dùng để định nghĩa các vùng của bảng với các ý nghĩa :

Name : tên của vùng. Type : kiểu của vùng. Width, Decimal : kích thước của vùng. Index : dữ liệu của vùng được sắp xếp tăng dẩn (Ascending) hoặc giảm dần (Descending). NULL : chó phép vùng nhận giá trị NULL hay không. Format : dạng hiển thị cho dữ liệu vùng. Input mask : dạng nhập liệu cho dữ liệu của vùng. Caption : tiêu đề của vùng. Rule : các ràng buộc toàn vẹn trên vùng. Message : thông báo lỗi khi dữ liệu không hợp lệ. Default value : giá trị ngầm định cho vùng khi nhập liệu. Field comment : chú thích thêm cho vùng.

Trang Indexes : dùng để mô tả các chỉ mục của bảng. Order : thứ tự sắp xếp. Name : tên của chỉ mục. Type : kiểu chỉ mục (Primary, Candidate, Unique, Regular). Expression : biểu thức khóa của chỉ mục. Filter : điều kiện lọc dữ liệu của chỉ mục.

Trang Table : Name : tên bảng. Database : tập tin CSDL Table file : tập tin DBF chứa dữ liệu của bảng. Records : số mẫu tin của bảng. Fields : số vùng của bảng Length : kích thước của mẫu tin + 1. Rule : chỉ định các điều kiện ràng buộc (biểu thức hay thủ tục) Insert trigger : trigger cho thao tác thêm mẫu tin vào bảng. Update trigger : trigger cho thao tác sửa đổi dữ liệu của các mẫu tin trong bảng. Delete trigger : trigger cho thao tác đánh dấu xóa các mẫu tin trong bảng.

6

Page 7: Tim Hieu Ngon Ngu Lap Trinh Visual FoxPro

Tạo một bảng : Có thể tạo cấu trúc của một bảng bằng lệnh :CREATE TABLE | DBF <.DBF> [NAME <tên>] [FREE] ;(<vùng1> <kiểu1> [(<kích thước1> [, <thập phân1>])] ;[NULL | NOT NULL] ;[CHECK <btL1> [ERROR <btC1>]] ;[DEFAULT <bt1>] ;[PRIMARY KEY | UNIQUE] ;[REFERENCES <bảng1> [TAG <chỉ mục1>]] ;[, <vùng2> …] ;[, PRIMARY KEY <bt2> TAG <chỉ mục2> ;|, UNIQUE <bt3> TAG <chỉ mục3>] ;[, FOREIGN KEY <bt4> TAG <chỉ mục4> [NODUP] ;REFERENCES <bảng2> [TAG <chỉ mục5>]] ;[, CHECK <btL2> [ERROR <btc2>]])

Trong đó : <.DBF> : tên tập tin DBF của bảng sẽ được tạo lập. Bảng sẽ được tự động đưa vào danh sách

tham chiếu của CSDL. NAME <tên> : tên đặt thêm cho bảng. FREE : bảng được tạo ra không được đưa vào danh sách tham chiếu . <vùng1> : tên của vùng thứ nhất của bảng. <kiểu1> : kiểu dữ liệu cho vùng thứ nhất của bảng. <kích thước1> : kích thước của vùng thứ nhất của bảng. <thập phân1> : số chữ số thập phân của vùng thứ nhất. NULL | NOT NULL : cho phép / không cho phép vùng lấy giá trị NULL CHECK <btL1> : ràng buộc toàn vẹn trên vùng thứ nhất trong bảng. Ngay cả một mẫu tin

trắng đưa vào cũng sẽ được kiểm tra. ERROR <btC1> : thông báo lỗi khi ràng buộc toàn vẹn trong thành phần CHECK bị vi phạm. DEFAULT <bt1> : giá trị ngầm định cho vùng. PRIMARY KEY : tạo chỉ mục khóa chính cho vùng, vùng này sẽ là khóa chính của bảng. UNIQUE : tạo chỉ mục khóa cho vùng, sẽ trở thành khóa của bảng. REFERENCES <bảng1> {TAG <chỉ mục1> : bảng được tạo sẽ liên kết khóa ngoại giữa vùng

thứ nhất với <chỉ mục1> của <bảng1>. PRIMARY KEY <bt2> TAG <chỉ mục2> : <bt2> là khóa chính của bảng (có thể gồm nhiều

vùng). Nếu đã dùng thành phần PRIMARY trước đó rồi thì không được dùng thành phần này. UNIQUE <bt3> TAG <chỉ mục3> : <bt3> là khóa của bảng (có thể gồm nhiều vùng), không

chứa một vùng đã tham gia vào khóa chính. FOREIGN KEY <bt4> TAG <chỉ mục4> [NODUP] REFERENCES <bảng2> [TAG <chỉ

mục5>] : bảng được tạo sẽ liên kết khóa ngoại giữa <bt4> với <chỉ mục5> của <bảng2>. Nếu có từ khóa NODUP thì chỉ mục tạo ra sẽ là chỉ mục khóa ngoại.

CHECK <btL2> : mô tả ràng buộc toàn vẹn của bảng. ERROR <btC2> : thông báo lỗi khi thành phần CHECK bị vi phạm trong quá trình cập nhật dữ

liệu trong cửa sỗ Browse hay Edit.Ngoài ra còn các lệnh về sửa đổi cấu trúc bảng, sửa đổi thông tin các vùng, hủy bỏ cột của bảng,

thêm dữ liệu của bảng, cập nhật dữ liệu của bảng, xóa dữ liệu của bảng, truy vấn dữ liệu của CSDL thông qua các lệnh ALTER, INSERT, UPDATE, DELETE, SELECT.Trigger của một bảng là một hành động (tương ứng với 1 thủ tục hay chương trình) được định nghĩa gắn liền với một thao tác cập nhật dữ liệu (thêm, sửa, xóa) của bảng. Trigger thường được sử dụng để kiểm tra các RBTV.

Định nghĩa các trigger cho một bảng : mở cửa sổ Table Designer để thiết kế lại bảng, chọn trang Table, mô tả điều kiện ràng buộc hoặc tên thủ tục kiểm tra ràng buộc trong các ô : Insert trigger, Update trigger, Delete trigger.

Hủy bỏ một trigger : mở cửa sổ Table Designer để thiết kế lại bảng, chọn trang Table, xóa điều kiện ràng buộc hoặc tên thủ tục cần kiểm tra trong các ô : Insert trigger, Update trigger, Delete trigger. Có thể thực hiện thông qua lệnh DELETE TRIGGER.

7

Page 8: Tim Hieu Ngon Ngu Lap Trinh Visual FoxPro

Các loại chỉ mục (index) được lưu trữ dưới 2 loại tập tin : IDX và CDX. Chỉ mục có thể được chia làm 4 loại :

candidate index : chỉ mục khóa, sắp xếp dữ liệu theo các khóa của bảng. primary index : chỉ mục khóa chính, sắp xếp dữ liệu theo khóa chính của bảng. unique index : chỉ mục duy nhất (các siêu khóa), sắp xếp các dữ liệu theo các siêu khóa hay

khóa của bảng. regular index : chỉ mục thông thường, sắp xếp dữ liệu theo một tiêu chuẩn nào đó.

Hai mối quan hệ thường gặp là : 1-1 và 1-n.Tạo mối liên kết giữa hai bảng :

Tạo mối liên giữa khóa k của bảng A và các vùng của bảng B :- Tạo chỉ mục ik cho khóa k và chỉ mục iv cho các vùng. - Click chuột vào dòng ik trong phần Indexes của bảng A.

- Gắp dòng ik và đem thả vào dòng iv trong phần Indexes của bảng B. Khi đó, trong cửa sổ chính của bộ công cụ Database Designer sẽ xuất hiện đường nối thể hiện mối liên kết giữa hai bảng A và B.

Tạo mối liên giữa khóa ka của bảng A với khóa kb của bảng B :- Tạo chỉ mục ia cho khóa ka và chỉ mục ib cho khóa kb. - Click chuột vào dòng ia trong phần Indexes của bảng A.

Gắp dòng ia và đem thả vào dòng ib trong phần Indexes của bảng B. Khi đó, trong cửa sổ chính của bộ công cụ Database Designer sẽ xuất hiện đường nối thể hiện mối liên kết giữa hai bảng A và B.

IV. LẬP TRÌNH : 1. Chương trình : là một tập hợp các lệnh sẽ được thực hiện tuần tự từ trên xuống hoặc theo các cấu trúc điều khiển. Tên của chương trình là tên của tập tin chứa nó, có phần mở rộng là PRG. Soạn thảo chương trình : Cú pháp : MODIFY COMMAND <.PRG> | ? [NOEDIT]

<.PRG> | ? : chỉ định tên tập tin chương trình, dấu ? cho phép đặt tên chương trình trong cửa sổ đối thoại OPEN.

NOEDIT : mở chương trình ra để xem, không cho sửa nội dung.

8Tạo cửa sổ soạn thảo

chương trình

Page 9: Tim Hieu Ngon Ngu Lap Trinh Visual FoxPro

Dịch và kiểm lỗi chương trình :Cú pháp : COMPILE <.PRG> | ? [NODEBUG]<.PRG> | ? : tương tự phần soạn thảo NODEBUG : không lưu số thứ tự của các dòng lệnh và người sử dụng không thể gỡ rối trong

quá trình thực hiện chương trình.Khi phát hiện lỗi sai trong chương trình, các lỗi sai được đưa vào tập tin có tên trùng với tên

chương trình và có phần mở rộng là ERR. Có thể dịch chương trình bằng cách chọn Program, Complie từ thực đơn hệ thống.

Thực hiện chương trình :Cú pháp : DO <chương trình> | ?

<chương trình> | ? : tên chương trình muốn thực hiện.Có thể chọn Program, Do từ thực đơn hệ thống.

2) Biến ký ức (biến bộ nhớ) là vùng bộ nhớ dùng để lưu trữ tạm thời một dữ liệu. Qui tắc đặt tên tương tự như vùng trong bảng. Trước khi sử dụng phải khai báo bằng một trong các lệnh sau :

Lệnh gán :Cú pháp : <biến1> = <bt1>(gán giá trị <bt1> cho <biến1>)hay : STORE <bt2> TO <biến2> [, <biến3>, …] (dùng để gán cùng một giá trị cho nhiều biến)Khi biến ký ức trùng tên với tên một biến vùng, sử dụng M. hay M-> đặt trước biến ký ức để chuyển quyền ưu tiên cho biến ký ức.

Lệnh PUBLIC : Dùng để khai báo một danh sách các biến toàn cục.Cú pháp : PUBLIC <biến1> [, <biến2>, …]

Lệnh LOCAL : Dùng để khai báo một dánh sách các biến cục bộ hay biến cục bộ. Cú pháp : LOCAL <biến1> [, <biến2>, …]

Khai báo mảng :Cú pháp : DIMENSION <mảng1>(<kích thuớc1>) [, <mảng2>(kíchthước2) …]

hay : PUBLIC <mảng3>(<kích thuớc3>) [, <mảng4>(kíchthước4) …]hay : LOCAL <mảng5>(<kích thuớc5>) [, <mảng6>(kíchthước6) …]

mảng1 : tên biến mảng 1 hay 2 chiều.kích thuớc1 : kích thước hay số phần tử của các chiều.

Dùng để khai báo một dánh sách các biến cục bộ hay biến cục bộ. Lưu ý lệnh này không được viết tắt thành LOCA vì sẽ lầm lẫn với lệnh LOCATE.

Lệnh DIMENSION dùng để khai báo các biến mảng 1 hoặc 2 chiều.Lệnh PUBLIC dùng để khai báo mảng toàn cục.Lệnh LOCAL dùng để khai báo mảng cục bộ.

Sau khi khai báo mảng, có thể sử dụng lệnh gán để gán các giá trị cho mảng. Việc khai báo biến có thể chỉ cần đặt trước khi sử dụng biến mà không bắt buộc phải đặt ở đầu chương trình. Nó có thể thực hiện ở cửa sổ lệnh cũng như bất cứ vị trí nào trong chương trình. Giá trị của biến ký ức được lưu thành một tập tin để sử dụng sau này có phần mở rộng là MEM.

Lệnh lưu các giá trị của biến ký ức lên tập tin :Cú pháp : SAVE TO <.MEM> [ALL LIKE <dạng1> | ALL EXCEPT <dạng2>]

<.MEM> : tên tập tin lưu trữ giá trị của biến ký ức. Ngầm định, sẽ lưu trữ tất cả các biến ký ức đang tồn tại trong bộ nhớ lên tập tin.ALL LIKE <dạng1> : chỉ lưu các biến ký ức có tên phù hợp với <dạng1>ALL EXCEPT <dạng2> : lưu tất cả các biến ký ức ngoại trừ các biến có tên phù hợp với

<dạng2>. Lệnh chuyển tải các biến ký ức từ tập tin lên bộ nhớ :

Cú pháp : RESTORE FROM <.MEM> [ADDITIVE] <.MEM> : tên tập tin lưu trữ các biến ký ức muốn chuyển tải vào bộ nhớ. Ngầm định, các biến

ký ức đang tồn tại trong bộ nhớ sẽ bị mất đi và thay vào đó là các biến được lưu trữ từ tập tin <.MEM> lên.

9

Page 10: Tim Hieu Ngon Ngu Lap Trinh Visual FoxPro

ADDITIVE : các biến ký ức hiện có trong bộ nhớ không mất đi mà cùng tồn tại với các biến được chuyển tải từ tập tin <.MEM> lên.

Việc trao đổi dữ liệu giữa biến vùng và biến ký ức thường xuyên xảy ra trong quá trình cập nhật dữ liệu. Lệnh SCATTER và GATHER sẽ thực hiện bước sao chép nội dung các biến vùng ra biến ký ức và ghi nội dung các biến ký ức đã được xử lý và kiểm tra vào mẫu tin hiện hành của DBF.

Cú pháp : SCATTER MEMVAR [MEMO] [BLANK]GATHER MEMVAR [MEMO]

Lệnh SCATTER tạo ra một bộ biến ký ức trùng tên với các vùng của tập tin DBF và tự động sao chép nội dung của mẫu tin hiện hành cho bộ biến ký ức này. Từ khóa MEMO nhằm sao chép cả vùng kiểu Memo (nếu có) thành các biến kiểu chuỗi. Từ khóa BLANK sẽ cho phép chép một mẫu tin trắng thay vì mẫu tin hiện hành. Lệnh GATHER có tác dụng ngược lại. Hiện nay, đã có những công cụ tiện dụng và hiệu quả trong việc tạo các màn hình nhập liệu. Bấy giờ, việc giao tiếp sẽ được thực hiện gián tiếp qua các ô điều khiển.

Macro (&) được dùng với các biến ký ức kiểu chuỗi. Lệnh có chứa macro là lệnh chưa hoàn chỉnh, nó sẽ được thông dịch hai lần trước khi thực hiện.3) Cấu trúc điều khiển : tuần tự, chọn lựa, cấu trúc lặp.

Cấu trúc tuần tự : là cấu trúc điều khiển cơ bản của Visual Foxpro. Cấu trúc chọn lựa :* Cấu trúc điều kiện đơn IF :Cú pháp : IF <btL>

<nhóm lệnh1>[ELSE

<nhóm lệnh2>]ENDIF

Khi thực hiện đến cấu trúc này, <btL> được kiểm tra. Nếu bằng .T. sẽ thực hiện <nhóm lệnh1> từ sau IF đến trước ELSE (nếu có) hoặc đến trước ENDIF (nếu không có ELSE). Nếu bằng .F. sẽ thực hiện <nhóm lệnh2> từ sau ELSE đến đến trước ENDIF (nếu có) hoặc bỏ qua cấu trúc này (nếu không có ELSE). Sau đó, chương trình sẽ được tiếp tục thực hiện phần tiếp theo sau ENDIF. Đối với cấu trúc chọn lựa đơn giản, có thể dùng hàm IIF().* Cấu trúc nhiều điều kiện DO CASE :

Cú pháp : DO CASECASE <btL1>

<nhóm lệnh1>CASE <btL2>

<nhóm lệnh2>…

CASE <btLn><nhóm lệnhn>

[OTHERWISE<nhóm lệnh0>]

ENDCASE Cấu trúc điều khiển DO CASE sẽ lần lượt kiểm tra các điều kiện <btL1>, <btL2>, …, , <btLn> và thực hiện nhóm lệnh ở sau điều kiện đầu tiên được thoả. Nếu tất cả các điều kiện đều không thỏa sẽ thực nhóm lệnh ở sau OTHERWISE nếu có.

Cấu trúc lặp :* Cấu trúc điều khiển FOR … ENDFOR :

Cú pháp : FOR <biến ký ức> = <btN1> TO <btN2> [STEP ,btN3>]…[LOOP]…[EXIT]…ENDFOR

10

Page 11: Tim Hieu Ngon Ngu Lap Trinh Visual FoxPro

Thân của vòng lặp được lặp đi lặp lại nhiều lần trong khi <biến ký ức> thay đổi giá trị từ <btN1> đến <btN2>. Sau mỗi lần thực hiện thân vòng lặp, <biến ký ức> được thêm <btN3> nếu có STEP hoặc tự động tăng lên 1 nếu không có STEP.

Gặp từ khóa EXIT trong thân vòng lặp sẽ thoát khỏi cấu trúc điều khiển FOR và thực hiện tiếp các lệnh sau ENDFOR.

Gặp từ khóa LOOP trong thân vòng lặp, sẽ bỏ qua các lệnh còn lại của thân vòng lặp trong lần thực hiện đó, thay đổi giá trị <biến ký ức>, chuyển điều khiển trở lại vòng lặp FOR cho lần thực hiện kế.* Cấu trúc điều khiển DO WHILE … ENDDO :

Cú pháp : DO WHILE <btL>…[LOOP]…[EXIT]…ENDDO

Thân của vòng lặp được lặp đi lặp lại nhiều lần trong khi <btL > vẫn còn là .T. Chỉ khi nào <btL>có giá trị .F. thì sẽ thoát khỏi cấu trúc này. Từ khóa EXIT, LOOP tương tự như trên.* Cấu trúc điều khiển SCAN … ENDSCAN :Cú pháp : SCAN [<phạm vi>] [FOR <btL1>] [WHILE <btL2>]

…[LOOP]

…[EXIT]

…ENDSCAN

Cấu trúc này dùng để “quét” tập tin DBF. Không cần đặt lệnh SKIP vào trong thân chương trình vì sau mỗi lần thực hiện vòng lặp, con trỏ mẫu tin tự động dời xuống mẫu tin kế. Từ khóa EXIT, LOOP tương tự như trên. Cấu trúc ngắt :* Ngắt khi phát hiện lỗi sai :

Cú pháp : ON ERROR [<lệnh>]Dùng để kiểm soát và xử lý lỗi sai trong quá trình thực hiện chương trình hay lệnh.<lệnh> : lệnh sẽ thi hành để xử lý lỗi sai. Thường là lệnh gọi thực hiện một chương trình hay thủ

tục (lệnh DO). Hàm ERROR() cho biết mã số tương ứng của lỗi sai, người lập trình dựa vào đây để có xử lý thích hợp cho từng lỗi sai. Sau khi <lệnh> thực hiện xong, sẽ tiếp tục làm dòng lệnh tiếp theo ngay bên dưới dòng phát sinh lỗi hoặc thực hiện lại dòng phát sinh ra lỗi nếu trong chương trình hay thủ tục xử lý lỗi có chứa lệnh RETRY.

Lệnh ON ERROR không có lệnh theo sau dùng để trả quyền xử lý lỗi sai về cho Visual Foxpro.* Ngắt khi bấm phím qui định :Cú pháp : ON ESCAPE [<lệnh1>] Lệnh này dùng để thực hiện một xử lý khác (,lệnh1>) thay cho cách xử lý ngầm định của Visual Foxpro. Nếu không có thành phần lệnh kèm theo có tác dụng trả về cách xử lý ngầm định của Visual Foxpro.

ON KEY [LABEL <tổ hợp phím> [lệnh2>]]Lệnh này dùng để mô tả những xử lý (<lệnh2>) khi người sử dụng bấm tổ hợp phím hay bấm

chuột. Nếu không có thành phần lệnh kèm theo sẽ trả về cách xử lý ngầm định nếu có của tổ hợp phím. Lệnh này được dùng phối hợp với lệnh PUSH KEY để ghi nhớ cách xử lý hiện hành của tất cả các phím trước khi dùng ON KEY LABEL và phục hồi lại cách xử lý của các phím khi kếtthúc chương trình bằng lệnh POP KEY. Cấu trúc lồng nhau :

Ngoại trừ lệnh ON ERROR được lồng vào một thủ tục xử lý lỗi khác, tất cả các cấu trúc điều khiển đã nêu có thể lồng vào nhau theo nhiều cấp. Kỹ thuật gióng hàng được áp dụng nhằm tránh các lỗi sai về cú pháp và giúp dễ đọc hơn.

11

Page 12: Tim Hieu Ngon Ngu Lap Trinh Visual FoxPro

4) Thủ tục (Procedure) : là đoạn chương trình con để thực hiện một chức năng nào đó. Một thủ tục đầu bằng chỉ thị PROCEDURE để đặt tên cho thủ tục và có thể kết thúc bằng chỉ thị RETURN hoặc ENDPROC (không bắt buộc).Cú pháp : PROCEDURE <tên thủ tục>…[RETURN]…[ENDPROC]Các thủ tục có thể lưu chung trong một chương trình nhưng phải tách rời và không được lồng

nhau. Khi gọi thực hiện thủ tục, sẽ thực hiện như sau :Cú pháp : DO <thủ tục> IN <.PRG>

Nếu các thủ tục chứa trong một tập tin chương trình, có thể mở tập tin chương trình này bằng lệnh SET PROCEDURE TO [<.PRG>] và bỏ qua phần IN <.PRG> trong các lệnh gọi thực hiện thủ tục.

Thủ tục nội tại là một dạng thủ tục rất đặc biệt của Visual Foxpro, thường là các triggers của CSDL. Chọn mục Stored Procedures trong cửa sổ ứng dụng, chọn một trong các nút chức năng New hoặc Add hoặc Modify (tác dụng như nhau). Khi đó xuất hiện một cửa sổ chứa tất cả các thủ tục nội tại hiện có của CSDL để người lập trình có thể soạn thảo một thủ tục mới, sửa đổi hoặc xóa bỏ một thủ tục đã có.

Dịch các thủ tục nội tại :Cú pháp : COMPILE DATABASE <.DBC>

Biến toàn cục (Global) : là biến có thể sử dụng ở mọi cấp chương trình (hay thủ tục) gọi nhau; được khai báo trong chương trình (hay thủ tục) bằng lệnh PUBLIC hoặc được khai báo ở cửa sổ lệnh không phải bằng lệnh LOCAL; sẽ mất đi nếu gặp một trong các lệnh : QUIT, CLEAR ALL, CLEAR MEMORY, RELEASE <biến1> [<biến2>, …]

Biến cục bộ (Local) : là biến chỉ có thể sử dụng trong chương trình (hay thủ tục) khai báo nó và trong những chương trình (hay thủ tục) mà nó gọi thực hiện; được khai báo trong chương trình (hay thủ tục) không phải bằng lệnh PUBLIC hoặc được khai báo ở cửa sổ lệnh bằng lệnh LOCAL; sẽ mất đi nếu gặp một trong các lệnh : QUIT, CLEAR ALL, CLEAR MEMORY, RELEASE <biến1> [<biến2>, …]

Trao đổi tham biến : Có hai hình thức trao đổi tham biến : trao đổi theo giá trị (có thể thay đổi giá trị của bản sao nhưng không làm thay đổi giá trị gốc của tham biến) và trao đổi theo địa chỉ (có thể làm thay đổi giá trị gốc của tham biến). Để thực hiện việc trao đổi tham biến giữa các chương trình (hay thủ tục), phải chỉ định danh sach tham biến gởi đi.

Cú pháp : DO <thủ tục> WITH <tham biến1> [, <tham biến2>, …]Tại chương trình (thủ tục) được gọi thực hiện, phải đặt dòng lệnh khai báo các tham biến nhận PARAMETERS hay LPARAMETERS ở ngay sau dòng lệnh đặt tên của thủ tục.Cú pháp : PROCEDURE <tên thủ tục>

PARAMETERS <tham biến1> [, <tham biến2>, …]…

ENDPROCTối đa có 27 tham biến được khai báo. Che biến : nhằm tránh tình trạng các biến cục bộ được đặt tên trùng nhau ngoài ý muốn khi có

nhiều người cùng tham gia viết một chương trình ứng dụng.Cú pháp : PRIVATE <biến1> [, <biến2>, …]hay : PRIVATE ALL [LIKE <dạng1> | EXCEPT <dạng2>]<biến1> [, <biến2>, …] : các biến cục bộ được che đi.PRIVATE ALL : che tất cả các biến cục bộ.PRIVATE ALL LIKE <dạng1> : che tất cả các biến có tên phù hợp với <dạng1>.PRIVATE ALL EXCEPT <dạng2> : che tất cả các biến có tên không phù hợp với <dạng2>.

5) Hàm (Function) : tương tự thủ tục về mặt chức năng, chỉ khác ở chỗ hàm sẽ trả về nơi gọi một và chỉ một giá trị. Kiểu dữ liệu của hàm là kiểu của giá trị trả về. Hàm có sẵn như DATE(), INT(), UPPER(), … do Visual Foxpro cung cấp. Hàm do người sử dụng định nghĩa thì trong phần thân của hàm phải có ít nhất 1 dòng lệnh RETURN để trả giá trị về nơi gọi.

Cú pháp : FUNCTION <tên hàm>

12

Page 13: Tim Hieu Ngon Ngu Lap Trinh Visual FoxPro

PARAMETERS <tham biến1> [, <tham biến2>, …]…[RETURN <bt>]…ENDFUNC<tên hàm> : tên của hàm do người dùng định nghĩa.PARAMETERS <tham biến1> [, <tham biến2>, …] : danh sách các tham biến của hàm.<bt> : giá trị trả về nơi gọi.

V. MÀN HÌNH GIAO DIỆN (INTERFACE DISPLAY):Màn hình giao diện là những cửa sổ có chứa các đối tượng đặc biệt gọi là các điều khiển, đảm

nhiệm việc giao tiếp giữa người dùng và ứng dụng. Có hai loại màn hình giao diện thông dụng : dạng đơn giản liên kết với một bảng và dạng one – to – many liên kết với bảng có thiết lập mối quan hệ với nhau.Thanh công cụ và thuộc tính tạo giao diện :

Nhãn (Label): là đoạn văn bản cố định, dài tối đa 256 ký tự. Khi đặt \< trước một ký tự nào đó thì ký tự đó trở thành phím nóng.

Thuộc tính Ý nghĩaCaption Nội dung của nhãnName Tên của nhãn

Hộp văn bản (Text Box) : dùng để hiển thị và cập nhật dữ liệu trên một dòng.

Thuộc tính Ý nghĩaControlSource Vùng kết nối với hộp văn bảnName Tên của hộp văn bảnFormat Dạng hiển thị và nhập liệu của hộp văn bản.

K : đánh dấu chọn tất cả dữ liệu trong hộp điều khiển khi điều khiển nhận được focus.! : đổi chữ thường thành chữ hoa.Z : không hiện 0 nếu giá trị của điều khiển đang là 0.

InputMask Dạng nhập liệu của hộp văn bản.X : cho phép nhập bất kỳ ký tự.9 : chỉ được nhập số và dấu.# : chỉ nhập số, dấu và khoảng trắng.

MaxLength Qui định số ký tự tối đa có thể nhập đưa vào hộp văn bản (không hạn chế nếu = 0)

ToolTipText Chú thích thêm cho hộp văn bản

13

Page 14: Tim Hieu Ngon Ngu Lap Trinh Visual FoxPro

Hộp soạn thảo (Edit Box) : dùng để hiển thị và cập nhật dữ liệu trên nhiều dòng (thích hợp với dữ liệu kiểu Memo hay kiểu Character có độ dài khá lớn).

Thuộc tính Ý nghĩaControlSource Vùng kết nối với hộp soạn thảoName Tên của hộp soạn thảoFormat Dạng hiển thị của hộp soạn thảoMaxLength Qui định số ký tự tối đa có thể nhập đưa vào hộp soạn

thảo (không hạn chế nếu = 0)ToolTipText Chú thích thêm cho hộp soạn thảo

Nút lệnh (Command Button) : dùng để đặc trưng cho một chức năng sẽ được thực hiện khi người sử dụng chọn nút lệnh này.

Thuộc tính Ý nghĩaTerminateRead Giá trị là .T. thì màn hình giao diện sẽ đóng lại sau khi thi

hành nút lệnhName Tên của nút lệnhCaption Văn bản xuất hiện trên nút lệnhPicture Hình ảnh xuất hiện trên nút lệnhClick Event Thủ tục sẽ được thi hành khi người sử dụng chọn nút lệnh

Ô kiểm tra (Check Box) : Một ô kiểm tra được chọn (x) có ý nghĩa người sử dụng đồng ý với nội dung mô tả của ô kiểm tra.

Thuộc tính Ý nghĩaControlSource Vùng kết nối với ô kiểm traCaption Văn bản xuất hiện trên ô kiểm traPicture Hình ảnh xuất hiện trên ô kiểm tra

Hộp danh sách (List Box) – Hộp danh sách kéo xuống (Combo Box) : Hộp danh sách là một khung chữ nhật chứa danh sách các mục, trong đó mỗi dòng là một mục và có thể có nhiều cột. Tương tự cho hộp danh sách kéo xuống nhưng chỉ cho hiển thị một dòng (mục), chỉ khi click chuột vào mũi tên phía phải của hộp danh sách kéo xuống thì tất cả các mục mới được hiển thị

Thuộc tính Ý nghĩaBoundColumn Giá trị cột thứ mấy được trả về khi chọn một mục chọn

trong hộp danh sách hoặc hộp danh sách kéo xuống.ControlSource Vùng kết nối với hộp danh sách hoặc hộp danh sách kéo

xuống.ColumnCount Số cột hiển thị trên hộp danh sách hoặc hộp danh sách

kéo xuống.ListItem Cho phép truy cập đến các mục trong hộp danh sách

hoặc hộp danh sách kéo xuống.ListCount Cho biết số mục có trong hộp danh sách hoặc hộp danh

sách kéo xuống.RowSource Nguồn dữ liệu cung cấp các cho hộp danh sách hoặc

hộp danh sách kéo xuống.RowSourceType Kiểu dữ liệu nguồn, có thể là Query, Bí danh, câu lệnh

SQL, …AddItemMethod Đưa một mục vào danh sáchRemoveItemMethod Hủy một mục ra khỏi danh sáchRequeryMethod Cập nhật lại các thay đổi trong hộp danh sách hoặc hộp

danh sách kéo xuống.

14

Page 15: Tim Hieu Ngon Ngu Lap Trinh Visual FoxPro

Spinner : là một điều khiển cho phép người dùng chọn giá trị trong một phạm vi.

Thuộc tính Ý nghĩaControlSource Vùng kết nối với SpinnerIncrement Bước tăng hoặc giảm cho SpinnerKeyboardHighValue, KeyboardLowValue

Giá trị lớn nhất và nhỏ nhất có thể đưa vào từ bàn phím cho Spinner.

SpinnerHighValue, SpinnerLowValue

Giá trị lớn nhất và nhỏ nhất chọn trong Spinner.

Lưới (Grid) : dùng để hiển thị dữ liệu theo dạng lưới, là một bảng có nhiều cột và nhiều dòng; thường sử dụng trong màn hình giao diện one – to – many, nội dung của lưới là dữ liệu của bảng table và các dữ liệu này có quan hệ với bảng cha theo một biểu thức quan hệ. Mỗi cột của lưới gồm hai thành phần : tiêu đề (Headder) và điều khiển của cột (ngầm định là hộp văn bản, có thể đổi thành combo box hay ô kiểm tra).

Thuộc tính Ý nghĩaChildOrder Tên index Tag của dữ liệu nguồn cho lướiLinkMaster Bí danh của bảng chaRecordSourceType Kiểu dữ liệu nguồn của lướiRecordSource Dữ liệu nguồn của lướiRelationalExpr Biểu thức quan hệ giữa bảng cha và bảng conColumnCount Số cột hiển thị trong lướiDeleteMark Là .T. thì bên trái lưới sẽ xuất hiện thêm một cột để đánh

dấu xóa mẫu tinRecordMark Là .T. thì sẽ xuất hiện thêm một cột chứa dấu hiệu cho

các mẫu tin được chọn. Màn hình nhiều trang : được sử dụng trong trường hợp màn hình giao diện có nhiều điều khiển

và cần tổ chức, phân nhóm theo chủ đề.

Thuộc tính Ý nghĩaActivePage Số thứ tự trang hiện hànhPageCount Tổng số trang của màn hình nhiều trangPageHeight Độ cao của trangPageWidth Độ rộng của trangTabs Là .T. thì màn hình nhiều trang sẽ có TabsTabStretch Là 0 sẽ cho phép hiển thị nhiều dòng nếu tabs không đủ

chỗ trên nàn hình nhiều trang.Là 1 chỉ cho phép hiển thị 1 dòng tabs trên màn hình nhiều trang.

2) Thiết kế màn hình giao diện bằng Form Winzard : Tạo màn hình giao diện đơn giản từ một bảng :

+ Chọn nút chức năng New trong cửa sổ ứng dụng.+ Chọn nút nhấn Form Wizard.+ Chọn dòng Form Winzard, chọn OK.+ Định nghĩa cấu trúc của màn hình giao diện :

* Bước 1 : Chọn các vùng.& Chọn CSDL, bảng và các vùng cho màn hình giao diện.& Chọn Next để sang bước tiếp theo.

* Bước 2 : Chọn dạng của màn hình giao diện& Chọn dạng màn hình giao diện.& Chọn Next để sang bước tiếp theo.

* Bước 3 : Thứ tự sắp xếp các mẫu tin

15

Page 16: Tim Hieu Ngon Ngu Lap Trinh Visual FoxPro

& Chọn thứ tự sắp xếp các vùng nếu cần.& Chọn Next để sang bước tiếp theo.

* Bước 4 : Kết thúc& Đặt tiêu đề cho màn hình giao diện& Chọn Preview để xem trước màn hình giao diện mới tạo.& Chọn Finish để kết thúc, đặt tên màn hình giao diện hộp thoại xuất hiện ở đây.

Tạo màn hình giao diện One – to - Many :+ Chọn nút chức năng New trong cửa sổ ứng dụng.+ Chọn nút nhấn Form Wizard.+ Chọn dòng One – to – Many Form Winzard, chọn OK.+ Định nghĩa cấu trúc của màn hình giao diện :

* Bước 1 : Chọn các vùng của bảng cha& Chọn CSDL, bảng cha và các vùng cho màn hình giao diện.& Chọn Next để sang bước tiếp theo.

* Bước 2 : Chọn các vùng của bảng con& Chọn CSDL, bảng con và các vùng cho màn hình giao diện.& Chọn Next để sang bước tiếp theo.

* Bước 3 : Xác định mối quan hệ giữa hai bảng.* Bước 4 : Chọn dạng của màn hình giao diện (tương tự như trên)* Bước 5 : Thứ tự sắp xếp các mẫu tin (tương tự như trên)* Bước 6 : Kết thúc (tương tự như trên)

3) Thiết kế màn hình giao diện bằng bộ công cụ Form Design : Tạo màn hình giao diện :

Cú pháp : CREATE FORM <.SCX> | ? Sửa đổi màn hình giao diện :

Cú pháp : MODIFY FORM <.SCX> | ?Bộ công cụ Form Designer có một cửa sổ Form biểu diễn cấu trúc (gồm các điều khiển) của màn

hình giao diện và cửa sổ Propeties để hiển thị các thuộc tính của điều khiển trong màn hình giao diện.

VI. REPORT ( Báo Cáo): 1. Các dạng báo biểu :

Báo biểu không phân nhóm : là những báo biểu đơn giản, dữ liệu của báo cáo là nội dung của các vùng thuộc một hoặc nhiều bảng.

- Báo biểu theo cột : dữ liệu liên quan đến một đối tượng được thể hiện ở nhiều cột trên một dòng.

- Báo biểu theo dòng : dữ liệu liên quan đến một đối tượng được thể hiện ở nhiều cột trên nhiều dòng.

Báo biểu phân nhóm : dữ liệu được phân thành nhiều nhóm theo các khóa. Cuối mỗi dòng có thể có các dòng tính toán.

- Báo biểu theo nhóm và tổng cộng : dữ liệu phân nhóm và có thể có tổng cộng ở cuối mỗi nhóm.

- Báo biểu dạng 1 - n : dữ liệu thể hiện theo từng nhóm trong bảng cha và đối với mỗi nhóm có thể có thêm các chi tiết của nhóm đó trong bảng con. Giữa bảng cha và bảng con phải có thiết lập mối quan hệ.

2. Cấu trúc của báo biểu : Bao gồm các thành phần : Title : tiêu đề của báo biểu, chỉ in ở trang đầu tiên của báo biểu. Summary : tóm tắt của báo biểu, chỉ in ở trang cuối cùng của báo biểu. Page Header : tiêu đề xuất hiện ở đầu mỗi trang của báo biểu. Page Footer : hạ mục xuất hiện ở cuối mỗi trang của báo biểu. Detail : phần nội dung chi tiết của báo biểu. Group Header : tiêu đề mỗi nhóm dữ liệu (chỉ có trong loại báo biểu được phân nhóm). Group Footer : hạ mục cuối mỗi nhóm dữ liệu (chỉ có trong loại báo biểu được phân nhóm).

16

Page 17: Tim Hieu Ngon Ngu Lap Trinh Visual FoxPro

3. Có thể tạo báo biểu bằng bộ công cụ Report Wizards hoặc Report Designer.

VII. MENU (THỰC ĐƠN) : Các thực đơn bao gồm : Thực đơn kéo xuống, thực đơn ngang, thực đơn nhiều cấp, thực đơn hệ thống. Trước khi kết thúc thực hiện chương trình, dùng lệnh SET SYSMENU TO DEFAULT để trả lại thực đơn hệ thống của Visual Foxpro.

1. Thực đơn kéo xuống :

Định nghĩa thực đơn kéo xuống : dùng lệnh DEFINE POPUP. Định nghĩa các mục chọn của thực đơn kéo xuống : dùng lệnh DEFINE BAR. Khai báo nội dung xử lý cho thực đơn kéo xuống : * Xử lý toàn cục trên thực đơn kéo xuống : dùng lệnh ON SELECTION POPUP <tdkx> <lệnh>* Xử lý cục bộ từng mục chọn của thực đơn kéo xuống : dùng lệnh ON SELECTION BAR

<btN> OF <tdkx> <lệnh> Kích hoạt thực đơn kéo xuống : dùng lệnh ACTIVATE POPUP. Ngưng kích hoạt thực đơn kéo xuống : dùng lệnh DEACTIVATE POPUP. Che giấu thực đơn kéo xuống : dùng lệnh HIDE POPUP. Hiển thị thực đơn kéo xuống : dung lệnh SHOW POPUP.

2. Thực đơn ngang : Định nghĩa thực đơn ngang : dùng lệnh DEFINE MENU.

17

Page 18: Tim Hieu Ngon Ngu Lap Trinh Visual FoxPro

Định nghĩa các mục chọn của thực đơn ngang : dùng lệnh DEFINE PAD. Khai báo nội dung xử lý cho thực đơn kéo ngang :

* Xử lý toàn cục trên thực đơn ngang : dùng lệnh ON SELECTION MENU <thực đơn ngang> <lệnh>* Xử lý cục bộ từng mục chọn ngang của thực đơn : dùng lệnh ON SELECTION PAD <mục chọn ngang> OF <thực đơn ngang> <lệnh>

Kích hoạt thực đơn ngang : dùng lệnh ACTIVATE MENU. Ngưng kích hoạt thực đơn ngang : dùng lệnh DEACTIVATE MENU. Che giấu thực đơn ngang : dùng lệnh HIDE MENU. Hiển thị thực đơn ngang : dung lệnh SHOW MENU.

3. Thực đơn nhiều cấp : Là sự kết hợp của hai thực đơn ở trên để có được một hệ thống thực đơn nhiều cấp.

4. Thực đơn hệ thống : là thực đơn được định nghĩa bằng lệnh DEFINE MENU và có kèm theo việc đặt tên cho thực đơn này là _MSYSMENU.Có thể tạo thực đơn nhanh chóng hơn bằng bộ công cụ Menu Designer.Dịch tập tin thực đơn MNX thành tập tin MPR : - Dùng lệnh MODIFY MENU để mở tập tin thực đơn trong cửa sổ của Menu Designer.- Chọn Menu, Generate từ thực đơn hệ thống.- Trong ô Output File của cửa sổ đối thoại, đặt tên cho tập tin MPR sẽ được phát sinh va sau đó click chuột vào nút nhấn Generate.Thi hành tập tin chương trình thực đơn MPR : DO <.MPR> ./.

18