MICROSOFT ACCESS.

1 MICROSOFT ACCESS ...
Author: 融 雷
0 downloads 5 Views

1 MICROSOFT ACCESS

2 Chương I. Một số khái niệm cơ bảnNỘI DUNG Chương I. Một số khái niệm cơ bản Chương II. Các thao tác với bảng (Tables) Chương III. Truy vấn thông tin (Queries) Chương IV. Thiết kế giao diện (Forms) Chương V. Thiết kế báo cáo (Reports) Chương VI. Các lệnh vĩ mô (Macros) Chương VII. Lập trình trong Access (Modules)

3 CHƯƠNG I. MỘT SỐ KHÁI NIỆM CƠ BẢNNỘI DUNG: §1.1. CSDL & hệ quản trị CSDL 1. Cơ sở dữ liệu 2. Hệ quản trị cơ sở dữ liệu 3. Công cụ quản trị CSDL Microsoft Access §1.2. Mô hình dữ liệu quan heä 1. Thuộc tính 2. Khóa (Khóa chính, khóa ngoại) 3. Ràng buộc toàn vẹn

4 §1.1. CSDL & hệ quản trị CSDL 1. Cơ sở dữ liệu (CSDL – Database) là một hệ thống thông tin có cấu trúc, được lưu trữ trên các thiết bị mang tin từ tính (thường là đĩa từ), phục vụ việc khai thác thông tin đồng thời của nhiều người sử dụng với nhiều mục đích khác nhau.  Các đặc tính quan trọng cơ bản nhất của Cơ sở dữ liệu được in màu và gạch chân. 2. Hệ quản trị cơ sở dữ liệu (DataBase Management System – DBMS) là một hệ thống chương trình quản trị CSDL đồng thời là công cụ giao tiếp giữa người sử dụng (NSD) với hệ thống cơ sở dữ liệu. Một hệ quản trị CSDL phải có các cơ chế:  Đảm bảo tính chất đầy đủ, không trùng lặp và không dư thừa thông tin.

5 (tiếp theo)  Đảm bảo tính nhất quán, an toàn và toàn vẹn dữ liệu.  Bảo mật dữ liệu.  Giải quyết tranh chấp dữ liệu.  Đảm bảo tính độc lập giữa dữ liệu và chương trình.  Tự sao lưu (BackUp) và phục hồi (Restore) khi có sự cố.  Ngôn ngữ truy nhập CSDL, cho phép người sử dụng và các chương trình ứng dụng khai thác thông tin trong CSDL. Ngôn ngữ này được chia thành 4 lĩnh vực (hay phạm trù – Categoria): Ngôn ngữ định nghĩa dữ liệu (Data Definition Language - DDL), cho phép tạo các cấu trúc dữ liệu lưu trữ. Ngôn ngữ thao tác dữ liệu (Data Manipulation Language - DML), cho phép cập nhật (thêm, xóa, sửa) dữ liệu. Ngôn ngữ truy vấn dữ liệu (Strutured Query Language – SQL). Ngôn ngữ kiểm soát dữ liệu (Data Control Language – DCL)

6 3. Công cụ quản trị CSDL Microsoft Access. (tiếp theo) 3. Công cụ quản trị CSDL Microsoft Access. Microsoft Access là một công cụ quản trị CSDL, cho phép xây dựng các ứng dụng CSDL theo mô hình dữ liệu quan hệ trên một môi trường gọn nhẹ, đơn giản, dễ thao tác, nhưng vẫn đảm bảo được các tính chất quan trọng đã nêu của một hệ quản trị CSDL. Mỗi ứng dụng CSDL trên môi trường Access là một file trên đĩa từ có phần mở rộng mặc định là .mdb, gồm 6 đối tượng: các bảng (Tables  Relation – quan hệ theo lý thuyết CSDL quan hệ), Các câu truy vấn (Queries), Các giao diện nhập liệu (Forms), Các báo cáo (Reports), Các lệnh vĩ mô (Macros) và các Modules chương trình. Mỗi đối tượng đều có các chức năng: New – Tạo đối tượng mới, Design – Sửa lại đối tượng đã có, và Open – Mở (hoặc thực hiện) đối tượng đã chọn.

7 §1.2. Mô hình dữ liệu quan hệ Thuộc tính (Attribute):Thuộc tính là một tính chất của đối tượng cần được phản ảnh trong CSDL phục vụ cho việc khai thác thông tin về sau này. Ví dụ: Về con người, các đặc tính sau đây cần được lưu trữ: Họ tên, Giới tính, Ngày sinh… Thuộc tính được đặc trưng bởi: a. Tên gọi: Tên của thuộc tính là một dãy ký tự bất kỳ bắt đầu bằng ký tự khác khoảng trắng (space). Tuy nhiên, nên đặt tên thuộc tính bằng chữ cái Latin, và đặt tên một cách gợi nhớ. Nếu tên có chứa các ký tự đặc biệt thì khi sử dụng phải đặt nó trong cặp dấu ngoặc vuông [ ]. Ví duï: HoTen, GioiTinh, NgaySinh, +++, ---, ***, /// Tuy nhiên, 4 tên gọi sau, khi sử dụng phải đặt trong ngoặc vuông: [+++], [---], [***], [///]

8 (tiếp theo) b. Kiểu giá trị:Mỗi công cụ quản trị CSDL có các kiểu dữ liệu khác nhau. Tuy nhiên đều có chung các kiểu dữ liệu cơ bản sau: - Ký tự: (Text, String, Char, ..) - Kiểu số: (Number, Decimal, Float, …) Kiểu ngày tháng: (Date/Time) phải có đầy đủ cả ngày, tháng và năm. Kiểu luận lý: (Logical, Boolean, YesNo, …) Kiểu dữ liệu đa phương tiện: (OLE) bao gồm hình ảnh (Bitmap), âm thanh (Audio) hoặc/và phim (Movie) c. Miền giá trị: Miền giá trị (Domain) đảm bảo tính đúng đắn của dữ liệu. Bởi nếu mới chỉ xác định có kiểu dữ liệu, ví dụ, thuộc tính chiều cao CCVC là số nguyên, thì có thể nhập giá trị 50cm! Điều này là không thể chấp nhận được.

9 (tiếp theo) 2. Khóa (Key - Khóa chính, khóa ngoại, khoá lồng)Định nghĩa 1: Là tổ hợp các thuộc tính mà giá trị của chúng xác định duy nhất một bộ giá trị. Theo định nghĩa này, nếu thêm (các) thuộc tính vào một khóa thì tổ hợp mới cũng sẽ là khóa. Định nghĩa này chưa chặt chẽ. Định nghĩa 2: Cho R(U) là quan hệ định nghĩa trên tập thuộc tính U, và K  U. K là khóa của R nếu và chỉ nếu: K xác định duy nhất một bộ giá trị. (thỏa đ/n 1) K là tập con nhỏ nhất. Định nghĩa 3: Một quan hệ có thể có nhiều khóa theo đ/n 2. Các khóa đó được gọi là khóa chỉ định (Candidate Key). Định nghĩa 4: Một khóa chỉ định tiện lợi nhất cho việc sử dụng được chọn làm khóa chính (Primary Key). Quy ước: Khóa chính trong quan hệ (thì) được gạch chân. Không được phép sửa đổi giá trị của thuộc tính khóa chính.

