Giáo trình đào tạo Visual Basic 6.0
1 Truy cập dữ liệu từ xa
• Client / Server và các thành phần
• Cấu trúc Client / Server Three-Tier
• Dùng ActiveX truy cập cơ sở dữ liệu
• Chuyển đổi dữ liệu với bản sao cơ sở dữ liệu
1.1 Client / Server và các thành phần
Thuật ngữ thành phần tầng trung gian (middle-tier) đã thay đổi từ khi kỹ thuật
này được giới thiệu lần đầu tiên. Ví dụ, ta tạo một điều khiển ActiveX nhúng trong
một ứng dụng Client để nói chuyện với một thành phần ActiveX Server cũng chứa
trên Client. Sau đó, thành phần ActiveX Server sẽ nói chuyện với ActiveX Server
chứa trên máy thuộc tầng trung gian, đến lượt tầng trung gian sẽ nói chuyện với
Server cơ sở dữ liệu chứa trên WinNT Server.
Ta lướt qua một số khái niệm cơ bản :
• ActiveX : là khái niệm gắn liền với các đối tượng trong chương trình dùng giao
tiếp với nhau. Nó không phải là một sản phẩm, cũng không là một kỹ thuật.
• Điều khiển ActiveX : là một thành phần thường có giao diện(nhưng không phải
các thành phần đều có). Thành phần lưới cơ sở dữ liệu (DBGrid) được cung cấp
bởi Visual Basic là một thành phần ActiveX.
• ActiveX Server: còn gọi là thành phần mã hoá ActiveX. Trong Visual Basic 4.0
nó gọi là OLE Server. ActiveX Server là một thành phần đưa ra một hay nhiều
lớp chứa trong một khối đã được biên dịch. Ứng dụng sẽ dùng các đối tượng
được sinh ra từ các lớp chứa trong thành phần ActiveX. Ta có thể truy cập khối
biên dịch này thông qua kỹ thuật DCOM (Mô hình đối tượng thành phần phân
tán – Distributed Component Object Model ).
Chương này tập trung về vấn đề sử dụng ActiveX Server trên mạng sao cho các
máy Client có thể tạo instance từ mạng.
FPT Software Solution Trang:1/-
Giáo trình đào tạo Visual Basic 6.0
1.1.1 Cấu trúc Cilent/Server Three- Tier
Những nguyên tắc mà người lập trình Client / Server phải tuân thủ :
thc hin DCOM trờn Win95 cha trờn a mt ca bn Visual Basic Enterprise,
trong th mc \Tools\DCOM98. Mun xem chi tit, cng nh ti xung cỏc tp tin
DCOM, ta tỡm trong trang web http:// www.microsoft.com /com /dcom/dcom1_2 /
dcom1_2. asp
Vớ d ngi s dng trờn mng mun truy cp d liu khỏch hng. gi c
tớnh nht quỏn, kh nng dựng li, d lp trỡnh v bo trỡ, bn nờn truy cp n c s
d liu thụng qua thnh phn ActiveX. Thnh phn ny c biờn dch v thit lp
trờn mng sao cho ng dng Client cú th truy cp nú t xa.
Hỡnh sau õy l s ca cu trỳc 3 tng tng quỏt. Nú kt hp cu trỳc vt lý
(2 mỏy tớnh ) v cu trỳc logic ( tng tng cung cp cỏc chc nng khỏc nhau).
Máy
Client
Thành phần ActiveX
Truy cấn cơ sở dữ liệu
Cung cấp các đối tượng cho Client
CSDL
Máy Server
Hỡnh 17.1 Lc ca mt cu trỳc 3 tng tng quỏt ho trn cu trỳc vt lý
(2 mỏy tớnh) vi cu trỳc logic ( mi tng cú 1 tớnh nng khỏc nhau ).
Ta cú th chia thnh phn tng trung gian qua nhiu mỏy. Vỡ vy, cu trỳc
Client / Server 3 tng khi ú tr thnh cu trỳc n tng.
FPT Software Solution Trang:3/-
Giỏo trỡnh o to Visual Basic 6.0
Máy
Client
Thành phần ActiveX
Truy cấn cơ sở dữ liệu
Cung cấp các đối tượng cho Client
CSDL
Máy ServerMáy tính trung gian
1.1.1.2DÙNG DCOM TRÊN NHỮNG PLATFORM KHÁC
DCOM có thể làm việc trên những môi trường khác Windows. Microsoft có
quan hệ với các nhà cung cấp hệ điều hành khác để nhờ họ làm cho DCOM xuất
hiện trên platform.
COM và DCOM bắt đầu xuất hiện trên UNIX. ActiveX SDK ( Công cụ phát
triển phần mềm – Software Development Kit ) trên Macintosh đã có vào cuối năm
1996; có thể đến lúc này, sử dụng ActiveX trên Macintosh là hiện thực.
1.1.1.3TẠO ỨNG DỤNG DCOM ĐẦU TIÊN
Xem lại ví dụ của chương 16 đề án CustSrv. Đây là thành phần ActiveX có một
lớp là CCustomer, dùng để truy vấn cơ sở dữ liệu và trả về một đối tượng Customer.
Phiên bản của đề án CustSrv2, loại bỏ hỗ trợ cho phương thức HTMLSave
(không phù hợp cho một thành phần triển khai ở xa ) và hỗ trợ thêm thuộc tính
GetList. GetList hiển thị danh sách tóm tắt các khách hàng dựa trên tiểu bang mà họ
sinh sống. Nó dùng OLE DB từ Trình cung cấp Jet cục bộ (native Jet Provider).
Nhờ đó, cho phép dễ dàng thao tác qua mạng. (ODBC DSN được yêu cầu bởi thành
phần Jet Novelty ).
1.1.1.3.1 ActiveX EXE
Đừng dùng các ActiveX EXE triển khai từ xa. Ví tính năng của MTS đáp ứng rất tốt
vấn đề triển khai từ xa.
FPT Software Solution Trang:5/-
Giáo trình đào tạo Visual Basic 6.0
1.1.1.3.2 TRIỂN KHAI ActiveX DLL TỪ XA DÙNG MTS (MICROSOFT
TRANSACTION SERVER )
Triển khai một thành phần dùng MTS là cách dễ nhất để tạo một ứng dụng phân
tán.
MTS chạy trên WinNT, Win95 và Win98; nhưng hiệu quả nhất là WinNT.
MTS có trong bộ WinNT 5.0. Với NT 4.0 (là môi trường chúng ta đang nói
chuyện), ta phải cài đặt phiên bản mới nhất của MTS dùng Windows Option Pack,
kèm theo đĩa CD của Visual Basic. Nó nằm trong đĩa 2 của bản Enterprise, thư
mục \NToptpak. Hoặc là ta có thể tải xuống Windows Option Pack từ web site tại
Computers, rồi My Computer. Ta sẽ thấy mục Packages Installed.
4. Nhấn vào mục này, Ta sẽ thấy một số gói có sẵn (mặc dù các gói này có thể thay
đổi tuỳ vào hệ thống ).
5. Nhấn nút phải chuột trên thư mục Packages Installed. Từ menu bật ra, chọn
New, Package.
6. Trình tự động Package Wizard xuất hiện. Chọn Create an empty package. Đặt
tên nó là Novelty.
7. Màn hình Set Package Identify xuất hiện. Bởi vì ta không dùng bảo mật với
thành phần này, hãy để nó quy định là Interactive user, rồi nhấn Finish.
8. Ta sẽ thấy gói mới trong thư mục Package Installed.
Mặc dù ta đã tạo xong gói, nhưng nó chưa làm gì cả, bởi vì ta chưa thêm thành
phần cho nó.
Đưa thành phần vào gói
Công việc rất đơn giản chỉ cần kéo rê ActiveX DLL vào gói đã tạo sẵn.
1. Trong MTS, mở mục Novelty dưới mục Packages Installed.
2. Ta sẽ thấy 2 mục : Components và Roles. Nhấn vào mục Components. Mục
này rỗng vì ta chưa thêm thành phần vào.
3. Sắp xếp các cửa sổ màn hình sao cho Windows Explorer mở sát bên cửa sổ
MTS.
4. Chọn và kéo rê tập tin ActiveX DLL từ cửa sổ Windows Explorer vào phần bên
phải của cửa sổ MTS. Các lớp được cung cấp bởi thành phần được thêm vào
gói MTS.
FPT Software Solution Trang:7/-
Giáo trình đào tạo Visual Basic 6.0
Một biểu tượng quả bóng màu xanh lá cây và đen hiển thị trong mục
Components cho biết thành phần đã được cài đặt và nó đang phục vụ yêu cầu. Ta có
thể kiểm tra bằng cách :
1. Tạo một ứng dụng Visual Basic kiểu Standard EXE.
2. Dùng menu Project References, cho một tham chiếu đến thành phần CustSrv mà
ta vừa đặt trong MTS. (Tên thư viện là CustSvr2)
động cần thiết để Client nhận ra thành phần triển khai từ xa.
• Cài đặt gói lên máy Client.
Để xem ví dụ ta làm như sau:
1. Trong cửa sổ MTS, nhấn nút phải chuột lên gói Novelty. Từ menu bật ra, chọn
Export.
2. Hộp thoại Export Package xuất hiện. Dùng nút Browse để chọn một thư mục
rỗng để export gói. Cho vào tập tin Novelty, nhấn Save.
3. Trở về hộp thoại Export Package. Nhấn Export. Sau một lúc, thông báo “The
package was successfully exported” xuất hiện.
Thư mục dùng để export gói giờ đây chứa các tập tin bao gồm:
• Một tập tin gọi là Novelty.PAK
• Bản sao của ActiveX DLL, CustSvr2.dll
• Một thư mục gọi là Clients. Thư mục này chứa một tập tin EXE gọi là Novelty.
exe
Tập tin Novelty.PAK và CustSvr2.DLL được dùng để tạo bản sao cho bộ cài đặt
của gói Novelty vào máy MTS. Tập tin Novelty.exe chạy trên máy Client để chuyển
yêu cầu của đối tượng chứa trong CustSvr2.dll vào máy MTS. Mỗi lần chạy
Novelty.exe trên máy Client, ứng dụng tham chiếu đến thành phần CustSvr2 sẽ truy
cập nó qua mạng thay vì truy cập nội bộ.
Để xoá một thành phần khỏi MTS, chỉ cần nhân nút phải chuột lên nó và và
chọn Delete trong menu bật ra. Thực chất, hành động này không xóa Active DLL
khỏi hệ thống; nó chỉ bỏ những gì đã đăng ký. Ứng dụng sẽ không thể dùng thành
phần cho đến khi nó được đăng ký lại.
FPT Software Solution Trang:9/-
Giáo trình đào tạo Visual Basic 6.0
1.1.1.3.3 3. DÙNG ActiveX ĐỂ TẠO THUẬN LỢI CHO VIỆC TRUY CẬP
CƠ SỞ DỮ LIỆU
Trong chương trước, bạn đã biết cách truy cập cơ sở dữ liệu dùng đối tượng và
các lớp. Kỹ thuật này cho phép đóng gói logic chương trình trong mô-dun lớp để có
thể dùng lại dễ dàng. Khả năng để biên dịch mô-dun lớp một cách độc lập thành một
Trong ADO, GetRows tự động quyết định kích cỡ của recordset.
3. Khai báo biến Variant để chứa mảng.
4. Thi hành phương thức GetRows của đối tượng Recordset để gán dữ liệu trong
Recordset vào biến Variant.
5. Thi hành chương trình để chuyển đổi dữ liệu từ mảng Variant thành những gì
ứng dụng cần.
Ví dụ sau trả về một mảng Variant sau khi gọi cơ sở dữ liệu. Phương thức này,
chứa một mô-dun lớp gọi là CCusData, được thiết kế để sinh ra một hộp danh sách
với các thông tin khách hàng.
Option Explicit
' References DAO 3.51
' Private variables
Private db As Database
Private rs As Recordset
'
Public Function GetList(strState As String) As Variant
' Retrieves a list of employees and
' places it into a variant array
' using GetRows.
Dim strSQL As String
Set db = OpenDatabase("..\..\DB\novelty.mdb")
strSQL = "SELECT ID, FirstName, LastName " & _
"FROM tblCustomer " & _
"WHERE State = '" & strState & "' " & _
"ORDER BY LastName, FirstName"
Set rs = db.OpenRecordset(strSQL)
' RecordCount isn't valid until
FPT Software Solution Trang:11/-
Giáo trình đào tạo Visual Basic 6.0
' you move to the end of the recordset