24/05/2018, 19:03

ODBC và các đối tượng dữ liệu từ xa

ODBC là một công nghệ Windows cho phép ứng dụng client nối với CSDL từ xa. Lưu trú trên máy client, ODBC tìm cách làm cho nguồn dữ liệu quan hệ trở thành tổng quát đối với ứng dụng Client. Điều này có nghĩa là ứng dụng Client không cần quan ...

ODBC là một công nghệ Windows cho phép ứng dụng client nối với CSDL từ xa. Lưu trú trên máy client, ODBC tìm cách làm cho nguồn dữ liệu quan hệ trở thành tổng quát đối với ứng dụng Client. Điều này có nghĩa là ứng dụng Client không cần quan tâm kiểu cơ sở dữ liệu mà nó đang nối là gì.

Bởi đây công nghệ phía Client, ODBC không đòi hỏi ta phải xử trên Server của cơ sở dữ liệu.

ODBC gồm 3 phần:

  • Trình quản lý điều khiển (driver manager)
  • Một hay nhiều trình điều khiển (driver)
  • Một hay nhiều nguồn dữ liệu

Kiến trúc của ODBC

Cấu trúc ODBC trình bày kết nối giữa ứng dụng Client và cơ sở dữ liệu

Server thông qua ODBC Driver Manager

Kiến trúc ODBC chứa kết nối giữa ứng dụng Client và cơ sở dữ liệu server thông qua Trình quản lý điều khiển ODBC.

Nguồn dữ liệu ODBC được tạo để dụng với RDO có thể được dùng mà không cần thay đổi với ADO - Thực vậy, ODBC là một trình cung cấp tự có của ADO, giúp việc chuyển đổi từ RDO sang dễ dàng hơn.

Tạo nguồn dữ liệu

Để một ứng dụng Clientnối với cơ sở dữ liệu Client/Serverdùng ODBC, trước hết, ta phải cung cấp thông tin về nguồn dữ liệu ODBC trên Client.Mỗi server yêu cầu những gói thông tin khác nhau để nối với Client.ODBC cung cấp thông tin này một tên đơn giản để ta có thể tham chiếu đến nó, thay vì phải thiết lập gói thông tin từ đầu mỗi lần ta cần đến nó. Điều này cung cấp cho ứng dụng Clientkhả năng tham chiếu một cách dễ dàng đến tổ hợp của một điều khiển, một cơ sở dữ liệu và có thể có thêm tên một người sử dụng và mật khẩu. Tên này chính là tên của nguồn dữ liệu hay DSN.

Ví dụ trong phần này được tạo với phiên bản 3.51 của Trình quản điều khiển ODBC và phiên bản 3.6 của điều khiển SQLServer.Nếu bạn dùng một phiên bản cũ hơn của ODBC, bạn sẽ thấy có một vài chỗ khác nhau ở hộp thoại của Trình quản lý điều khiển, cũng như thiếu một số tính năng. Hơn nữa, phiên bản cũ của ODBC không có khả năng kiểm nghiệm một kết nối ở trong trình quản lý điều khiển. Bạn có thể tải xuống phiên bản mới nhất của trình quản lý điều khiển ODBC như một phần của Thành phần truy cập dữ liệu của Microsoft (MicrosoftDataAccessComponents- MDAC), chứa ở địa chỉ http://www.microsoft.com/data/.

Để tạo một tên nguồn dữ liệu ODBC trên máy Client, ta theo các bước sau:

Bảo đảm rằng ta có một SQLServer đang hoạt động, và chỉ có thể truy cập nó từ máy Client. Điều này để tránh những vấn đề không thuộc ODBC có thể xảy ra như là nối mạng, bảo mật, v.v...

Phóng Control Panel từ menu Start.

Từ ControlPanel, nhấn đúp chuột lên biểu tượng ODBC. Hộp thoại Quản trị Nguồn dữ liệu xuất hiện:

Hộp thoại Quản trị nguồn dữ liệu ODBC

Danh sách các nguồn dữ liệu có thể thay đổi theo máy. Đến đây, ta có thể tạo một trong ba kiểu nguồn dữ liệu ODBC:

UserDSN :Chỉ có người tạo ra nó mới sử dụng nó và chỉ trên máy đang dùng.

SystemDSN:bất kỳ ai sử dụng máy này cũng có thể dùng được. Đây cũng là kiểu nguồn dữ liệu mà ta cần tạo khi cài đặt ứng dụng cơ sở dữ liệu Web.

FileDSN:có thể được copy và sử dụng dễ dàng bởi máy khác.

Tạo System DSN

Chọn vào tab System DSN trong cửa sổ ODBC Data SourceAdministrator

Nhấn nút Add.

Hộp thoại Create New Data Source xuất hiện. Chọn tên của điều khiển cơ sở dữ liệu ta muốn dùng (trong ví dụ này là SQL Server).

Nhấn Finish. Trình tạo nguồn dữ liệu mới đến SQL Server xuất hiện.

Trong ô Name, nhập tên của nguồn dữ liệu. Tên này sẽ được dùng trong ứng dụng Client để tham chiếu đến cơ sở dữ liệu, vì vậy, nên đặt tên sao cho gợi nhớ, có thể lấy tên của cơ sở dữ liệu. (Ví dụ là Novelty).