10 (tiếp theo) Định nghĩa 5: R(U), S(V) là 2 quan hệ và K1  U là khóa của R. Xét K2  V. Nếu: K1 và K2 có cùng số lượng và ý nghĩa của các thuộc tính. rTR thì tồn tại từ 0 đến nhiều sTS s/c r.K1=s.K2; ngược lại,  sTS ! rTR sao cho r.K1=s.K2 Khi đó, K2 của S được gọi là khoá ngoại (Foreign Key) khi tham chiếu tới quan hệ R. Định nghĩa 6: R(U), S(V) là các quan hệ, K1  U là khóa của R, K2  V là khóa ngoại khi tham chiếu R, và K3  K2. Nếu K3 là các thuộc tính khóa của S thì K3 được gọi là khóa lồng (Nested Key). 3. Ràng buộc toàn vẹn(Integrity Constraint/Rule) Đó là 1 quy tắc bất biến mà các thao tác trên CSDL phải tuân theo nhằm đảm bảo tính đúng đắn, nhất quán, an toàn và toàn vẹn dữ liệu.

11 CHƯƠNG II. CÁC THAO TÁC VỚI BẢNGNỘI DUNG: §2.1. Tạo lập cấu trúc bảng 1. Các tính chất (Properties) của cột 2. Thao tác tạo cấu trúc bảng. 3. Thiết lập khóa chính cho bảng §2.2. Thiết lập mối liên hệ giữa các bảng §2.3. Tạo bảng từ dữ liệu đã có (Import) §2.4. Sử dụng chung tài nguyên với các CSDL khác §2.5. Trích xuất dữ liệu ra file hoặc bảng ngoài

12 §2.1. Tạo lập cấu trúc bảng . Các tính chất (Properties) của cộtMicrosoft Access có các kiểu dữ liệu sau: Kiểu văn bản với chiều dài cố định (Text). Trong kiểu này phải xác định độ rộng của cột – tính theo byte. Độ rộng tối đa của cột là 255 bytes. Giá trị luôn luôn được điền thêm khoảng trắng ở cuối để cho đủ số lượng đã khai báo. Kiểu số (Number). Có 5 loại kiểu số theo kích thước lưu trữ. Số nguyên 1 byte (Byte) có giá trị từ 0 đến 255. Số nguyên 2 bytes (Integer) có giá trị từ –32768 đến Số nguyên 4 bytes (Long) có giá trị từ khoảng -2,1 tỷ đến +2,1 tỷ. Số thực độc hính xác đơn (Single) chiếm 4 bytes, có giá trị đảm bảo chỉ có 7 chữ số đầu là có nghĩa đúng đắn. Số thực độ chính xác gấp đôi (Double) đảm bảo 15 chữ số có ý nghĩa - đúng.

13 (tiếp theo) Kiểu luận lý Yes/No (hoặc True/False hoặc On/Off). Kiểu văn bản có chiều dài thay đổi (Memo). Giá trị có thể có kích thước tối đa 64K bytes. Kiểu tiền tệ (Currency) với bản chất là kiểu số, nhưng khi hiển thị thì có ký hiệu tiền tệ $ ở phía trước. Kiểu Ngày tháng (DateTime). Giá rị kiểu này phải có đầy đủ cả ngày, tháng và năm. Kiểu đánh số tăng dần một cách tự động (AutoNumber) là số nguyên 4 bytes, tự động tăng 1 mỗi khi một bản ghi mới được bổ sung vào bảng. Kiểu dữ liệu đa phương tiện (Object Linked Embedded - OLE), có thể là một bảng tính Excel, file Word, hình ảnh (Bitmap), âm thanh (Audio) hoặc phim (Movie).

14 (tiếp theo) Ngoài các tính chất cơ bản của cột mà một thuộc tính của quan hệ cần có là Tên (Name), Kiểu giá trị (Type) và Kích thước (Size), cột của bảng cần được đặc tả chi tiết thêm một số tính chất sau: Tiêu đề cột (Caption) – hiển thị khi nhập dạng bảng Quy cách hiển thị (Format) – đó là một dãy các ký tự thể hiện quy cách hiển thị giá trị của field trên màn hình nhập dữ liệu, trong đó: Đối với kiểu số: Standard – có dấu tách hàng ngàn, hàng triệu. Các giá trị bằng tiền hay các số lớn thì nên chọn dạng format này. Số 0 để hiện số 0 vô nghĩa. Đối với kiểu văn bản: dấu “>” để hiện chữ in hoa; “<“ để hiện chữ nhỏ. Với ngày tháng: ShortDate, Medium và LongDate…

15 (tiếp theo) - Với kiểu lôgic: hiển thị bằng chữ (text) YesNo, TrueFalse, OnOff hay bằng Check box . Quy cách nhập dữ liệu (Input Mask): Là một dãy ký tự có ý nghĩa như sau: 0 - Tại vị trí đó phải nhập một chữ số (bắt buộc). 9 - Nhập 1 chữ số (không bắt buộc). # - 1 chữ số (hoặc dấu +/-) bất kỳ (không bắt buộc). ? - Một chữ cái bất kỳ (không bắt buộc) a - Nhập 1 chữ cái/chữ số bất kỳ (không bắt buộc) A - Nhập 1 chữ cái/chữ số (bắt buộc). > - Đổi các chữ cái sau thành chữ in hoa. < - Đổi các chữ cái sau thành chữ nhỏ. & - Một ký tự bất kỳ, bắt buộc nhập C - Một ký tự bất kỳ, không bắt buộc nhập.

16 (tiếp theo) Giá trị mặc định (Default Value)Quy tắc kiểm tra tính đúng đắn của dữ liệu nhập (Validation Rule  RBTV về miền giá trị). Quy tắc có dạng: OR | AND Ở đây là một trong các phép so sánh sau đây: >, >=, <, <=, <>, IN, Between, Like. Thông báo lỗi khi RBTV bị vi phạm (Validation Text) Dữ liệu có bắt buộc phải được nhập không? (Required) Allow Zero Length: Cho phép chuỗi có chiều dài bằng 0. Cần được lập chỉ mục không (Indexed). Có 3 lựa chọn: No – Không lập chỉ mục (mặc định) Yes, No duplicates – lập chỉ mục nhưng không chứa gtrị lặp Yes, Duplicates OK - lập chỉ mục cho cả giá trị lặp.

