di chuyển một mục từ tập hợp QueryDefts. Bat ky doi tượng QueryDeft nao duge tao ra voi thuéc tinh Name bang véi chuỗi zero- length (chiều dài là số không) là tạm thời. DAO không cố chấp những trường hợp này. Các đối tượng QueryDeft tam thời thì thích hợp khi trình ứng dụng của bạn cần tạo các đối tượng QueryDeft một cách linh động.
Hai phương pháp cho phép ban kích hoạt đối tượng QueryDeft. Phuong phap OpenRecordset tra vé cdc hang trong một đối tượng QueryDeft với câu lệnh SELECT, trong khi phương pháp Execute chạy một query action. Tùy chọn dbFailOnError có thể cho phép trình ứng dụng của bạn xác định đối tượng QueryDeff trục trặc khi thực biện hành động được chỉ định cho tất cả các record đáp ứng đẩy đủ tiêu chuẩn của nó hay không. Miễn là một đối tượng QueryDeƒt có cú pháp đúng, nó không sinh ra lỗi - ngay cả lúc bị thất bại khi thực hiện hành động của nó. Tùy chọn dbFaiOnError phục hồi lại các thay đổi nếu đối tượng QueryDeff không thể thực hiện tất cả sự thay đổi. Tùy chọn này cũng sinh lỗi run-time để giúp bạn thực hiện bất kỳ xử lý kết hợp nào, như việc cung cấp feedbaek (hồi tiếp) đến người dùng.
Tap Hgp Relations
Bạn sử dụng tap hgp Relations và các quan hệ riêng của nó để định rõ các liên kết giữa các bảng bằng chương trình. Phương pháp CreateRelation cho đối tượng Dafœbase có thể định rõ các quan hệ ban đầu; nó cho phép một trình ứng dụng định nghĩa các mối quan hệ một tới một hoặc một tới nhiều giữa bất kỳ cặp quan hệ nào của các bảng dữ liệu. Phương pháp này cũng còn chỉ rõ tính toàn vẹn ám chỉ như việc xóa và cập nhật phân cấp (cascade). (Xem Chương 4 bàn luận sâu hơn về vấn để này). Bạn định nghĩa các quan hệ giữa các bảng dựa vào các field chung trong hai bảng. Đối tượng Relation c6 mot tap hop Fields để hỗ trợ chức năng này. Tập hợp Relations và các đối tượng Relations cá biệt là duy nhất cho không gian làm việc đet. Chúng không có hiệu lực trong không gian 99
làm việc ODBCDriect bởi vì phương tiện cơ sở dữ liệu từ xa duy trì đặc trưng các quan hệ riêng giữa các bảng.
Tap Hdp Containers
Tap hop Containers định nghĩa một tập hợp về các đối tượng container (đối tượng thùng chứa) cho các tài liệu cơ sở đữ liệu. Một vài đối tượng container có trong cửa số Database: Forms, Reports, Scripts for Macros, va Modules. Day là tất cả các đối tượng của Access, không phải là đối tượng co sé dit liéu Jet. Các đối tượng contaner khác dựa trên Jet, gdm Databases, Tables, va Relationships. Déi tugng container cha Tables gém thong tin vé cdc bảng và các query. Ngoài ra còn có đối tượng container bổ sung cho thông tin sắp đặt mối quan hệ đã lưu.
Các đối tượng container quản lý các document (tư liệu), gồm tất cả các phần tử đã lưu của một kiếu, như các form hoặc các mối quan hé.-Cac document nay cung cấp thông tin quản trị, không chứa nội dung về các đối tượng trong một đối tượng container. Các thuộc tính đã chọn cho các document gồm thời gian đã tạo và thời gian cập nhật cuối cùng cũng như người chủ, người sử dụng và các quyển hạn. đet sử dụng thông tin trong document để quản lý độ an toàn cho các đối tượng Access như là các bảng và các query của chính mình.
Điều quan trọng để hiểu rằng các document trong các đối tượng container khác với các phần tử trong một tập hợp. Các document gồm tất cả các đối tượng đã lưu trữ - ngay cả chúng có mở hay không. Các tập hợp là các nhóm đối tượng được mở. Nếu một đối tượng không mở, nó không phải là bộ phận của một tập hợp. Tuy nhiên, nó có thể thuộc về một đối tượng container. Ngoài ra, các document quản lý thông tin quản trị về các đối tượng, nhưng các phần tử trong một tập hợp có thông tin về nội dung, cách bố trí, và các phần tử con của các đối tượng của một tập hợp.
Chương 2: CÁC MÔ HÌNH TRUY CẬP DỮ LIEU
Mỗi tập hợp sers và Groups có các đối tượng phù hợp. Các tập hợp và các đối tượng này bổ sung các document của container để giúp Jet quản lý độ an toàn ở mức người dùng. Document có các quyển hạn. Các người dùng thuộc về các nhóm. Quyển hạn của document mô tả mức truy cập bởi các người dùng và các nhóm.
Chương 10 sẽ trình bày chỉ tiết về độ an toàn ở mức mgười dùng, bao gồm các người dùng, các nhóm và các quyền hạn.
Các Đối Tượng Của Không Giơn Làm Việc ODBCDirect
Bằng cách so sánh Hình 2-2 và 2-1, bạn có thể thấy rằng mô hình ODBCDriectL chi tiết hơn bởi vì không gian làm việc ODBCDriect đưa vào các server cơ sở dữ liệu từ xa một số chức năng để cho Jet quần lý. Ví dụ, các server cơ sở dữ liệu từ xa quản lý độ an toàn của chính nó, vì thế tập hợp sers và Groups không còn cần thiết nữa. Nó cũng không có tập hợp Tabiedeƒ bởi vì các server cơ sở đữ liệu từ xa quản lý các bảng của chính chúng. Tình huống này giống như các mối quan hệ.
Có hai mô hình không gian làm việc khác nhau trong các cách khác nhau. Mô hình ODBCDriect có tập hợp Connections mới với các đối tượng tương ứng. Ngoài ra, vai trò của đối tượng Database trong mé hình ODBCDrieet là khác nhau và các đối tượng QueryDeft không có tập hợp Fields. Ban cé thể nhận được đối tugng Recordset từ đối tượng QueryDefts qua phương pháp OpenRecordset.
Mặc dù cả hai không gian làm viéc déu cé mét ddi tugng Database, nó hơi khác trong không gian làm việc ODBCDriect so với những gì nó có trong không gian làm việc đet. Trong không gian làm việc ODBCDriect, đối tượng đó có thuộc tính Connect để trả về một tham chiếu đến Connection. Đối tugng Connection có thuéc tinh Database dé tra vé tham chiếu đến đối tượng Dơiabase.
Trong mô hình DAO, các déi tugng Connection va Database cé những cách tham chiếu khác nhau đến cùng một đối tượng. Các
101
thuộc tính này làm đơn giản hóa việc đi chuyển từ các mô hình không gian làm việc Jet đến không gian làm việc ODBCDrieet và ngược lại.
Tap Hop Connections
Các tap hgp Connections cha mét không gian làm việc và các đối tượng của nó là tới hạn khi bạn làm việc với cơ sở dữ liệu từ xa.
Trong không gian làm việc ODBCDriect, bạn sử dụng phương pháp OpenConnecHon để thiết lập mối quan hệ đến một cơ sở dữ liệu từ xa. Bạn cần bốn đối số, trong đó ba đối số để tùy chọn. Một đối số cần phải có tên. Đặt tên một kết nối gắn nó vào tập hợp Connections. Ba đối số khác định nghĩa trạng thái tự nhiên của kết nối. Vì những đối số này là những đối số tùy chọn, bạn có thể chỉ định chúng khi tạo kết nối hoặc sau này. Tuy nhiên, bạn phải định nghĩa một kết nối trước khi bạn sử dụng nó để khai thác dữ liệu hoặc làm việc khác hẳn với dữ liệu trong nguồn đữ liệu từ xa. Một đối số khóa còn lại là đối số Connect cài đặt thuộc tính Connect của đối tượng ConnecHon. Bạn có thể sử dụng đối số Connect để xác định chuỗi kết nối. Nó bắt đầu với ODBC và một dấu chấm phẩy (;) theo sau thông tin kết nối khác cần thiết để liên kết với nguồn dữ liệu từ xa. Nó có thể gồm một DSN và một tên cơ sở dữ liệu và nó cũng giống như user ID (bộ nhận biết của người dùng) và mật khẩu tương ứng. Bạn phân cách mỗi loại thông tin với một dấu chấm phẩy G). Trình ứng dụng của bạn có thể kiểm tra và cài đặt lại chuỗi kết nối qua thuộc tính Connect eảa đối tượng Connection.
Một tùy chọn thứ hai là tham số OpenConnection điều khiển hai loại hành vi phân biệt: Lam cách nào để một kết nối tác động trở lại thông tin của chuỗi kết nối không đây đủ và làm cách nào để mở một kết nối không đồng bộ. Trong trường hợp thông tin của chuỗi kết nối không đầy đủ, bạn có thể cho phép làm hỏng kết nối và tạo lỗi run-time hoặc bạn cũng có thể bẫy lỗi và lời nhắc cho thông tin đầy đủ. Bạn có thể sử dụng tham số này để chỉ định một kết nối để mở không đồng thời. Trình ứng dụng có thể mở một kết
Chương 2: CÁC MÔ HÌNH TRUY CẬP DỮ LIEU
nối và tiếp tục các công việc khác. Trình ứng dụng Access của bạn có thể phục vụ người sử dụng cục bộ bằng cách mở các form và ngay cả việc tác động qua lại với người sử dụng. Tại cùng một thời điểm, server của cơ sở dữ liệu từ xa xử lý các yêu cầu cho một kết nối mới.
Với thuộc tinh StillExecuting cla déi tuong Connection, trình ứng dụng của bạn có thể kiểm tra vòng kết nối để quyết định xem khi nào nó có hiệu lực sử dụng.
Đối tượng Connection cé nam phương pháp:
s OpenRecordset : Phương pháp này trả về một tập hợp các hàng từ một nguồn dữ liệu từ xa. Nó có nhiều điểm đặc trưng trong không gian làm việc ODBCDriect hơn so với không gian làm việc Jet. Có lẽ sự khác nhau sâu xa đó là khi sử dụng phương pháp này trong không gian làm việc ODBCDriect, bạn có thể chỉ định nhiều câu lệnh SQL do đó một câu lệnh OpenRecordSet don cé thể cung cấp các recordset đa dạng để sử dụng cục bộ.
® Close : Phương pháp này đóng một kết nối mở.
mw CreatQueryDeƒ : Phương pháp này cũng có các đặc tính bổ sung trong không gian làm việc ODBCDriect. Có lẽ rõ ràng nhất là cỏc đối tượng QueryDeft khụng cú cỏc fủield. Nếu bạn muốn xem các hàng trả về bằng một đối tượng QueryDeft cua row-returning (trả về theo hàng), bạn gọi phương pháp OpenRtecordset cho đối tượng. Tất cả các đối tượng QueryDeft trong không gian làm việc ODBCDriect đều là tạm thời.
Trong mô hình đối tượng ODBCDriect, bạn không thể tạo các thủ tục lưu trữ trong một nguồn dữ liệu từ xa. Các đối tượng QueryDeft có thể chỉ thuộc về các đối tượng Connection.
Không có phương pháp CrediQueryDeƒ cho các đối tượng ˆ De‡abase trong không gian làm việc ODBCDriect, nhưng có trong không gian làm việc Jet. Bạn có thể mở một đối tượng
103
BM Chuang 2: CAC MO HINH TRUY CAP DU LIỆU
Recordset tit mét déi tugng Database trong ca hai loai khéng gian lam viéc.
m Execute : Phuong phap nay chay các hành động, tham số, và các query select. Ban chỉ định hằng số đồRunAsync để xác định rằng đối tượng QueryDeff chạy không đồng thời. Cũng như phương pháp OpenConnection, người dùng có thé thực hiện các tác vụ khác cùng một lúc như chạy đối tượng QueryDeft chẳng hạn. Thuộc tính SHliExeculting cho phép một trình ứng dụng kiểm tra trạng thái hoàn thành của đối tượng QueryDeft.
m= Cancel : Phương pháp này kết thúc một query không đồng thời. Nó trả về lỗi run-time nếu bạn gọi nó mà không định rõ thao tác không đồng thời. Bạn giải phóng tài nguyên bị chiếm dụng bằng đối tượng QueryDef, bằng cách thi hành phương pháp Ciose hoặc bằng cách cài đặt đối tượng QueryDeft tham chiéu tdi Nothing.
Cập Nhật Theo Nhóm
Một trong những đổi mới lớn lao trong không gian làm việc ODBCDriect là cho phép một trình ứng dụng tải xuống một tập hợp các record, thực hiện cập nhật theo cục bộ, và kế đó cập nhật theo bản gốc như một nhóm riêng thay thế cho một record tại một thời điểm. Việc cập nhật theo nhóm có điểm thuận lợi đồng thời rõ ràng ở ngoài khéa record don (single-recor. locking). Vi sAn 6 xung đột bên trong nên nó được sử dụng tốt khi một cơ sở dữ liệu không chắc chắn được sửa đổi trong chế độ nhiều người dùng. Tuy nhiên, một vài đặc tính điều khiển sự xung đột là đưa vào việc xử lý theo nhóm. Ví dụ, thuộc tính BœchCollisions trả về các bookmark (đánh dấu văn bản) đánh dấu điểm xung đột trong một recordset sau khi bạn tải lên (upload) recordset. Bạn cũng có thể bắt buộc một cơ sở dữ liệu từ xa tương ứng với cập nhật của bạn hoặc chấp nhận giá trị trong nguồn dữ liệu từ xa. Có ba thuộc tính cia Field cho phép bạn
Chương 2: CAC MO HINH TRUY CAP DU LIEU
kiểm tra là: giá trị nguồn trước khi tải xuống, giá trị đã cập nhật trong phiờn bản recordset cục bộ và giỏ trị ủeld mới trong nguồn dữ liệu từ xa.
Có năm bước để thi hành việc cập nhật theo nhóm trong không gian làm việc ODBCDriect:
1. Thiết lập tinh DefaultCursorDriver cho không gian làm việt téi dbUseClientBatchCursor.
2. Tao mot đối tượng Connection hoặc một đối tuong Database.
3. Gọi phương pháp OpenRecordset cho đối tượng từ bước 2 với cai dat dbOptimisticBatch cho đối số LockEdits.
4. Chỉnh sửa các field cục bộ khi cần thiết.
5. Gọi phương pháp Update cho recordset từ bước thứ 3 với cài dat dbUpdateBatch cho đối số của kiểu. Nếu không có xung đột, bạn thực hiện xong. Nếu có các xung đột, bạn cần có logic' bổ sung để dàn xếp chúng.