Điền vào ô Descriptionlà tuỳ chọn. Nó cung cấp thêm thông tin gắn liền với tên nguồn dữ liệu ODBC. Thông tin này chỉ hiển thị trong cửa sổ ODBC của Control Panel, và được xem như một thông tin về tên nguồn dữ liệu.

Trong hộp kết hợp Server,chọn SQL Server chứa cơ sở dữ liệu mà ta đang làm việc.

Nếu máy tính mà ta đang dùng cũng đang nối với SQL Server, tên của server sẽ xuất hiện trong danh sách thả xuống. Nếu SQL Server chứa trên cùng máy, ta có thể dùng local để thay thế tên của server

Nhấn Next. Màn hình kế tiếp của Trình tự động xuất hiện, hỏi ta cách login vào server. Ta có thể chọn cơ chế login của WinNT, trong đó, login mạng được dùng như là ID của người sử dụng và mật khẩu. Nhấn Next.

Có thể không cần nhập mật khẩu. Ta chỉ dùng đến nó khi mở một kết nối đến cơ sở dữ liệu. Điều này ngăn cản những rắc rối bảo mật tiềm ẩn, vì mọi thông tin của ODBC DSN đều được chứa trong registrycủa máy tính.

Màn hình kế tiếp của Trình tự động xuất hiện. Chọn vào hộp dánh dấu “Change the default database to”, rồi chọn cơ sở dữ liệu Novelty từ hộp kết hợp. Mặc dù bước này là tuỳ chọn, ta nên luôn liên kết tên cơ sở dữ liệu với tên nguồn dữ liệu ODBC.

Nhấn Next. Màn hình kế xuất hiện, nhắc ta chọn thông dịch bộ ký tự. Thông thường, ta không cần đổi bất kỳ mục nào trong màn hình này, trừ phi ta đang sử dụng bộ ký tự khác trên server, vì vậy, nhấn Next.

Màn hình kế cho ta chọn khả năng kích hoạt tác vụ ghi nhật ký. Nó cho phép ta xem những hành động bên trong mà ODBC làm khi gải quyết một truy vấn. Thông thường, ta chỉ chuyển nó thành on nếu ta đang gặp lỗi hay tìm kiếm những nguyên nhân ách tắc trong ứng dụng.

Nhấn Finish.Hộp thoại xuất hiện, mô tả chi tiết của nguồn dữ liệu mà ta vừa tạo. Sau đó, nhấn nútTestDataSource.Trình điều khiển sẽ đáp ứng bằng cách thông báo một kết nối vừa được thiết lập thành công.

Sau khi nhấn OK, tên nguồn dữ liệu mới xuất hiện trong cửa sổ ODBC Data Source Administrator.

Kiểm nghiệm kết nối cơ sở dữ liệu với ODBCPING

Phiên bản cũ của ODBC không có khả năng nối vào nguồn dữ liệu để kiểm định những thông tin kết nối mà ta cung cấp cho trình quản lý điều khiển có hợp lệ không.

Công việc này hữu dụng khi ta cần xác định nguyên nhân trục trặc trong một kết nối Client/Server là do server, do kết nối mạng, do ODBC, hay do ứng dụng Client. Tiện ích ODBCPING không giải quyết được trục trặc nhưng tối thiểu nó thông báo cho ta biết có kêt nối được với server thông qua ODBC hay không.

Cú pháp:

odbcping /Uusername /Ppassword /Sserver
    

Ví dụ, để kiểm định kết nối với SQLServer tên là BEDROCK dùng tên login là randy và mật khẩu là prince, ta dùng dòng lệnh sau:

odbcping /Urandy /Pprince /SBEDROCK

Từ menu Start, phóng dấu nhắc DOS. Trong cửa sổ DOS, nhập vào dòng lệnh: odbcping /Urandy /Pprince /SBEDPOCK

ODBCPING thiết ập nối kết với serverrồi thoát.

Truy cập nguồn dữ liệu với điều khiển DAO DATA và ODBCDIRECT

Tạo một ứng dụng Visual Basic với điều khiển ADOData nối với nguồn dữ liệu ODBC rất dễ. Trong thực tế, nó không đòi hỏi phải lập trình. Ta có thể dùng điều khiển Data để nhanh chóng kiểm tra kết nối đến cơ sở dữ liệu Client/Server, hoặc ta có thể dùng nó để tạo thử một giao diện người sử dụng với kết nối trực tiếp đến cơ sở dữ liệu.

Vì những lý do về khả năng hoạt động, ta có thể dùng điều khiển dữ liệu từ xa, hoặc là điều khiển ADODatathay vì điều khiển DAOData,bởi vì những điều khiển này chuyên dùng cho truy cập dữ liệu trên Client /Server. Trong những phiên bản DAO trước phiên bản 3.5, DAO tự động nạp bộ máy cơ sở dữ liệu Jet mỗi khi nó truy cập dữ liệu Client / Server -thậm chí khi ta không thực sự dùng cơ sở dữ liệu Jet/Access. Trong VB5, ta có thêm tuỳ chọn sử dụng ODBCDIRECT để truy cập dữ liệu Client / Server. ODBCDIRECT chỉ là một chuyển đổi để truy cập server thực tiếp thông qua DAO mà không cần nạp bộ máy cơ sở dữ liệu Jet. Điều này tiết kiệm bộ nhớ và giảm thời gian nạp ứng dụng trên máy Client. Nó thích khi ta phải dùng DAO để truy cập dữ liệu Client / Server nhưng không bận tâm về tính linh hoạt, khả năng sử dụng lại và tính dễ bảo trì của chương trình.