17 . Thao tác tạo cấu trúc bảng. Thao tác: (tiếp theo) . Thao tác tạo cấu trúc bảng. Thao tác: B0) Khởi động Microsoft Access (nếu chưa làm) B1) Nếu chưa có CSDL thì tạo mới: - Nếu mới khởi động MSA thì chọn Blank Microsoft Database  OK. Nếu đang trong MSA thì vào menu File chọn New  OK. Chọn thư mục lư trữ file CSDL tại mục Save In. Đặt tên file CSDL tại mục File Name. Tên file CSDL mặc định là DB1, DB2, … Không cần đặt phần mở rộng cho file CSDL. Hãy sử dụng mặc định cho file CSDL là .mdb. Màn hình tạo mới CSDL xuất hiện như trong hình sau: Nếu đã có CSDL thì mở CSDL bởi mục \File\Open

18 (tiếp theo)

19 (tiếp theo) B2) Chọn đối tượng Tables (nếu chưa làm)B3) Chọn chức năng New (table). Có 5 khả năng tạo mới một bảng của CSDL: 1. Datasheet View : Có bảng để nhập dữ liệu luôn. 2. Design View: Tự thiết kế cấu trúc của bảng. 3. Table wizard: Tạo bảng từ các cấu trúc mẫu đã có sẵn. 4. Import Table: Tạo bảng từ dữ liệu cho sẵn. 5. Link Table: Tạo mối liên kết dữ liệu để dùng chung tài nguyên với các hệ CSDL khác. B4) Lần lượt đặc tả chi tiết các cột của bảng (như hình sau). B5) Thiết lập khóa chính cho bảng bằng cách: - Nhấn + giữ phím Shift rồi bấm trỏ chuột vào thuộc tính khóa. - Bấm trỏ chuột vào nút chức năng có hình chìa khóa ở trên. B6) Đóng cửa sổ thiết kế và đặt tên cho bảng, rồi chọn OK

20 Màn hình đặc tả cấu trúc bảng (tiếp theo)Tên cột Chỉ dẫn (ToolsTips) ở dưới đáy màn hình mỗi khi con trỏ được đặt vào cột này

21 §2.2. Thiết lập mối liên hệ giữa các bảngThao tác: B0), B1) (nếu chưa làm) B2) Vào Menu Tools, chọn chức năng Relationships. Màn hình xuất hiện như hình dưới đây:

22 (Tiếp theo) B3) Chọn các bảng cần đưa vào Relationships bởi nút Add. Kết thúc chọn bởi nút Close. Màn hình như hình dưới đây:

23 (Tiếp theo) B4) Kéo-Thả (Drag-drop) thuộc tính khóa chính vào thuộc tính khóa ngoại của bảng liên quan, rồi điều chỉnh mối quan hệ tương ứng giữa các thuộc tính khoá chính và khoá ngoại, như hình dưới đây:

24 (Tiếp theo) Chọn kiểu liên kết thông qua tuỳ chọn (Join type). Ba loại liên kết tương ứng với 3 phép toán đại số quan hệ: Inner Join, Left Join, Right Join. Mặc định là Inner Join. Bắt buộc kiểm tra ràng buộc toàn vẹn về khoá ngoại nếu đánh dấu vào mục  Enforce Referential Integrity. Hai mục sau có thể được chọn:  Cascade Update Related Fields: Tự động cập nhật khóa ngoại Cascade Delete Related Records: Tự động xóa lan truyền. Chọn nút Create để tạo lập. Cancel để hủy bỏ. B5) Đóng cửa sổ thiết kế và lưu lại các mối liên kết mới tạo. ** Lưu ý: Giữa 2 bảng chỉ thể hiện một mối liên hệ. Để thể hiện (các) mối liên hệ khác thì cần bổ sung lôgíc một trong 2 bảng đó vào lược đồ (Relationships). Tên của các bảng lôgíc này được ghép thêm số _1, _2… ở phía sau.

25 §2.3. Tạo bảng từ dữ liệu đã có (Import)Nguồn dữ liệu để Import có thể là các Tables, Queries, Forms, Reports, Macros, Modules của file CSDL Microsoft Access, hoặc file Dbase, Foxpro, Excel, Text hoặc các bảng trong các CSDL được kết nối mở (Open DataBase Connectivity). Thao tác: B0), B1), B2) (nếu chưa làm) B3) Chọn chức năng New\Import Table Chọn loại dữ liệu nguồn tại mục Files of Type Xác định thư mục chứa các file dữ liệu thuộc loại trên tại mục Look In. Xác định tên file (hoặc CSDL) dữ liệu nguồn tại mục: File Name. Chọn chức năng Import. Màn hình chọn file dữ liệu nguồn như trong hình cho trong trang sau. (*) Nếu nguồn dữ liệu là file CSDL của Access thì chỉ cần chọn các Tables, Queries, Forms, Reports,Macros hay Modules rồi OK. Nếu là bảng hoặc file CSDL thì đánh dấu chọn rồi OK để hoàn tất.

26 (Tiếp theo) Màn hình chọn dữ liệu nguồn để tạo bảng trong Microsoft Access.

27 (Tiếp theo) Nếu nguồn dữ liệu là file CSDL Microsoft Access thì màn hình chọn đối tượng để Import có dạng:

28 B4)(Tiếptheo) (*) Nếu nguồn dữ liệu là file văn bản (*.txt, *.cvs, *.tab hoặc *.asc) thì cần xác định quy cách lưu trữ của file là “Delimited” – Có ký tự làm dấu tách giữa các giá trị; hoặc “Fixed width” – nếu cột có độ rộng cố định.

29 B5) (Tiếp theo) (*) Nếu nguồn dữ liệu là file văn bản (*.txt) hoặc Excel (*.xsl) thì cần chỉ rõ dòng đầu tiên có phải là dòng tiêu đề cột hay không? ( First Row Contains Field Names). Nếu là file *.txt thì cần xác định loại ký tự là dấu tách cột: (dấu Tabs, chấm phảy – Semicolon, dấu phảy – Commas…)

30 B6) (Tiếptheo) Cách lưu trữ dữ liệu mới: In a New Table- Tạo bảng mới, hoặc In an Existing Table- Bổ sung dữ liệu vào bảng đã có.

31 B7) (Tiếp theo) Sửa lại tên, kiểu giá trị và xác định các cột không cần giữ lại trong bảng đích: Do not Import Field – bỏ qua.

32 B8) (Tiếp theo) Để Microsoft tự bổ sung thêm cột có tên là ID với kiểu giá trị là AutoNumber - tự động tăng 1 làm thuộc tính khóa chính (Let Access Add Primary Key), hoặc xác định một cột làm khoá chính (Choose My Own Primary Key) hoặc không chọn thuộc tính nào làm khóa (No Primary Key)

33 Đặt lại tên cho bảng, rồi nhấn Finish để kết thúc.B9) (Tiếp theo) Đặt lại tên cho bảng, rồi nhấn Finish để kết thúc.

34 (Tiếp theo) (*) Ghi chú: Khi Import từ file *.txt hoặc *.xls, để đảm bảo việc chuyển đổi bảng mã tiếng Việt đúng đắn, cần chọn trang mã (Code Page) là Western European (Windows), thông qua nút chức năng bổ sung (Advanced).

35 (Tiếp theo) Nếu việc Import thành công thì MSA sẽ có thông báo hoàn tất. Nếu việc Import không thành công thì có thông báo lỗi, và các dòng không Import được sẽ được lưu trong 1 bảng có tên với phần bổ sung là _ImportError. Lỗi sai thường gặp nhất là sai cách chuyển đổi dữ liệu sang dạng DateTime. MSA sử dụng cách biểu diễn ngày tháng của hệ điều hành Windows, do đó, nếu Windows dùng dạng mm/dd/yyyy và dữ liệu Import có dạng dd/mm/yyyy (ví dụï 25/01/2001) thì quá trình Import sẽ gây lỗi. MSA thực hiện việc chuyển đổi dữ liệu khi Import từ file văn bản như sau: Dãy chữ  Text(255). Số nguyên  Long Integer. Số thực  Double. xx/yy/zz  DateTime. Do đó, sau khi Import xong (thì) cần phải thực hiện chức năng Design để đặc tả lại cấu trúc của bảng.

36 §2.4. Sử dụng chung tài nguyên với CSDL khácNguồn dữ liệu để dùng chung (Link) phải là các dữ liệu có cấu trúc. Đó phải là (các) file hoặc bảng của (các) CSDL khác. Nguồn này có thể là từ Access, Dbase, Foxpro hoặc ODBC. File Excel không phải là một nguồn thích hợp cho việc dùng chung trong môi trường Access Thao tác: B0), B1),B2) (Nếu chưa làm) B3) Chọn New\Link Table B4) Chọn các bảng dữ liệu để dùng chung OK để hòan tất. PLACEHOLDER

37 §2.5 Trích xuất dữ liệu ra file hoặc bảng ngoàiThao tác: B0), B1, B2) ( nếu chưa làm) B3) Chọn bảng cần trích xuất B4) Nhắp chuột phải, chọn Export (hoặc =\File\Export) B4) Xác định lọai đích tại mục Files of Type; Thư mục lưu trữ tại Save In, và tên file tại File Name.  SAVE để trích dữ liệu (như trong hình kế sau): Nếu lọai dữ liệu đích là một bảng của file CSDL Access thì cho biết tên bảng đích và đồng thời xác định cách sao chép:  Dữ liệu và cấu trúc (Definition and Data): dũ liệu cùng cấu trúc bảng  Hoặc chỉ sao chép cấu trúc: (Definition Only).  OK để hòan tất. (Hình trang sau:)

38 Export Data (Tiếp theo)Chọn bảng. Nhắp chuột phải, chọn chức năng Export, (hoặc \file\Export), màn hình xuất hiện như sau:

39 Export Data (Tiếp theo)Chọn mục Export), màn hình xuất hiện như sau:

40 Export Data (Tiếp theo)Chọn mục Export), màn hình xuất hiện như sau:

41 (Tiếp theo) - Nếu Export trích ra bảng tính Excel thì chọn

42 (Tiếp theo) Nếu Export trích ra bảng của một file văn bản thì :chọn lọai dữ liệu nguồn là “Text file” tại mục “Save of Type” Next -> B5 , Chọn cách lưu trữ file Text là Delimited

43 CHƯƠNG III. TRUY VẤN CSDL (Queries)NỘI DUNG: §3.1. Truy vấn để tìm kiếm thông tin 1. Câu lệnh truy vấn đơn 2. Câu hỏi có câu hỏi con (SubQuery) §3.2. Truy vấn để sửa đổi dữ liệu (Update) §3.3. Truy vấn tổng hợp dữ liệu (Cross-Tab) §3.4. Các lệnh truy vấn khác 1. Tạo/sửa cấu trúc bảng 2. Thiết lập ràng buộc toàn vẹn

44 §3.1. Truy vấn để tìm kiếm thông tinCó 2 cách tạo 1 Query trong MSA: Câu lệnh SQL hoặc bằng công cụ Wizard kéo-thả (Drag-Drop) trên lưới (Grid). Có thể chuyển đổi qua lại giữa 2 cách này. Cú pháp câu lệnh truy vấn (đã học): SELECT [DISTINCT] [TOP n [PERCENT]] [AS ], [AS ],… FROM [[AS]],[[AS]], … [WHERE <điều kiện chọn bản ghi để xử lý>] [GROUP BY , … ] [HAVING <điều kiện chọn kết quả cuối cùng>] [ORDER BY [ASC/DESC], … ]; Dấu chấm phảy cuối câu là tùy chọn. Chữ hoa hay chữ thường là như nhau.

45 (*) DISTINCT : Chỉ giữ lại những dòng khác nhau. (Tiếp theo) (*) DISTINCT : Chỉ giữ lại những dòng khác nhau. (*) Cụm từ TOP n [PERCENT] luôn luôn phải được đi kèm với mệnh đề ORDER BY. - TOP n : n dòng đầu tiên và những dòng có giá trị sắp xếp như dòng thứ n. - TOP n PERCENT : n% (lấy cận trên) số dòng kết quả tìm được. Ví dụ, nếu n% = 1.2 thì lấy cận trên bằng 2. (*) (i=1..n) có thể là tên bảng dữ liệu vật lý, Query hoặc phép kết 2 quan hệ theo cú pháp: ON <điều kiện kết> ::= INNER JOIN / LEFT JOIN / RIGHT JOIN / OUTER JOIN. (*) Nếu sau FROM là danh sách các bảng thì phải thể hiện mối liên hệ giữa các bảng đó trong mệnh đề WHERE.

46 (Tiếp theo) (*) Ngoại trừ các biểu thức có chứa các hàm tích hợp các biểu thức còn lại sau SELECT đều phải có mặt trong mệnh đề GROUP BY.

47 (Tiếp theo) Thao tác: B0), B1) (nếu chưa làm) B2) Chọn đối tượng Queries (nếu chưa làm) B3) Xác định nguồn dữ liệu cho Query (bảng hoặc query) bằng nút Add, và kết thúc bằng nút Close B4) Lần lượt kéo-thả các Field từ các bảng vào lưới (GRID) Thi hành câu lệnh bởi nút có hình dấu chấm than ! (Run) Chuyển đổi sang câu lệnh SQL thông qua nút Design ở góc trái trên của của sổ thiết kế Query.

48 (Tiếp theo) 2. Câu hỏi có câu hỏi con (SubQuery) Định nghĩa: Câu hỏi con là một câu hỏi mà kết quả của nó được dùng làm toán hạng của một phép so sánh trong biểu thức điều kiện của câu hỏi khác. Câu hỏi con phải được đặt trong cặp dấu ngoặc tròn. (*) MSA chỉ cho phép 1 biểu thức sau SELECT trong câu truy vấn con. Do đó, nếu có nhiều biểu thức thì phải ghép chúng lại thành một thông qua phép nối ghép &. (*) Các ví dụ minh họa: Câu 1: Cho tên và danh sách nhân viên của từng phòng/ban SELECT DeptName, E.* FROM Department D, Employee E WHERE D.Deptno=E.Deptno;