Tham khảo ví dụ mẫu của phần này trong đề án ODBCDAO.vbp, chứa trong thư mục samplesPhanIV23-rdoODBCDAO

Kiểm nghiệm SQL Server DSN

Tạo nguồn dữ liệu ODBC tên là Novelty.

Phóng Visual Basic và tạo đề án mới kiểu Standard EXE.

Từ menu ProjectComponents, lập một tham chiếu đến điều khiển lưới ràng buộc dữ liệu (Microsoft Data BoundGrid Control).

Điều khiển DBGrid ta đang dùng ở đây chỉ để duyệt dữ liệu. Nó có nhiều cách dùng khác nhau. Tham khảo chương 30 “Sử dụng điều khiển DBGrid và điều khiển Apex True DBGrid”.

Điều khiển DBGrid xuất hiện trong hộp công cụ. thêm một instance của điều khiển DBGrid và một điều khiển Data chuẩn vào biểu mẫu

Đổi thuộc tính DefaultType của điều khiển Data thành 1- UseODBC. Nó khiến cho ứng dụng bỏ qua bộ máy Jet, và do đó, làm ứng dụng khởi động nhanh hơn và tốn ít bộ nhớ hơn.

Trong thuộc tính Connect của điều khiển Data, đưa vào chuỗi ký tự sau:

ODBC; UID=randy; PWD = prince;DSN = Novelty

Trong thuộc tính RecordSource của điều khiển Data, đưa vào câu truy vấn:

Select * from qryCustomer

Bởi vì ta hạn chế quyền truy cập trực tiếp đến bảng trên cơ sở dữ liệu, ta chỉ truy vấn trên Viewcủa cơ sở dữ liệu (qryCustomer).

Quy định thuộc tính DataSource của điều khiển DBGridData1.

Thi hành ứng dụng. Lưới hiển thị toàn bộ dữ liệu trong bảng tblCustomer.

Điều khiển dữ liệu từ xa(RemoteDataControl-RDC) là một cách truy cập dữ liệu từ xa trong ứng dụng viết bằng Visual Basic. Điều khiển này dùng một giao diện lập trình tương tự điều khiển ADOData, hay là điều khiển DAOData. Trừ một vài ngoại lệ nhỏ, RDC hoạt động tương tự các điều khiển dữ liệu khác – ta cung cấp cho điều khiển một số thông tin về nơi chứa dữ liệu, nó sẽ trả về dữ liệu và cung cấp cho các điều khiển giao diện người sử dụng quan tâm đến dữ liệu. Người sử dụng sau đó có thể tương tác với dữ liệu thông qua các điều khiển trên giao diện - duyệt dữ liệu, cập nhật, thêm bản ghi mới – và ta không phải lập trình về các hoạt động này.

Lưu ý rằng ta không hạn chế vào RDO khi muốn sử dụng dữ liệu Client / Serve. VB6 giới thiệu một điều khiển dữ liệu mới cho nguồn dữ liệu ADO được thiết kế để thay thế RDC. Tìm hiểu chi tiết thêm trong chương 27.

Sử dụng RDC

1. Trong Visual Basic, chọn menu Project, Components.

2. Từ danh sách các thành phần, chọn MicrosoftRemoteData Control. Thiết lập tham chiếu đến Microsoft Data Bound Grid Control.

3. Nhấn OK. Điều khiển Remote Data Data Bound Grid xuất hiện trên hộp công cụ.

4. Tạo instance cho điều khiển RemoteData và điều khiển DataBound Grid trên biểu mẫu.

5. Nếu chưa cung cấp tên người sử dụng và mật khẩu khi tạo tên nguồn dữ liệu ODBC, ta đổi thuộc tính UserName của điều khiển RemoteData là tên người sử dụng để truy cập cơ sở dữ liệu, chẳng hạn như là “randy” hay “sa”.

6. Đổi thuộc tính Password của điều khiển RemoteData là mật khẩu của người sử dụng truy cập cơ sở dữ liệu.

7. Quy định thuộc tính SQL của điều khiển Remote Data là:

Select * from qryCustomer

8. Trong thuộc tính DataSourceName của điều khiển RemoteData chọn DSN cho cơ sở dữ liệu SQL Server. DSN ta tạo trước đây sẽ xuất hiện trong danh sách thả xuống.

9. Chỉ định thuộc tính DataSource của điều khiển DBGridMSRDC1, tên của điều khiển Remote Data.

10. Thi hành ứng dụng. Ứng dụng trả về nội dung của bảng tblCustomer và hiển thị nó trong lưới dữ liệu.

Ngiên cứu kỹ chương này, bạn sẽ thấy rằng sử dụng điều khiển Data với tuỳ chọn ODBCDIRECT và điều khiển RemoteData để truy cập dữ liệu về cơ bản là như nhau. Cả hai đều cho phép truy cập đến cơ sở dữ liệu ODBC không cần lập trình.

Tham khảo ví dụ mẫu của phần này trong đề án RDCTest.vbp, chứa trên thư mục samples PhanIV23-rdoRDCTest

Đối tượng dữ liệu từ xa (Remote Data Object-RDO) được sắp xếp trong cấu trúc phân nhánh đối tượng dữ liệu tương tự như DAO(Đối tượng truy cập dliệu Data Access Object ).

Lưu ý rằng mô hình đối tượng của RDO đơn giản hơn DAO.Nhiều chức năng của DAO (như là đáp ứng về bảo mật và khả năng sửa đổi thiết kế cơ sở dữ liệu) được xử lý bởi bộ máy cơ sở dữ liệu. Mặt khác, trong RDO, chức năng này được xử lý bởi server.

ADO cung cấp mô hình đối tượng đơn giản hơn RDO, trong khi vẫn đảm bảo mọi chức năng của RDO.

Điểm hạn chế này có nghĩa là ta không thể dùng RDO để tạo đối tượng cơ sở dữ liệu như là bảng, view, và thủ tục chứa sẵn (ít ra, ta không thể sử dụng đối tượng để thực hiện điều này – Tuy nhiên, ta có thể dùng RDO để truyền trực tiếp câu lệnh SQL theo thủ tục đến server, nghĩa là hầu hết những gì có thể làm với ISQL/w, ta cũng có thể làm với RDO).

  1. Lập một tham chiếu đến RDO trước khi sử dụng nó. Chọn menu Project, References. Hộp thoại References xuất hiện:
  2. Chọn Microsoft Remote Data Object 2.0 từ danh sách
  3. Nhấn OK. RDO xuất hiện trong ứng dụng.

Thực hiện các bước này khi ứng dụng cần truy cập RDO. Nếu ứng dụng dùng RDC, ta cần phải lập một tham chiếu đến RDO và thêm RDC vào đề án.

Quy định thuộc tính bộ máy cơ sở dữ liệu dùng đối tượng RDOENGINE.

Đối tượng rdoEngine là đối tượng ở mức cao nhất trong mô hình đối tượng RDO. Nói chung, ta dùng đối tượng rdoEngine để chỉ định thuộc tính mặc định cho các đối tượng RDO khác mà ứng dụng tạo ra.

Đối tượng rdoEngine còn hữu dụng trong trường hợp ta muốn quy định hay kiểm tra kiểu con trỏ được dùng bởi bộ máy cơ sở dữ liệu. Con trỏ là cách truy cập từng dòng của bộ kết quả. Con trỏ khác nhau có những khả năng khác nhau; ví dụ, con trỏ cuộn tới cho phép truy cập các dòng tuần tự, nhưng không được phép quay ngược lại và tham chiếu đến những dòng trong bộ kết quả ta vừa dịch chuyển qua.

Đối tượng rdoEngine tương đương đối tượng DBEngine của DAO. Không có điểm tương tự trực tiếp với rdoEngine trong ADO; chức năng của nó bị phân chia giữa các đối tượng ConnectionRecordset của ADO.

Ngoài khả năng thể hiện nguồn dữ liệu, đối tượng rdoEngine còn chứa tập hợp rdoErrors cho phép ta lặp xuyên qua toàn bộ thông báo lỗi phát sinh bởi một transaction của một cơ sở dữ liệu nhất định.

Đối tượng rdoEngine chứa tập hợp các đối tượng Enviroment, cũng như tập hợp các đối tượng rdoError.

dụ, nếu ứng dụng cần tạo một số đối tượng dựa trên login thông thường và mật khẩu của người sử dụng, ta thể chỉ ra các yếu tố này khi ta bắt đầu sử dụng RDO trong ứng dụng. Các giá trị mặc định ta quy định (dùng thuộc tính rdoDefaultPassword rdoDefaultUser ) dành cho các đối tượng rdoEnvirnment mà ta tạo ra trong ứng dụng.

Ta cũng có thể dùng đối tượng rdoEngine để diều khiển cách thức tạo và duy trì các con trỏ trong ứng dụng.

Ngoài việc cung cấp các giá trị mặc định cho những đối tượng tạo bởi RDO, đối tượng rdoEngine tự động tạo đối tượng rdoEnvironment. Ta có thể tham chiếu đến đối tượng này trong chương trình như là rdoEnvironments(0).

Truy cập môi trường đối tượng rdoEnvironment

Đối tượng rdoEnvironment thể hiện môi trường cơ sở dữ liệu. Đây là một cách tham chiếu đến bộ kết nối cơ sở dữ liệu (theo dạng của đối tượng rdoConnection).

Đối tượng rdoEnvironment tương tự đối với Workspace trong DAO. Với ADO, rdoEnvironment tương tự với đối tượng Connection của ADO.

Cũng như đối tượng rdoEngine, không chắc rằng ứng dụng cần tạo nhiều hơn một instance của đối tượng rdoEnvirment- trừ phi ta cần hỗ trợ nhiều transaction đồng thời trên nhiều kết nối cơ sở dữ liệu. Thay vì tạo một instance mới của đối tượng rdoEnvironment, ta có thể truy cập đối tượng rdoEnvironment hiện hành, rdoEnvironment(0), được tạo bởi đối tượng rdoEngine khi ta lập một tham chiếu đến RDO từ ứng dụng.

Đối tượng rdoEnvironment thuộc về tập hợp rdoEnvironmént và chứa tập hợp gồm các đối tượng rdoConnection