49 (Tiếp theo) Câu 2: “Cho tên phòng và d.sách nhân viên có lương hơn 4000” SELECT DeptName, E.* FROM Department D, Employee E WHERE D.Deptno=E.Deptno AND Salary > 4000; Câu 3: “Cho biết người có lương cao nhất trong công ty” SELECT * FROM Employee WHERE Salary = (SELECT MAX(Salary) FROM Employee); Câu 4: “Cho biết tên phòng của người lương cao nhất công ty”. SELECT DeptName FROM Department WHERE Deptno IN (SELECT * FROM Employee WHERE Salary=(SELECT MAX(Salary) FROM Employee)); Câu 5: “Cho tên phòng có lương trung bình lớn hơn lương trung bình của các nhân viên trong phòng Smith”.

50 Tìm mã phòng của Smith (x) (Tiếp theo) Tìm mã phòng của Smith (x) Tìm lương trung bình của các NV có mã phòng=(x) (y) Tính lương trung bình của các phòng, kết quả chỉ giữ lại những phòng nào có lương trung bình lớn hơn (y). SELECT DeptName FROM Department D, Employee E WHERE D.Deptno=E.Deptno GROUP BY D.Deptno, DeptName HAVING AVG(Salary) > ( SELECT AVG(Salary) FROM Employee WHERE Deptno= ( SELECT Deptno FROM Employee WHERE Name=‘Smith’ ) );

51 §3.2. Truy vấn để sửa đổi dữ liệu1. Query tạo bảng (Make Table Query) SELECT [DISTINCT] [TOP n [PERCENT]] [AS ], [AS ],… INTO FROM [[AS]],[[AS]], … [WHERE <điều kiện chọn bản ghi để xử lý>] [GROUP BY , … ] [HAVING <điều kiện chọn kết quả cuối cùng>] [ORDER BY [ASC/DESC], … ]; Ví dụ: Tạo bảng Manager chứa danh sách các lãnh đạo phòng SELECT * INTO Manager FROM Employee WHERE Job=“Mngr”; 2. Query bổ sung thêm dữ liệu. a. Thêm một bản ghi từ dữ liệu đã cho:

52 INSERT INTO [()] (Tiếp theo) INSERT INTO [()] VALUES(); Ví dụ: “Thêm NV mới tên là “Tony” MÃ SỐ 300 vào phòng số 40, làm nhân viên bán hàng với mức lương là 2,500$” INSERT INTO Employee VALUES (300, “Tony”, “Slsm”, 2500, NULL, 40, “M”); Hoặc: INSERT INTO Employee (Name, Empno, Job, Salary, Deptno) VALUES (“Tony”, 300, “Slsm”, 2500, 40); b. Bổ sung dữ liệu từ CSDL. ;

53 (Tiếp theo) Ví dụ: “Thêm vào bảng Manager các nhân viên có lương >4000” INSERT INTO Manager SELECT * FROM Employee WHERE Salary>4000 AND Empno NOT IN (SELECT Empno FROM Manager); 3. Query sửa dữ liệu: UPDATE SET = , =, … [WHERE <điều kiện cập nhật>]; Ví dụ: a. Tăng lương 10% cho các nhân viên phụ trách phòng. UPDATE Employee SET Salary= Salary*1.1 WHERE Job=‘Mngr’; b. Tiền lương tối thiểu phải bằng mức thấp nhất của công việc. UPDATE Employee e INNER JOJN Jobs v ON v.Job=e.Job SET Salary= IIF(Salary < Minsalry, MinSalry, Salary);

54 (Tiếp theo) 4. Query xóa dữ liệu: DELETE [] FROM [WHERE <điều kiện xóa>]; (*) Nếu nguồn là query hoặc phép kết thì phải có thành phần để cho biết xóa bộ giá trị của bảng nào. Ví dụ: a. “Xóa các nhân viên phụ trách các phòng ban” DELETE FROM Employee WHERE Job=‘Mngr’; b. “Xóa các nhân viên có lương nhỏ hơn lương tối thiểu của c/v” DELETE e.* FROM Jobs v INNER JOIN Employee e ON (e.job=v.Job) WHERE Salary < Minsalry;

55 §3.3. Truy vấn tổng hợp dữ liệu (Cross-Tab)Cú pháp: TRANSFORM SELECT FROM [WHERE <điều kiện chọn bản ghi để xử lý>] GROUP BY PIVOT [IN ()] Diễn giải: … Ví dụ: “Cho tên, tổng số n/v chia theo giới tính của các phòng” Transform Count(*) Select Deptname, Count(*) as Total From Department d Inner Join Employee on d.deptno=e.deptno Group By DeptName Pivot Sex IN (‘F’, ‘M’)

56 (Tiếp theo)

57 §3.4. Các câu lệnh truy vấn khác1. Tạo cấu trúc bảng: Create Table ( , , …, , [Constraint Primary Key ()] [Constraint Foreign Key () References ()] ); Một mô tả cột có dạng: [()] [Not NULL] [Primary Key][Foreign Key References ()] Ví dụ: a.Create Table ABC (aaa text(10) Primary Key, bbb long, ccc DateTime, ddd Memo, eee Double);

58 (Tiếp theo) b. Create Table BBC (aaa text(10), bbb long, Constraint PK Primary Key (aaa,bbb), Constraint FK Foreign Key (aaa) References ABC (aaa)); 2. Sửa đổi cấu trúc bảng - Thiết lập khóa chính, RBTV: Alter Table [Add Column <đặc tả cột>], [Add Constraint Primary Key ()], [Add Constraint Foreign Key () References ()]; Ví dụ: Alter Table BBC Add Column ccc DateTime;

59 (Tiếp theo) 3. Tạo chỉ mục:CREATE [UNIQUE] INDEX ON (); Ví dụ: 4. Các câu lệnh hủy bỏ: Hủy (xóa) bỏ bảng: DROP Table ; Hủy bỏ chỉ mục: DROP INDEX ON ; Hủy bỏ RBTV: DROP Constraint ON ;

60 CHƯƠNG IV. THIẾT KẾ GIAO DIỆN (Forms)NỘI DUNG: §4.1. Một số khái niệm – Cấu trúc tổng quát 1. Cấu trúc tổng quát của một Form 2. Các loại Form trong Microsoft Access §4.2. Tạo Form bằng công cụ hỗ trợ (Wizard) 1. Tạo Form nhanh dạng Columnar, DataSheet 2. Tạo Form có SubForm §4.3. Các thao tác sửa Form – Các hàm tích hợp §4.4. Tự thiết kế Form (Form Design)

61 §4.1. Một số khái niệm – Cấu trúc tổng quátCấu trúc tổng quát của một Form Một Form có thể có 5 phần:-Tiêu đề mẫu nhập (Form Header), phần này chỉ xuất hiện một lần đầu tiên trên trang đầu tiên.