Ta dùng đối tượng rdoConnection để thiết lập một kết nối đến server cơ sở dữ liệu từ xa trong RDO. Sau khi ta có một đối tượng rdoConnection hợp lệ, ứng dụng có thể bắt đầu tương tác với cơ sở dữ liệu.

Đối tượng rdo Connection tương tđối vi Database trong lập trình với DAO.Nó cũng tương tự theo một nghĩa nào đó với đối tượng Connetion của ADO.

Đối tượng rdoConnection thuộc về tập hợp rdoConnections và chứa tập hợp các đối tượng rdoQuery, đối tượng rdoResultset, và đối tượng rdoTable.

Để tạo một kết nối dùng đối tượng rdoConnection, ta bắt đầu bằng cách tạo chuỗi kết nối ODBC. Khác với điều khiển Data, ta bỏ qua ODBC; cũng như mệnh đề của chuỗi kết nối của đối tượng rdôCnnection. (Nó ám chỉ rằng vì sử dụng RDO, ta sẽ dùng ODBC).

Dưới đây là danh sách các phần tử thông dụng nhất trong chuỗi kết nối ODBC khi kết nối với SQL Server.

Th a m biến tả
UID Tên login của người sử dụng
PID Mật khẩu của người sử dụng
DSN Tên nguồn dữ liệu ta tạo trong Trình quản lý điều khiển ODBC
DRIVER Điều khiển ODBC mà ta muốn kết nối
DATABASE Tên cơ sở dữ liệu mà ta muốn kết nối
APP Tên ứng dụng kết nối với cơ sở dữ liệu
LANGUAGE Ngôn ngữ quốc tế được dùng bởi server
SERVER Tên của SQL Server mà ứng dụng kết nối đến

Tuy nhiên, đây không phải toàn bộ các tham biến. Và không nhất thiết phải dùng tất cả các tham biến này trong mọi trường hợp. Cơ sở dữ liệu có thể sử dụng nhiều hoặc ít hơn.

Ví dụ, để nối đến cơ sở dữ liệu SQL Server Novelty, ta dùng chuỗi kết nối:

DSN = Novelty; UID = randy; PWD = prince
    

Nếu không cung cấp tên login và mật khẩu của người sử dụng trong chuỗi kết nối, khi ứng dụng nối đến server, trình điều khiển của ODBC sữ hiển thị hộp thoại yêu cầu người sử dụng cung cấp thông tin login.

Tạo chuỗi kết nối không chứa DSN

Ngoài cách tạo kết nối sử dụng tên nguồn dữ liệu ODBC, ta còn có một tuỳ chọn để tạo một chuỗi kết nối không cần có DSN. Khi đó, chuỗi kết nối bao gồm toàn bộ thông tin cần thiết để login, kể cả tên trình điều khiển ODBC, chẳng hạn như:

Driver = "SQL Server"; SERVER = bedrock; 

DATABASE = bedrock; UID =randy; PWD = prince;

Lưu ý rằng, thứ tự các phần tử trong chuỗi không quan trọng, nhưng cách đánh vần là có quan trọng. Một trong những lỗi phổ biến nhất mà nhà lập trình thường gặp khi xây dựng chuỗi là bỏ qua ký tự (chấm phẩy (;) hay ký tự ngoặc cong), hoặc chèn một ký tự lạ (như khoảng trắng trước và sau dấu bằng) trong chuỗi kết nối. ODBC rất kén chọn với định dạng của chuỗi kết nối, vì thế nên thận trọng.

Dùng chuỗi không DSN trong trường hợp ta không cần điều khiển toàn bộ qua cấu hình phía Client. cũng nhanh hơn một ít khi log vào sở dữ liệu. Bởi DSN được chứa trong Registry của Windows, và rất tốn kém truy cập vào đấy.

Mở cơ sở dữ liệu

Sau khi đã có thông tin cần để thiết lập kết nối đến cơ sở dữ liệu, ta có 2 tuỳ chọn để thiết lập kết nối:

  • Dùng phương thức OpenConnection của đối tượng rdoEnvironment.
  • Dùng phương thức EstablishConnection của đối tượng

Cả hai phương thức đều như nhau, chúng chỉ hoạt động hơi khác nhau một chút.

Dùng phương thức OpenConnection

Option Explicit
    ' References RDO 2.0
    Private MyConn As rdoConnection
    Private Sub Form_Load() Dim strConnect As String
    strConnect = "DSN=Novelty;" & _ "PWD=prince;" & _ "UID=randy;"
    Set MyConn = rdoEnvironments(0).OpenConnection("Novelty", _
    ,, strConnect) End Sub
    

Phương thức OpenConnection có 5 tham biến : Tham biến thứ nhất, tên nguồn dữ liệu, không phải là tuỳ chọn. Bốn tham biến còn lại (Prompt, Readonly, Connect, và Options) là tuỳ chọn. Điều này giải thích cú pháp lạ của phương thức - tham biến thiếu đặt giữa các dấu phẩy. (Lưu ý rằng đoạn chương trình này tạo ngầm đối tượng rdoEnvironment, tham chiếu đến rdoEnvironment(0), để tạo một kết nối đến cơ sở dữ liệu).

Mặt khác, phương thức EstablishConnection, thực hiện yương tự như

OpenConnection. Nhưng nó hoạt động theo cách trực tiếp hơn:

Option Explicit
    ' References RDO 2.0
    Private MyConn As rdoConnection
    Private Sub Form_Load() Dim strConnect As String
    strConnect = "DSN=Novelty;" & _
"PWD=prince;" & _ "UID=randy;"
    MyConn.EstablishConnection
    End Sub
    

Tham khảo ví dụ trong đề án projectConnect.vbp trong thư mục samplesPhanIV23-rdoConnect.

Đối tượng RDO có khả năng sinh ra sự kiện. Sự kiện còn cho phép ứng dụng thi hành những hành động mất nhiều thời gian (như là kết nối đến cơ sở dữ liệu hay thi hành câu truy vấn) mà không cần giữ điều khiển của ứng dụng. Thay vì chờ cho hành động của RDO xảy ra, ứng dụng có thể làm việc khác cho đến khi kết nối được thiết lập hay truy vấn hoàn tất. Ta gọi đây là thi hành không đồng bộ. Sự kiện là cách thức đối tượng RDO thông báo cho ứng dụng rằng một hoạt động bất đồng bộ vừa hoàn tất.

Để khiến một đối tượng dữ liệu đặc biệt sinh ra sự kiện, ta phải khai báo nó theo cách đặc biệt: dùng từ khoá WithEvents. Ví dụ, khai báo đối tượng rdoConnection có tên là MyConn phát sinh sự kiện, ta dùng dòng lệnh:

Private WithEvents MyConn As rdoConnection
    

Sau khi khai báo, các sự kiện của nó sẽ xuất hiện trong cửa sổ Code của Visual Basic.

Truy cập thủ tục sự kiện của một đối tượng RDO được khai báo bằng từ khoá WithEvents.

Sau đó, ta có thể viết các thủ tục xử lý sự kiện. Các thủ tục này tương tự thủ tục xử lý sự kiện của các đối tượng cơ bản khác, như thủ tục sự kiện Load của biểu mẫu hoặc thủ tục sự kiện Click của nút lệnh.

Cách dễ thất để minh hoạ cách thức hoạt đọng của các sự kiện RDO là viết một thủ tục thông báo khi một kết nối đến cơ sở dữ liệu được thiết lập.

Option Explicit
    ‘referene rdo 2.0
    WithEvents Myconn As rdoconnection
    Private Sub Form_Load()
    Set Myconn = New rdoconnection Myconn.conect = "DSN=novelty;" & _ "PWD=rince;" & _
    "UID=randy;" Myconn.EstablishConnection End Sub
    Private Sub myconn_connect(ByVal ErrorOcurred As Boolean)
    If ErrorOcurred Then
    MsgBox "There was a problem" & _
    "connecing to the database.", vbExclamation
    Else
    MsgBox "connection established.", vbInformation
    End If
    End Sub
    

Trình thiết kế kết nối người sử dụng (Uerconnection designer) tạo sự dễ dàng ho ngườI sử dụng Visual Basic để kết nối với cơ sở dữ liệu client/server dùng RDO. Nó phát sinh đốI tượng rdoconnection mà không phảI lập trình nhiều

Tương tự biểu mẫu trong đề án VB, ta thêm trình thiết kế Uer_connecttion vào đề án và dùng nó như dùng biểu mẫu. Khi ta biên dịnh tạp tin thi hành EXE trong VB, trình thiết kế userconnection cũng được biên dịch như biểu mẫu.

Với ADO trong VB 6, ta có một kiểu thiết kế mới để tậo kết nối vớI cơ sở dữ liệu. thiết kế này gọI là dataenviroment, sẽ được trình bày trong chương 27 “ĐốI tượng dữ liệu ActiveX”. Nó vượt xa khảng năng của thiết kế UserConnection trong một số sách. thiết kế UserConnction là một dạng mô-đun lớp.

Để dùng trình thiết kế UserConnection,ta làm như sau:

  1. Thêm một trình thiết kế UserConnection mới vào đề án.
  2. Dùng giao diện đồ hoạ của userconnection, thể hiện nguồn dũ liệu ODBC mà ta muốn nối đến, và cách thức kết nối.
  3. Trong chương trình, tạo một instance của đối tượng rdoconnection từ thiết kế userconnection.

Dùng trình thiết kế UserConnection để két nối với sở dữ liệu ODBC

1. Trong đề án VB, chọn menu Project, more ActiveX Designers. Chọn Microsoft UserConnection.

2. Một trình thiết kế UserConnection được thêm vào đề án, và hộp thoại UserConnection properties xuất hiện:

3. Trong tabConnection, chọn nguồn dữ liệu ODBC hay xây dựng chuỗi kết nối không có DSN.

4. Chon tab Authentication, nhập tên và mật khẩu người sử dụng. Chọn vào hộp đánh dấu “ Save Connection Information for Design=time”. Như thế, ta có thể truy cập kết nối bất kỳ lúc nào ta muốn.