62 (Tiếp theo) - Phần tiêu đề trang (Page Header) sẽ xuất hiện giống nhau ở mỗi trang của Form nhập dữ liệu. - Phần chi tiết (Detail) để trình bày nội dung một bản ghi. Phần cuối trang (Page Footer) sẽ xuất hiện giống nhau ở mỗi trang của Form nhập dữ liệu. Nó thường được dùng làm phần hướng dẫn sử dụng giao diện, các nút chức năng tiện ích. Phần cuối Form (Form Footer) chỉ xuất hiện ở trang cuối cùng của một Form có nhiều trang. Thông thường, một Form chỉ có một trang nên các phần Form Header và Form Footer ít được sử dụng, hoặc dùng thay cho tiêu đề trang. Các thành phần nằm trên các phần của Form được gọi chung là các đối tượng (Objects).

63 (Tiếp theo) Cửa sổ chứa Form có thêm các thành phần khác (còn gọi là tính chất của Form: Tiêu đề cửa sổ Form (Caption); Các nút điều khiển cửa sổ (Control Box: Min, Max, Close); Các thanh cuốn Form theo chiều ngang và chiều dọc (Horizontal and Vertical Scroll Bar); Thanh chọn bản ghi hiện hành (Record Selector); Nguồn dữ liệu của Form (Record Source); Các nút di chuyển bản ghi (Navigation Buttons). 2. Các loại Form trong Microsoft Access MSA có các loại Form sau: Dạng bảng (DataSheet) Các thông tin của 1 bản ghi hiển thị trên một hay nhiều dòng khác nhau (Columnar). Form nhập với các Form con (Form with SubForm)

64 (Tiếp theo) Với Form nhập dạng columnar có thể hiển thị dạng đơn (Single) hoặc nhiều Form như thế xếp liên tiếp nhau trên màn hình (Continuous). Dạng Single Form  Dạng Continuous Form 

65 (Tiếp theo) Các đặc tính sau đây của Form là rất quan trọng:Default View: Scroll Bars: Record Selector: Navigation Button: Dividing Line: Auto Center: Auto Resize: Min, Max buttons: Close Button: Record Source: On Form Load: On Form Activate:

66 §4.2. Tạo Form bằng công cụ hỗ trợ (Wizard)MSA có công cụ hỗ trợ để hướng dẫn từng bước trong việc tạo một Form nhanh chóng, gọi là Wizard. 1. Tạo Form nhanh dạng Columnar, DataSheet, Tabular Thao tác: B0), B1) (nếu chưa làm) B2) Chọn đối tượng Forms (nếu chưa làm). B3) - Chọn New\AutoForm (Datasheet hoặc Tabular hoặc Columnar) - Xác định nguồn dữ liệu cho Form tại Combo Box. - Nhấn OK để hoàn tất. Tên Form là tên bảng / query dữ liệu nguồn.

67 2. Tạo Form có SubForm Thao tác: B0), B1), B2) (nếu chưa làm) B3) New\Form Wizard B4) Lần lượt chọn các field từ các bảng cần hiển thị / nhập B5) Chọn nguồn dữ liệu chính, dữ liệu tham khảo. B6) Chọn cách hiển thị Form con B7) Chọn phong cách (Style) cho Form: (nên chọn Standard) B8) Đặt tên cho Form và SubForm B9) Finish để kết thúc (Next: đi tiếp bước sau. Back: quay lại bước trước). Ví dụ: Tạo Form nhập dữ liệu cho bài tóan quản lý vũ khí như trong bài tập đã cho)

68 §4.3. Các thao tác sửa Form – Các hàm tích hợpXác định kích thước Form Chọn (các) đối tượng Thay đổi thuộc tính (Font, size, style, color, effect...) Di chuyển các đối tượng đã chọn. Thay đổi kích thước. Gióng thẳng hàng: \Format\Align\(left, right, top, bottom)… Chia đều khoảng cách (hàng ngang / cột dọc). Bổ sung thêm đối tượng mới (Tools Box) Các hàm tích hợp Dxxx (, , ) (Các hàm DLookUp , DSum, DCount, DMin, DMax, DAvg….) : là biểu thức cần tính. : là nguồn dữ liệu (bảng/query/join) : là điều kiện chọn bản ghi để xử lý .

69 §4.4. Tự thiết kế Form (Form Design) Thao tác:B0), B1), B2) (nếu chưa làm) B3) New \ Design View. OK B4) Xác định kích thước Form (chiều cao và chiều rộng) B5) Xác định nguồn dữ liệu cho Form tại Record Source. B6) Lần lượt kéo-thả các field vào các vị trí thích hợp của Form. B7) Bổ sung các đối tượng khác vào Form B9) Đặt các thuộc tính cần thiết cho Form và các đối tượng khác trên Form. Trình bày Form sao cho cân đối. B10) Đóng cửa sổ thiết kế và đặt tên cho Form. * Nên tạo query để lấy dữ liệu nguồn cho Form)

70 CHƯƠNG V. THIẾT KẾ MẪU BÁO CÁO (Reports)NỘI DUNG: §5.1. Một số khái niệm 1. Cấu trúc tổng quát của 1 báo cáo (Report) 2. Các loại báo cáo trong Microsoft Access §5.2. Tạo Report bằng công cụ hỗ trợ (Wizard) 1. Tạo Report nhanh (Auto Report) 2. Tạo Report có dòng tổng nhóm (SubTotals) 3. Tạo Report dạng phiếu (Label) 4. Tạo Report dạng biểu đồ (Chart) §5.3. Tự thiết kế Report (Report Design)

71 §5.1. Một số khái niệm Cấu trúc tổng quát của 1 báo cáo (Report)Tương tự như Form, 1 báo cáo cũng có thể có 5 phần: - Report Header: tiêu đề báo cáo, nó chỉ được in trên trang đầu tiên của báo cáo; - Page Header: tiêu đề trang báo cáo được in giống nhau trên mỗi trang in. Thông thường là các tiêu đề cột – hoặc dòng chứa số thứ tự cột của biểu; - Details: Phần để in nội dung của mỗi bản ghi dữ liệu nguồn; - Page Footer: Phần cuối trang báo cáo. Thông thường dùng để in các chú thích trong trang cũng như đánh số thứ tự trang in. - Report Footer: Tiêu đề cuối báo cáo. Thông thường dùng để in các thông tin xác nhận trách nhiệm và sở hữu số liệu của đơn vị như: ngày lập báo cáo, người lập báo cáo, người duyệt báo cáo (ký và ghi họ tên), và thủ trưởng đơn vị ký tên, đóng dấu.

72 (Tiếp theo) 2. Các loại báo cáo trong Microsoft Access. Báo cáo dạng bảng Datasheet, mỗi bản ghi in trên 1 dòng. Báo cáo dạng cột Columnar. Mỗi field in trên 1 dòng. Hai dạng này phục vụ cho các báo cáo nhanh tức thời, cần thông tin và số liệu hơn mặt pháp quy. Báo cáo dạng tổng hợp có thể có các dòng tổng con. Đây là dạng thông dụng nhất trong các cơ quan, đơn vị. Báo cáo dạng phiếu (Label). Mỗi bản ghi dữ liệu nguồn được in trên một phần của trang giấy in. Báo cáo dạng biểu đồ (Chart) để phản ánh sự biến thiên của một dãy số (dạng line), hoặc mang tính so sánh (Column / Bar) hay tỷ trọng của một đại lượng trong tổng thể (Pie), ...