Trong trình thết kế UserConnection, cũng tương tự như với ODBC DSN, ta có tuỳ chọn là bỏ qua các thông tin gắn liền với việc thẩm định. Bỏ qua công việc này nghĩa là tên người login và mật khâu sẽ không được biên dịch vào ứng dụng và nó không được lưu cùng với trình thiết kế UserConnection. Mặc dù vậy, nhớ rằng thiết kế UserConnection không chứa dữ liệu cho thẩm định, trong khi bạn không cung cấp các thông tin đó trong chương trình khi thực thi, do đó, trình điều khiển ODBC sẽ hiển thị hộp thoại mỗi lần ứng dụngkết nối đén cơ sở dữ liệu.(Tắt hộp thoại login này trong thiét kế UserConnection bằng cách dùng hộp kết hơp Prompt Behavior trong tab Authentication của hộp thoại Properties của thiết kế). Trong ứng dụng, ta muốn giải quyết vấn đề thẩm định người sử dụng theo một cách khác - trả về tên người sử dụng và mật khẩu tại thời điểm người sử dụng khởi động ứng dụng, hay(đối với các ứng dụng hỗ trợ quyết định) tạo một người sử dụng chỉ đọc đặc biệt để duyệt dữ liệu.

5. Nhấn OK.

6. Hộp thoại properties đóng. Trên màn hình xuất hiện tên trình thiết kế UserConnection.

Cửa sổ thiết kế UserConnection sau khi ta đặt thuộc tính khởi động nó.

7. Trong cửa sổ properties cảu VB, gõ vào một tên cho trình thiết kế UserConnection. Ta dùng tên này để tham chiếu đến trình thiết kế UserConnection tong chương trình. Ví dụ ta đặt tên trình thiết kế UserConnection két nối đến cơ sở dữ liệu company là conCompany.

Ta có thể tạo câu truy vấn trong trình thiết kế UserConnection theo một tổng ba cách:

Gọi một thủ tục chứa sẵn hay view trên server cơ sở dữ liệu để trả vềcác bản ghi.

Phát một câu lệnh cho server cơ sở dữ liệu dưới dạng một câu truy vấn SQL động.

Xây dựng một câu truy vấn trong trìng thiết kế UserConnection dùng Microsoft query. Kỹ thuật này tương tự kỹ thuật truy vấn động, nhưng nó mạng tính đồ hoạ hơn, vì vậy đê xây dựng lúc thiết kế.

Gọi thủ tục chứa sẵntrongmộttrìnhthiếtkế UserConnection

Thêm thủ tục vào tình thiết kế UserConnection

Để gọi thủ tục chứa sẵn tù một đối tượng được tạo ra từ trình thiết kế UserConnection, vào lúc thiết kế, ta pahỉ thêm thủ tục chứa sẵn vào trìn thiết kế UserConnection. Sau đó, ta có thể truy cập thủ tục như một phương thức của đối tượng kết nối.

1. Trên thanh công cụ của trình thiết kế UserConnection, nhấn nút Insert

Query

2. Hộp thoại Query Properties xuất hiện. trong hộp query name, nhập tên truy vấn; có thể trùng với tên thủ tục chứa sẵn.

3. Hộp kết hợp BasedonstoredProcedure cung cấp một danh sách các thủ tục chứa sẵn trên cơ sở dữ liệu company. Ta chọn thủ tục lastNameLookup.

4. Chọn tab Prameters. thủ tục LastNameLoopup lấy tham số name, là tên người sử dụng đang tim kiếm.

5. nhấn OK. thủ tục LastnameLoopup được thêm vào trình thiết kế

UserCo n nec t ion

/****************************

anh

***********************************/

Gọi thủ tục

Tạo một instence của UserConnection trong chương trình, sau đó, thi hành thủ tục chúa sẵn như là một phương thức của đối tượng rdoConnection.

1. Thêm một hộp danh sách chuẩn, một nút lệnh chuân, va một hộp văn bản chuẩn vào biểu mẫu trong đề án chứa UserConnection. Dùng hộp văn bản để nhập tham ssố cho truy vấn. Chương trinh thi hành câu truy ấn được kích hoạt bằng cách nhấn vào nut lệnh.

2. Trong phần Declatians khai báo một biến chứa rdoconnection và rdoresultset Private Conn As concompany Orivate rs As rdoresultset

3. Trong sự kiện click của nút lệnh, lập trìh để tạo instance của

UserConnection, nối với cơ sở dữ liệu và thi hành thủ tục chứa sẵn.

Private Sub command1_click()
    Set conn = New conCompany conn.EstablishConnection conn.lastnameloopup Text.tex Set rs = con.LastQueryResults list1.Clear
    Do util rs.eof
    list1.additem rs!lastName&" "&rs!fistName rs.MoveNext
    Loop conn.Close
    End Sub
    

Khi nhấn ký tự dấn chấm sau đối tượng Conn, thủ tục chứa sẵn được tham chiếu bơi UserConnection xuất hiện trong danh sách các thành phần của đối tượng.

4. Thi hành ứng dụng. Nhập tên Smith vào hộp văn bản, rồi nhấn nút lệnh. Danh sách liệt kê những tên chưa từ “Smith” như phần đầu.

Dùng Microsotf Query để xây dựng chuỗi SQL trong trình thiết kế UserConnection.

Ta vừa thấy tham chiếu đến một câu truy vấn chứa trên server dùngtrnhf thiết kế UserConnection rất rễ. Nếu câu truy vấn không có sẵn trên server, ta phải phát sinh trên client rồi sau đó sễ thi hành trên server, kết quả tra về Client.

Ta có thể nhập chuỗi SQL một cách thủ công hoặc dùng công cụ đồ hoạ trên Client. Microsoft Query là một công cụ gần gũi nhất ới trình thiết kế UserConnection.

/**************************

****************************/

Thêm truy vấn vào trình thiết kế UserConnection dùng Microsoft Query

1. Nhấn nút Insert Query trên thanh công cụ của trình thiết kế

UserConnection.

2. Hộp thoại Properties của truy vấn xuất hiện.

3. Nhập tên của truy vấn trong hộp văn bản Query Name.

4. Chọn khả năng tuỳ chọn Based on User-Defined SQL,rồi nhấn Build.

5. Microsoft Query phóng lên nguồn dữ liệu ta muốn kết nối, rồi nhấn OK.

/****************

****************/

Ta phải chỉ ra nguồn dư liệu trở lại khi ta thực hiện trong phần trước. ta co một DSN của người dùng cho cơ sở dữ liệu company. Vì một lý do nào đó, nó muốn dùng DSN dựa trên tập tin thay vì Uer-DSN hay System-DSN. May mắn là,MS query cho ta khả năng tạo DSN tong chương trình, vì thế, đây không là vấn đề lớn. Tuy nhiên, ta vẫn muốn thiết lập mọi thứchứa trong một nơi.

Một vấn đề khác với MS query la nó cai đặt để tìm kiếm các tập tin DSN trong thư mục trong Program Files Common FilesMicrosoft SharedVba, trong khi ODBC tạo DSN dựa trên tập tin Program Files Common Files ODBCData Sources. Trong hộp thoại chooseDataSourcecủa Ms Query, ta giải quyết vấn đề nàt bằng cách nhấn nút Option để chi ra thư mục tìm kiếm DSN. Để lam điêu này, nhấn Browse trong hộp thoại Data Source Options, chọn đúng thư mục, nhấn OK rồi nhấn Add. Khi ấy, thư mục mới sẽ được nhận ra bởi MS Query về sau.

6. trình tự động Query Winzard thi hành, hiện thị dữ liệu có sẵn trong nguồn dữ liệu. Hộp đầu tiên của Winzard hiển thị.

7. Nhấn đúp chuột lên truy vấn hay view mà ta định dùng (ví dụ,chon qryCustomer). Truy vấn hay View được mở rộng để hiển thị danh sách các trường chứa trong truy vấn.

8. Nhấn đúp lên mỗi trường ta muốn lấy về, ví dụ chon FirstName và LastName.

9. Nhấn Next.

10. Bước Lọc dữ liệu (Filter Data) xuất hiện. Ở bước này, ta xácđịnh cách thức lọc bản ghi. Ví dụ, để trả về những khách hàng tên Jones, chon trường Lastname từ danh sách các trường. Sau đó, trong hộp kết hợp bên phải danh sách cột,chọn Equal. Trong hộp kết hợ kế tiép, chọn Jones.

11. Nhấn Next. Bước kế tiếp cho phép ta sắp xếp dữ liệu. Trong hộp kết hợp Sort, chon FirstName.

12. Nhấn Next.Khihoàn tất, ta có thể tuỳ chọn để xem dữ liệu trả về hay trở lại thiết kế UserConnection. Chọn View Data or Edit Query trong MS Query, rồi nhấn Finish.

13. Dữ liệu trả về hiển thị trong MS Query.

Tham khảo ví ụ mẫu trong đề án Query.vbp, trong thư mục samplePhanIV23-rdoQuery.

Khi hoàn tất xem dữ liệu, chọn menu File, Exit to Connection Designer. Microsoft Query thoát ra và trả truy vấn ta xây dựng về hộp thoại Properties của truy vấn của trình thiết kế UserConnection dưới dạng chưỡi SQL.

Nhấn OK để đóng hộp thoại Query Properties. Truy vấn được chứa trong trình thiết kế UserConnection.

Có vài ưu điểm khi chứa truy vấn trong trình thiết kế UserConnection:

- Dùng lại thiết kế trong nhiều đề án với nhièu người lập trình mà không cần thay đổi về phía server.

- Kiểm soát được độ phức tạp của ứng dụng vì không có nhiều dòng lệnh để bảo trì.

Tuy nhiên, nhược điểm của kỹ thuật này là truy vấn trên Client, chung sẽ không truy cập được từ mọi Client khác. Như thế,từng Client có cách truy nhập khác nhau, dễ dấn tới tình trạng không nhất quán, nhất là khi thiết kế cơ sở dữ liệu phát triển theo thời gian. Nếu tạo truy vấn trên Client, ta nên nạp nó vào Server.

Ta sử dụng đối tượng rdoresultset để thao tác với dữ liệu trả về do tương tác với server.

Mỗi đối tượng rdoresultset thuộc về tập hợp rdoresultsets. Đối tượng rdoresultset chứa tập hợp rdoColumn.

Đối tượng rdoresultset gần như đồng nhất với đối tượng Recordset cuẩ DAO. Có thể tạo đối tượng rdoresultset theo một số cách điển hình, nó được tạo như một kết quả củacâu truy vấn.

Trong RDO 2.0 đối tượng RDOQuery là một thay thế cho đối tượng rdoprepareStatment trong RDO 1.0. Ta có thể vẫn dùng các đối tượng rdoPrepareStatment trong RDO 2.0 vì nó vẫn tương thích với các phiên bản trước. Tuy nhiên, với chương trình viết mới, ta nên dùng rdoQuery.

Từng đối tượng rdoQuery thuộc về tập hợp rodQueries. Đối tượng rodQuery chứa tập hợp các đối tượng rdoColumn và rdoParameter.

0