73 §5.2. Tạo Report bằng công cụ hỗ trợ(Wizard)1. Tạo Report nhanh (Auto Report) Thao tác: B0), B1) (nếu chưa làm) B2) Chọn đối tượng Report (nếu chưa làm) B3) - New \ AutoReport: Tabular/Columnar - Xác định bảng dữ liệu nguồn cho báo cáo. - Nhấn OK để hoàn tất B4) Đóng cửa sổ kết quả và đặt tên lại cho báo cáo Tên mặc định của báo cáo là tên bảng dữ liệu nguồn. 2. Tạo Report có dòng tổng nhóm (SubTotals) B0), B1), B2) (nếu chưa làm) B3) New \ Report wizard. OK để đi tới bước tiếp theo B4) Lần lượt chọn các fields từ các bảng cần in trên Report. B5) Xác định bảng dữ liệu nào là chính.

74 (Tiếp theo) B6) Bổ sung các cách phân nhóm các bản ghi. Nếu có nhóm thì có thể nhấn Grouping Options để thiết lập cách phân nhóm (Grouping Intervals). Nếu cột phân nhóm có kiểu văn bản thì có thể nhóm theo 1, 2, hay nhiều ký tự đầu tiên; nếu có kiểu số thì có thể nhóm theo 1, 5, 10, 50, 100,... hoặc kiểu DateTime thì nhóm theo tuần, tháng, quý, năm, v.v... B7) Xác định việc sắp xếp thứ tự in theo cột nào.

75 (Tiếp theo) B8) - Chọn hình thức in báo cáo (Report Layout). Có thể chọn Layout là Stepped (mỗi cấp phân nhóm thì lùi vào phía phải). - Chọn hướng in (Orientation) là Portrait hoặc LandScape. B9) Chọn kiểu in các chữ và nhóm trong báo cáo (Formal) B10) Đặt tên cho Report, đồng thời là tiêu đề báo cáo. Finish để kết thúc. Ví dụ: Bài toán quản lý vũ khí, Công nợ, Kế toán, Thương binh 3. Tạo Report dạng phiếu (Label) Thao tác: B0), B1), B2) (nếu chưa làm) B3) - New \ Label Wizard. - Xác định nguồn dữ liệu - OK để đi tiếp bước sau. B4) Xác định kích thước Label từ một số mẫu có saün.

76 (Tiếp theo) Nếu muốn tạo kích thước mẫu mới thông qua chức năng Customize \ Edit\. Và thiết lập các thông số lề trái, phải, trên, dưới, khoảng cách so với các Label lân cận, ... B5)Xác định Font, kích thước và kiểu chữ trong Label. B6) Xác định các field có saün cần in trên Label. B7) Xác định thứ tự in các bản ghi (Sort Order...) B8) Đặt tên cho Label vàFinish để kết thúc. 4. Tạo Report dạng biểu đồ (Chart) Thao tác: B0), B1), B2) (nếu chưa làm) B3) - New \ Chart Wizard. - Xác định nguồn dữ liệu - OK để đi tiếp bước sau.

77 (Tiếp theo) B4) Xác định các field chứa dữ liệu để vẽ biểu đồ.B5) Xác định loại biểu đồ (Line, Bar, Pie, Area) B6) Xác định giá trị trục x, y bằng cách kéo-thả vào Chart B7) Đặt tên cho biểu đồ và Finish để hoàn tất.

78 §5.3. Tự thiết kế Report (Report Design)Thao tác: B0), B1), B2) (nếu chưa làm) B3) New \ Design View. B4) Xác định khổ giấy (Paper size), lề (Margins), hướng in (Orientation) thông qua \File \ Page Setup B5) Xác định nguồn dữ liệu cho Report thông qua thuộc tính Record Source của đối tượng Report. B6) Bổ sung các thành phần phân nhóm để lấy tổng con (Sub Totals) \View \ Sorting and Grouping B7) Lần lượt kéo-thả các thuộc tính cần thiết vào Report B8) Bổ sung các Control cần thiết khác B9) Đặt thuộc tính cho các đối tượng trên Report. Trình bày Report sao cho cân đối. B10) Đóng cửa sổ thiết kế và đặt tên cho Report.

79 CHƯƠNG VI. LỆNH VĨ MÔ (Macros)NỘI DUNG: §6.1. Khái niệm §6.2. Hệ thống Macros của Microsoft 1. Nhóm hành động thao tác với Form/Report 2. Nhóm hành động 3. Nhóm hành động 4. Nhóm hành động §6.3. Một số hành động (Action) thông dụng Ứng dụng trong việc tạo Menu hệ thống

80 CHƯƠNG VII. LẬP TRÌNH VỚI ACCESS BASICNỘI DUNG: §7.1. Khái niệm §7.2. Các kiểu dữ liệu của Microsoft Access 1. Kiểu vô hướng (Scalar) 2. Kiểu mảng (Array) 3. Kiểu dữ liệu tự định nghĩa 4. Kiểu đối tượng truy nhập dữ liệu (D.A.O) §7.3. Hệ thống lệnh các câu lệnh của Access 1. Khai báo biến (Declaration) 2. Rẽ nhánh chương trình (If, Select Case) 3. Các lệnh lặp (For, Do, While) §7.4. Thủ tục và Hàm §7.5. Xây dựng Ứng dụng bằng Access

81 §7. 2. Các kiểu dữ liệu của Microsoft Access1. Kiểu vô hướng (Scalar) 2. Kiểu mảng (Array) 3. Kiểu dữ liệu tự định nghĩa (User-Defined) 4. Kiểu đối tượng truy nhập dữ liệu (D.A.O)

82 §7.3. Hệ thống lệnh các câu lệnh của AccessKhai báo biến (Declaration) Cú pháp: [Global/Private/Dim] [()] [As ], [()] [As ], ... Ngữ nghĩa: Từ khóa Global thể hiện việc khai báo biến là tổng thể, tức là dùng chung được cho toàn ứng dụng Access. Điều dễ hiểu là các biến thuộc loại này phải được khai báo trong các modules. Từ khóa Private /Dim thể hiện việc khai báo biến là cục bộ, tức là chỉ có nghĩa trong phạm vi nó được khai báo, ngoài vùng khai báo biến không còn giá trị. Có thể là cục bộ trong hàm, cục bộ trong module chương trình của một Form/Report, hoặc trong modules các hàm tổng thể.

83 (Tiếp theo) là một định danh (Identifier), là một dãy ký tự chữ cái và/hoặc chữ số, bắt đầu bằng chữ cái. Có thể có thêm 1 ký tự theo sau, thể hiện kiểu dữ liệu: % - số nguyên Integer, $ - chuỗi, ! – số thực single... Nếu không khai báo tường minh kiểu cho biến thì biến có kiểu mặc định là biến thể (Variant). Việc khai báo biến trong Visual Basic, nói chung, là không bắt buộc. Tuy nhiên, nên khai báo biến để dễ kiểm soát chương trình, và tận dụng được khả năng Visual của Basic. Ví dụ: Dim i, j, k As Integer Thì chỉ có k là thuộc kiểu số nguyên 2 bytes, còn i và j đều thuộc kiểu Variant. Tên biến viết hoa hay thường là như nhau

84 (Tiếp theo) 2. Gán giá trị cho biến (Set) Cú pháp:[Set] = Giá trị của biểu thức được tính toán và gán cho . Nếu kiểu giá trị của biểu thức là vô hướng (Scalar) và kiểu của biến cũng là vô hướng thì máy tự chuyển đổi kiểu cho phù hợp với kiểu lưu trữ của biến. Nếu có kiểu đối tượng (Object) thì câu lệnh gán phải có từ khóa Set. Ví dụ: Dim MyDB As DAO.Database, MyTab As DAO.Tabledef Dim nTabs As Integer ‘ Số lượng table trong CSDL. Set MyDB = DBEngine.Workspaces(0).Databases(0) Set MyTab = MyDB.Tabledefs(0) nTabs = MyDB.Tabledefs.Count

85 (Tiếp theo) 3. Lệnh rẽ nhánh chương trình (If, Select Case)a) Lệnh rẽ nhánh (IF). Cú pháp của lệnh được đơn giản hóa như sau: If <điều kiện> Then [Else ] End If (*) Nếu sau Then chỉ có 1 câu lệnh thì có thể viết lệnh trên cùng 1 dòng với Then và không cần End If Ví duï: If n <= 0 Then Exit Function If Delta >= 0 then x1 = (-b + Sqr(Delta)) / (2* a): x2 = (-b - sqr(Delta)) / (2* a) Else : debug.print “Vô nghiệm” End if

86 (Tiếp theo) b) Lệnh chọn 1 trong nhiều khả năng (SELECT CASE).Cú pháp: Select Case () Case Case ... Case [ Case Else < các câu lệnh khác> ] End Select

87 (Tiếp theo) 4. Các lệnh lặp (For, Do, While)a. Lặp hữu hạn từ 0 đến nhiều lần For: For = To [Step n] Next [] Ngữ nghĩa: Nếu không có [Step n] thì mặc định là Step 1. Ban đầu nhận . Chừng nào mà giá trị của còn nhỏ hơn hoặc bằng (với n>0) hay lớn hơn hoặc bằng (với n<0) thì còn được thực hiện; sau mỗi lần thực hiện thì giá trị của sẽ được cộng thêm với gia số n. Ví dụ: Tính giá trị của n giai thừa (n! = n) Dim f As Double, i As Integer f = 1

88 (Tiếp theo) For i = 1 To n f = f * i Next iTrong số các câu lệnh sau For, có thể có các lệnh Exit For để kết thúc bất thường (kết thúc sớm) vòng lặp. b. Lặp vô hạn lần Do: Dạng b1): Do [While / Until <điều kiện>] Loop Hoặc dạng b2): Do Loop [While / Until <điều kiện>]

89 (Tiếp theo) Ngữ nghĩa: Chừng nào <điều kiện> còn thỏa mãn (với từ khóa While) thì còn thực hiện sau Do; hoặc còn thực hiện sau Do cho tới khi (Until) điều kiện được thỏa. Trong dạng b1) điều kiện sẽ được kiểm tra trước khi thực hiện các câu lệnh. Còn trong dạng b2) điều kiện sẽ được kiểm tra sau khi thực hiện xong các câu lệnh. Có thể kết thúc vòng lặp một cách bất thường nhờ câu lệnh Exit Do trong vòng lặp. c. Lặp với số lần không biết trước While. While <điều kiện> Wend

90 (Tiếp theo) Ngữ nghĩa: Chừng nào <điều kiện> sau While còn thỏa thì sau Do còn được thực hiện. Không có lệnh để kết thúc vòng lặp một cách bất thường. d. Lặp với các phần tử trong 1 tập hợp For Each ... Next. For Each In Next Ví duï: Dim MyDB As DAO.Database, MyTab As DAO.Tabledef Set MyDB = CurrentDB For Each MyTab In MyDB.Tabledefs() MsgBox “Tên bảng: “ & MyTab.Name Next MyTab

91 §7.4. Thủ tục và hàm 1. Khai báo / định nghĩa thủ tục (Subroutine)[Private] Sub ([ByVal / ByRef] , [ByVal / ByRef] , ...) [] End Sub (*) Mặc định: các tham đối được truyền theo tên (Call by Name). ByVal – truyền theo tham trị (Call by Value); ByRef – truyền theo tham chiếu (Call By Reference). (*) Các tham đối hình thức của hàm có vai trò như những biến cục bộ. Để kết quả thi hành thủ tục có ảnh hưởng tới tham đối thực khi gọi hàm, thì các tham đối này phải được khai báo với từ khóa ByRef hoặc không có ByVal và ByRef. (*) Nếu tham đối hình thức là 1 mảng thì đặt sau nó cặp dấu ngoặc tròn ( ).

92 (Tiếp theo) 2. Khai báo / định nghĩa hàm (Function)[Private] Function ([ByVal / ByRef] , [ByVal / ByRef] , ...) As [] End Function (*) Trong thân của hàm phải có ít nhất một lần gán giá trị cho tên hàm. Đó chính là giá trị kết quả trả về của hàm. Các ví du: Thủ tục liệt kê tên các bảng có trong CSDL hiện thời (trừ các bảng hệ thống có tên bắt đầu bằng chữ “MSys”) Kiểm tra xem bảng có tên là “TabName” đã có trong CSDL UsrDB hay chưa? Tương tự đối với Query “QryName”

93 (Tiếp theo) Private Sub TenBang ()Dim MyDB As DAO.Database, i As Integer Set MyDB = CurrentDB For i = 0 to MyDB.TableDefs.Count - 1 If Left(MyDB.tableDefs(i).Name, 4) <> “MSys” then MsgBox “Bảng thứ i là: “ & MyDB.TableDefs(i).Name End If Next i End Sub Private Function ExistTable (DB As Database, TName As String) Dim i As Integer For i = 0 to DB.TableDefs.Count-1 if DB.TableDefs(i). Name = TName then Exit For Next i ExistTable = (i < DB.TableDefs.Count) End Function

94 (Tiếp theo) Private Function ExistQuery() As BooleanDim MyDB As DAO.Database, i As Integer Set MyDB = CurrentDB For i = 0 to MyDB.TableDefs.Count - 1 If Left(MyDB.tableDefs(i).Name, 4) <> “MSys” then MsgBox “Bảng thứ i là: “ & MyDB.TableDefs(i).Name End If Next i End Sub Private Function ExistTable (DB As Database, TName As String) Dim i As Integer For i = 0 to DB.TableDefs.Count-1 if DB.TableDefs(i). Name = TName then Exit For Next i ExistTable = (i < DB.TableDefs.Count) End Function