24/05/2018, 22:17

Truy cập dữ liệu từ xa

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 ...

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 ActiveXServer trên mạng sao cho các máy Client có thể tạo instance từ mạng.

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ủ :

  • Duy trì mộ hệ thống ổn định để đáp ứng với các quy luật kinh doanh thường xuyên thay đổi.
  • Cung cấp điểm khởi đầu đơn giản và nhất quán cho dữ liệu, trong khi cùng lúcbảo vệ cơ sở dữ liệu khỏi các ứng dụng Client, và trái lại, bảo vệ các ứng dụng Client khỏi tính phức tạp và bất thường của Server.
  • Ý tưởng xây dựng các quy luật kinh doanh trong ngôn ngữ lập trình bất kỳ, không chỉ với SQL.
  • Ý tưởng triển khai các quy luật kinh doanh trên một máy tính không phải là Server cơ sở dữ liệu, để bảo toàn năng lực xử lý của Server cơ sở dữ liệu.
  • Ý tưởng triển khai các quy luật kinh doanh vào Client để giảm thiểu lưu thông trên mạng.
  • Triển khai các quy luật kinh doanh tại một điểm đơn giản trong hệ thống ( trái với ý nghĩa triển khai toàn bộ trên mọi máy Client mỗi lần có thay đổi ).

Cấu trúc Client/Server giải quyết vấn đề này.Trong một cấu trúc 3 tầng (three- tier),các quy luật kinh doanh được đóng gói trong một thành phần tầng trung gian giữa ứng dụng Client và Server cơ sở dữ liệu.

Thiết lập một cấu trúc phần cứng cho DCOM

Có nhiều phương pháp thực hiện cấu trúc phần cứng Client/Server. Chương này chỉ đưa ra cách đơn giản nhất để cung cấp cho bạn giải pháp trong trường hợp thường gặp nhất.

Giả sử rằng có 2 máy, trong đó một máy là WinNT Server chạy MicrosoftSQL Server. Đây là Server. Máy Client là Win95, hoặc Win98, hoăc WinNT.

Có thể bạn không có sẵn các phần mềm và phần cứng mô tả như trên. Nếu không có 2 máy nối mạng, bạn vẫn có thể thực hiện trên cùng một máy. Nếu bạn không có máy WinNT, bạn nên giả lập nó bằng cách dùng cơ sở dữ liệu của MicrosoftJet.Toàn bộ ví dụ trong chương này được viết bằng ADO để phù hợp với điều này.

Nếu không có WinNT Server, ta có thể thiết lập DCOMcho Win95. Tập tin để thực hiện DCOM trên Win95 chứa trên đĩa một của bản Visual Basic Enterprise, trong thư mục ToolsDCOM98.Muốn xem chi tiết, cũng như tải xuống các tập tin DCOM,ta tìm trong trang web http://www.microsoft.com/com/dcom/dcom1_2 / dcom1_2. asp

Ví dụ người sử dụng trên mạng muốn truy cập dữ liệu khách hàng. Để giữ được tính nhất quán, khả năng dùng lại, dễ lập trình và bảo trì, bạn nên truy cập đến cơ sở dữ liệu thông qua thành phần ActiveX. Thành phần này được biên dịch và thiết lập trên mạng sao cho ứng dụng Client có thể truy cập nó từ xa.

Hình sau đây là sơ đồ của cấu trúc 3 tầng tổng quát. Nó kết hợp cấu trúc vật lý (2 máy tính ) và cấu trúc logic ( từng tầng cung cấp các chức năng khác nhau).

Lược đồ của một cấu trúc 3 tầng tổng quát hoà trộn cấu trúc vật lý (2 máy tính) với cấu trúc logic ( mỗi tầng có 1 tính năng khác nhau ).

Ta có thể chia thành phần tầng trung gian qua nhiều máy. Vì vậy, cấu trúc Client / Server 3 tầng khi đó trở thành cấu trúc n tầng.

Đây là ví dụ về cấu trúc Client / Server n tầng trình bày tầng trung gian thể hiện trên một máy.

Ta triển khai các thành phần tầng trung gian trên một máy theo những tình huống sau:

  • Server cơ sở dữ liệu chạy trên hệ điều hành không hỗ trợ ActiveX.
  • Ta muốn giữ gìn năng lực của Server cơ sở dữ liệu.
  • Ta muốn mở rộng khả năng ứng dụng bằng cách triển khai nhiều bản sao của cùng một ActiveX Server đến nhiều hơn một máy.

Bất lợi của việc cung cấp cho thành phần ActiveX một máy tính riêng là cấu hình này đòi hỏi thêm một bước chuyển qua mạng từ Client đến Client và ngược lại. Điều này có thể khiến giảm khả năng hoạt động và tăng lưu lượng trên mạng. Trường hợp này có được chấp nhận hay không tuỳ thuộc chức năng định cấu hình mạng và các prototype ta làm trong giai đoạn thiết kế của đề án.

Thậm chí khi ta không có điều khiển trên hệ điều hành trên đó cơ sở dữ liệu thi hành, ta vẫn có thể sử dụng tầng trung gian - nếu ta triển khai nó đến một máy riêng. Tầng cơ sở dữ liệu là một khối UNIX hay bộ mainframe của công ty. Ứng dụng Client dùng kỹ thuật DCOM vì 2 lý do :

  1. Ứng dụng Client không bao giờ truy cập đến Server cơ sở dữ liệu, thay vào đó, chúng truy cập dữ liệu thông qua thành phần ActiveX.
  2. Đây là lý do quan trọng nhất, DCOM che chắn cho ứng dụng khỏi các phần rắc rối của giao thức qua mạng, các phần mềm nền ( platform),và biên của máy tính.

Triển khai một hệ thống Client / Server trong đó, Server cơ sở dữ liệu không phải Windows thì dễ hơn trong thế giới 3 tầng, bởi vì, ta không cần phải định cấu hình cho middleware( phần mềm tầng giữa- tập hợp các chương trình điều khiển chuyên xử lý việc giao tiếp qua nhiều platform và các giao thức mạng) trên từng máy Client. Với kiểu 3 tầng, ta chỉ phải định cấu hình chương trình này một lần – trong phần cấu trúc giữa tầng giữa và Server cơ sở dữ liệu. Nhờ đó, có thể tiết kiệm thời gian và sơ sót khi ta định cấu hình và triển khai ứng dụng đến nhiều Client.

Dù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 mm Software DevelopmentKit) 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.

Tạ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 CustSrv 2, 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 Jetcục bộ (nativeJetProvider). 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 ).

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.

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 WindowsOptionPack từ web site tại http://www.microsoft.com/windows/dowloads/contents/Updates/NT40ptPK. Lưu ý rằng Option Pack được áp dụng cho Win95, Win98 – khi cài NTOption Pack trên máy không phải NT, ta có PersonalWebServer đối với Win95 và một phiên bản hạn chế của MTS.

Phần này làm việc với MTS 2.0. Chương này chỉ nói về sử dụng MTS với vai trò là một trung gian yêu cầu đối tượng và theo dõi các thành phần phân tán từ xa. Ta không tìm hiểu các tính năng khác của MTS như là cho phép transaction giữa các thành phần, hay là mô hình bảo mật của MTS.

Muốn nghiên cứu thêm MTS vào http://www.microsoft.com/ntServer/basics/appservices/transsvcs/

Triển khai một thành phần từ xa dưới MTS có 3 bước:

  1. Tạo gói MTS để chứa thành phần.
  2. Đặt thành phần vào gói.
  3. Export gói ra từ MTS và cài đặt vào máy Client.

Tạo gói MTS

Gói MTS là một nơi chứa logic cho một hay nhiều mô-dun lớp chứa trong ActiveX DLL.Việc tạo gói cung cấp khả năng quản lý mọi lớp chứa trong gói, thậm chí các lớp của các thành phần khác.

1. Phóng MTS từ menu Start của Windows (Nó tồn tại trong các nhóm lập trình khác nhau tuỳ theo phiên bản và cách cài đặt).

2. MTS xuất hiện trong cửa sổ MicrosoftManagement Console: MMC cung cấp khả năng mở rộng thông qua snap-in. Snap-in là một thành phần phần mềm hoạt động như một phần nối giữa MMC và công cụ của Server. Snap-in được đóng gói như một ActiveX DLL, nhưng ta chưa thể xây dựng snap-in trong Visual Basic. Vì vậy, nếu bạn có một công cụ phần mềm mà bạn muốn quản lý trong MMC, bạn phải chờ đến khi nó hỗ trợ Visual Basic hoặc là bạn viết snap-in trong Visual C++.

3. Trong phần cửa sổ bên trái, mở mục MicrosoftTransactionServer, sau đó mở

Computers,rồi MyComputer. 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 PackagesInstalled.Từ menu bật ra, chọn

Ne w , Package.

6. Trình tự động PackageWizardxuất hiện. Chọn Createanemptypackage.Đặt tên nó là Novelty.

7. Màn hình SetPackageIdentifyxuấ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 : ComponentsRoles. 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 WindowsExplorer 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.

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 ProjectReferences, 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)

3. Nhập đoạn chương trình sau đây:

Private mCust As CCustomer
    Private Sub Form_Load()
    Set mCust = New CCustomer
    End Sub
    Private Sub Form_Unload(Cancel As Integer) Set mCust = Nothing
    End Sub
    

Ứng dụng này không làm gì với thành phần cả, nó chỉ giữ một instance của đối tượng được mở để ta có thể xem xét cách MTS phục vụ các yêu cầu.

4. Thi hành ứng dụng. Nếu ta sắp xếp 2 cửa sổ của ứng dụng và cửa sổ của MTS sát cạnh nhau, ta sẽ thấy quả bóng đang quay, thể hiện nó đang phục vụ các yêu cầu của ứng dụng.

5. Đóng ứng dụng, quả bóng ngừng quay nó không phục vụ nữa.

Trong khi quả bóng đang quay, ta có thể nhấn nút phải chuột lên biểu tượng gói, khám phá cửa sổ Propertiescủa nó. Trong cửa sổ này, chọn tab Advanced,MTS cho phép ta quy định MTS sẽ giữ thành phần nạp vào bộ nhớ trong bao nhiêu phút sau lần truy cập đầu tiên. Giá trị này có thể là 0, nghĩa là thành phần bị xoá khỏi bộ nhớ ngay khi ứng dụng nhả nó ra. Nếu giá trị này là 1440 phút, thành phần được cachevào bộ nhớ trong 24 giờ sau khi Client truy cập lần cuối cùng. Nếu muốn nạp thành phần vào bộ nhớ bất chấp Client có dùng nó hay không, chọn tuỳ chọn “Leaverunningwhen idle.” Nó sẽ tăng khả năng hoạt động và tiêu tốn vùng bộ nhớ trên phía Server.

Export và cài đặt gói MTS trên máy Client

Để cho phép ứng dụng Client truy cập thành phần chạy dưới MTS, ta phải đăng ký vào Registry của máy Client để báo với nó rằng thành phần đang chạy từ xa.

Để Client nhận ra thành MTS phân phát từ xa, ta làm như sau :

  • Export gói :Tạo một tập tin cho phép cài đặt. Tập tin này thi hành mọi hoạt độ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 ExportPackage 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 ExportPackage. 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 ActiveDLLkhỏ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.

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 ActiveXDLL hay ActiveXEXE làm cho lớp dễ dùng hơn, cho phép tạo ra các ứng dụng truy cập cơ sở dữ liệu cực kỳ linh hoạt và mạnh mẽ.

Kỹ thuật này cũng được dùng khi cần tối ưu hoá tốc độ của ứng dụng Client. Tốc độ hoạt động bắt nguồn từ việc ứng dụng Client không phải nạp một bộ máy cơ sở dữ liệu (databaseengine),hoặc những tầng trung gian khác khi chúng khởi động. Nếu ta dùng ADO hay ODBC, ta sẽ có cùng thuận lợi, vì ta không phải phân phát các thư viện này hoặc định lại cấu hình trên máy Client. Nó tiết kiệm đáng kể bộ nhớ và ứng dụng chạy nhanh hơn nhiều.

Một thuận lợi khác của kỹ thuật này là các phần liên quan được phân phát cùng với ứng dụng cũng giảm nhỏ, vì ta không phải nạp các thư viện của bộ máy cơ sở dữ liệu Jet vào từng máy Client.

Thêm vào đó, bằng cách truyền mảng thay vì đối tượng qua mạng, ứng dụng không phải duy trì một kết nối thường xuyên đến Server. Bởi khi truyền đối tượng qua mạng, nó tồn tại trên Server. Tuy nhiên, khi truyền một khối dữ liệu chẳng hạn như một mảng qua mạng, dữ liệu không tồn tại trên Server. Nó hoàn toàn được truyền đến Client, nghĩa là Client không cần nối đến Server để làm việc với dữ liệu. Như vậy, ứng dụng có thể phục vụ nhiều người cùng một lúc, vì chẳng hạn như thay vì có 50 người sử dụng nối đến Server mà không làm gì, ta có 500 người sử dụng chỉ nối đến Server khoảng 10% thời gian.

Sử dụng getrows để trả về dữ liệu mảng

Có thể dùng phương thức GetRows của đối tượng Recordset để trả về dữ liệu từ ActiveX Server đến ứng dụng Client dưới dạng mảng 2 chiều chứa các giá trị kiểu Variant. Kỹ thuật này được ưa thích vì ta không phải triển khai các thư viện bộ máy cơ sở dữ liệu cũng như định cấu hình cho cơ sở dữ liệu phía Client.Client chỉ biết đến các mảng cung cấp bởi ActiveX Server đang được triển khai qua mạng.

  1. Tạo một đối tượng Recordset (thường là kết quả của một yêu cầu từ Client đến thành phần ActiveX triển khai từ xa ).
  2. Nếu đang dùng DAO, ta phải xác định số dòng trong đối tượng recordset. 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
ovelty.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
    ' you move to the end of the recordset rs.MoveLast
    rs.MoveFirst
    GetList = rs.GetRows(rs.RecordCount) 
    End Function
    

Xử lý một lớp xử lý mảng trong ứng dụng Client.

Option Explicit
    ' References CustSrvA.
    Private mCustData As CCustData
    Const FIRSTNAME = 1
    Const LASTNAME = 2
    Private Sub Form_Load()
    Set mCustData = New CCustData
    With cboState
    .AddItem "CA"
    .AddItem "WA"
    .AddItem "NV" End With
    End Sub
    Private Sub cboState_Click() Dim vData As Variant
    Dim x As Long
    vData = mCustData.GetList(cboState.Text)
    lstCustomer.Clear
    For x = 0 To UBound(vData, 2)
    lstCustomer.AddItem vData(FIRSTNAME, x) & _
    " " & vData(LASTNAME, x)
    Next x
    End Sub
    Private Sub Form_Unload(Cancel As Integer) Set mCustData = Nothing
    End Sub
    

Bất lợi của kỹ thuật này là ta phải viết khá nhiều chương trình để xử lý mảng Variant trả về từ thành phần ActiveX trên phía Client. Một giải pháp cho vấn đề này là viết một thành phần ActiveX phía Client để xử lý với mảng.

Để thêm một phương thức trả về dữ liệu cho một khách hàng dùng mảng Variant,ta dùng phương thức GetData:

Public Function GetData(lngID As Long) As Variant
    Dim strSQL As String
    strSQL = "SELECT * FROM tblCustomer " & _ "WHERE ID= " & lgnID
    Set rs = db.OpenRecordset(strSQL) GetData = rs.GetRows
    rs.Close
    Set rs = Nothing
    End Function
    

Tạo một lớp để giải mã mảng variant

Khi trả về mảng Variant ta sẽ gặp một khó khăn. Làm sao xác định cột nào của mảng ứng dụng với trường nào trong cơ sở dữ liệu ? Quan trọng hơn, làm sao áp dụng kỹ thuật OOP để có thể dùng lại sau này ?

Một giải pháp là triển khai một thành phần ActiveX thứ hai, lần này trên Client, để giải mã mảng Variant được phục vụ bởi tầng trung gian. Thành phần này sẽ làm 2 việc : gọi CCustData và trả về đối tượng cấu tạo từ những dữ liệu trong mảng Variant được truyền về từ tầng trung gian.

CCustData thực hiện như một phần ứng dụng Client. Nó không tham chiếu đến bất kỳ cơ sở dữ liệu nào và tồn tại độc lập nhằm trả về mảng Variant từ CCustData và gán cho các thuộc tính của đối tượng Customer.

Ưu điểm của kỹ thuật này là ứng dụng Client xử lý riêng với đối tượng Customer. Không có truy cập cơ sở dữ liệu trực tiếp trên Client, lập trình viên phía Client không cần bận tâm loại cơ sở dữ liệu.

Sau khi có lớp CCustData thi hành truy cập dữ liệu và lớp CCustomer chuyển đổi mảng dữ liệu thành đối tượng, ta viết chương trình để trả về đối tượng Customer. Khi chạy chương trình, người sử dụng chọn một Tiểu bang để xem xét các khách hàng đang cư ngụ ở đó. Khi người sử dụng chọn một khách hàng, thông tin chi tiết về người đó xuất hiện.

Kết hợp kỹ thuật này với kỹ thuật ActiveX / DCOM, mang lại những điểm lợi đáng kể. Bằng cách biên dịch lớp CCustData thành một thành phần ActiveX và triển khai nó trên mạng, ta đã cho phép truy cập các quy tắc kinh doanh lưu trữ tập trung từ mọi nơi trên mạng. Và bởi vì thành phần này truyền dữ liệu đến Client qua DCOM trong mảng, ta không cần triển khai một thư viện truy cập dữ liệu vào từng máy Client. nó giúp cho chương trình trên Client chạy nhanh hơn, dễ định cấu hình và dễ quản lý hơn.

Trái lại, nêu không triển khai truy cập dữ liệu qua mạng, ta sẽ không đạt được những kết quả này.

Truyền dữ liệu với bản sao cơ sở dữ liệu

Khi cơ sở dữ liệu được tập trung hóa, toàn bộ dữ liệu chứa hết vào một nơi và cho phép truy cập đến nó từ mọi nơi trong mạng. Tuy nhiên, sẽ rất khó khăn nếu ta di chuyển hay sửa đổi cơ sở dữ liệu để không ảnh hưởng đến Client đang kết nối.

Để giải quyết vấn đề này, Microsoft Jet cung cấp khả năng sao chụp một cơ sở dữ liệu từ máy này sang máy khác gọi là Replication.Thay vì cho chụp toàn bộ cơ sở dữ liệu ( ta có thể thực hiện bằng cách đơn giản nhất là copy tập tin cơ sở dữ liệu ), kỹ thuật sao chụp này có logic khác hơn. Jet sẽ thi hành đồng bộ hoá trên cơ sở dữ liệu (synchronization)-so sánh từng mẩu tin để đảm bảo rằng chúng có cùng dữ liệu, sau đó, copy những thay đổi từ cơ sở dữ liệu gốc sang một số tuỳ ý các cơ sở dữ liệu bản sao.

Cơ sở dữ liệu gốc còn được xem là thiết kế gốc, bởi vì nó chứa thiết kế của cơ sở dữ liệu dùng làm nơi chứa tập trung cho các dữ liệu dùng chung. Trong một hệ thống sao chụp, những thay đổi trên thiết kế của cơ sở dữ liệu i như là thêm hoặc xoá trường, bảng và các định nghĩa truy vấn chỉ có thể thực hiện trong thiết kế gốc. Tuy nhiên, khi có sửa đổi trên đối tượng của cơ sở dữ liệu chứa trong thiết kế gốc, những thay đổi này sẽ được phân phát đến các bản sao tại thời điểm cơ sở dữ liệu được đồng bộ hoá. Đây là cách duy nhất để sửa đổi trên một cơ sở dữ liệu bản sao.

Ví dụ, là người sử dụng của một ứng dụng cơ sở dữ liệu, bạn muốn làm việc ở nhà, nhưng ứng dụng cơ sở dữ liệu chứa trên server của cơ quan. Replication cho phép “lấy ra” bản sao của cơ sở dữ liệu bằng cách nạp nó trên máy tính xách tay chẳng hạn. Nhờ đó, bạn có thể làm việc ở nhà. Bản cơ sở dữ liệu chứa trong máy tính xách tay chính là một bản sao cơ sở dữ liệu.

Khi quay lại cơ quan, bạn đăng ký lại cơ sở dữ liệu. Lúc đó, cơ chế replication của Jet so sánh các mẩu tin trong bản sao với các mẩu tin trong cơ sở dữ liệu gốc. Nếu có thêm mẩu tin mới, chúng sẽ được copy đến hệ thống chính; nếu có sửa đổi trên các mẩu tin, những sửa đổi này cũng được cập nhật vào hệ thống chính. Tương tự, nếu có dữ liệu mới xuất hiện trong bản gốc, nó sẽ được copy vào bản sao cùng lúc đó.

Trong trường hợp cơ sở dữ liệu quá lớn, khoảng 200 MB chẳng hạn, việc tạo ra bản dự phòng cho nó là điều hết sức phiền phức; ta phải tốn khá nhiều thời gian chết để copy dữ liệu qua mạng. Trong thời gian đó, những người sử dụng khác cũng bị cấm truy cập cơ sở dữ liệu để bảo đảm dữ liệu không thay đổi.

Replication giải quyết vấn đề này bằng cách cho phép chỉ copy những tập tin mới hoặc có sửa đổi kể từ lần tạo bản dự phòng mới nhất. Do đó, ta không phải tạo bản dự phòng cho toàn bộ cơ sở dữ liệu.

Ta còn có thể dùng Replication để tiến hành cập nhật ứng dụng cơ sở dữ liệu. Nó được dùng trong trường hợp một số logic của ứng dụng được nhúng trong cơ sở dữ liệu dưới dạng câu truy vấn. Nếu cần thay đổi câu truy vấn để phản ánh một thay đổi trong ứng dụng hoặc thay đổi trong thực tế kinh doanh, replication có thể chuyển một cách tự động các sửa đổi cho các Client có yêu cầu.

Thiết kế cơ sở dữ liệu có sử dụng replication

Cũng như với những cơ sở dữ liệu nhiều người sử dụng, khi thiết kế cơ sở dữ liệu có dùng replicaton, cần phải dự kiến trước để mọi chuyện tiến hành suôn sẻ. Một trong những vấn đề quan trọng cần xem xét là khoá chính trong bảng. Nhất là khoá chính là một trường đánh số tự động. Bởi mặc định, trường này bắt đầu từ 1 và tăng dần lên cho từng mẩu tin, mỗi mẩu tin tăng thêm 1. Vì vậy, nếu một người sử dụng noà đó đưa thêm các mẩu tin trong bản sao cơ sở dữ liệu, và sau đó đồng bộ hoá dữ liệu về cơ sở dữ liệu gốc; sẽ xảy ra trường hợp hai hay nhiều người sử dụng đưa vào mẩu tin có ID là 1. Để tránh điều này, ta nên thiết kế trường khoá chính cho cơ sở dữ liệu theo một trong những kỹ thuật sau :

  • Quy định thuộc tính New Values của trường AutoNumber là ngẫu nhiên (Random).
  • Quy định thuộc tính Field Size của trường AutoNumber là Replication ID.

Replication còn có thể thêm trường cho từng bảng trong hệ thống, điều này có thể gây ra vấn đề nếu ta viết chương trình (hoặc phát triển giao diện người sử dụng ) dựa trên tập hợp gồm một số trường. Bài học rút ra là ta nên tạo khả năng replication cho cơ sở dữ liệu càng sớm càng tốt trong quy trình xây dựng chương trình, để tránh rắc rối kể trên.

Thực hiện replication với microsoft access

Để bắt đầu với hệ cơ sở dữ liệu hỗ trợ sao chụp, trước hết, ta phải xác định cơ sở dữ liệu sẽ được đồng bộ hoá như thế nào và cơ sở dữ liệu gốc sẽ chứa ở đâu. Những vấn đề đặc biệt liên quan đến cách thức để những người sử dụng ở xa có thể nối mạng đến thiết kế gốc ( qua mạng WAN, qua mạng điện thoại, thậm chí qua Internet). Điều quan trọng là có kế hoạch trước trong nỗ lực duy trì khả năng truy cập đến những phiên bản mới nhất cho hầu hết ( nếu không phải tất cả ) người sử dụng.

Sau khi có kế hoạch về cấu trúc của hệ cơ sở dữ liệu hỗ trợ sao chụp, ta bắt tay vào thiết lập cấu trúc đó, gồm các bước sau:

  1. Tạo một cơ sở dữ liệu (hoặc dùng cơ sở dữ liệu hiện hành )
  2. Chọn cơ sở dữ liệu làm Bản thiết kế gốc.
  3. Tạo một hay nhiều bản sao từ Bản thiết kế gốc.

Ta có thể dùng Microsoft Access hoặc lập trình để tiến hành thiết lập replication, thông qua DAO (Đối tượng truy cập dữ liệu – DataAccess Object).

Dùng Microsoft Access để tạo Bản thiết kế gốc và bản sao

Trong khi ta có thể tiến hành Replication dùng chương trình của DAO, Microsoft Access là cách dễ hơn để bắt đầu Replication. Bởi vì Access có các lệnh menu quản lý việc tạo các Bản thiết kế gốc và bản sao cơ sở dữ liệu tự động.

Để tạo một Bản thiết kế gốc dùng Microsoft Access, ta cần cài đặt tính năng gọi là Sao chụp cặp đựng tài liệu-Briefcase Replication. Đây là tuỳ chọn lúc ta cài đặt Access; còn nếu chưa có sẵn, Access sẽ thông báo những gì cần làm khi ta tạo Bản thiết kế gốc,gồm các bước sau :

  1. Chắc chắn rằng cần phải tạo bản sao dự phòng (backup) cơ sở dữ liệu mà không bàn cãi. Ví dụ, nếu ta đang làm việc với cơ sở dữ liệu tên là novelty.mdb, ta có thể đặt tên nó là nmaster.mdb.
  2. Mở cơ sở dữ liệu trong Microsoft Access
  3. Từ menu Tools, chọn Replication.Chọn CreateReplica từ menu con.
  4. Access phát ra một cảnh báo rằng cơ sở dữ liệu cần được đóng trước khi tạo bản sao từ đó. Nó hỏi có muốn đóng cơ sở dữ liệu và chuyển đổi nó thành Bản thiết kế gốchay không. Chọn Yes.
  5. Cơ sở dữ liệu đóng. Kế tiếp, Access cảnh báo nên tạo một bản sao dự phòng cho cơ sở dữ liệu và hỏi có muốn thực hiện điều này trước khi tiến hành quy trình sao chụp không. Chọn Yes.
  6. Access chuyển đổi cơ sở dữ liệu thành Bản thiết kế gốc và tạo một bản sao từ đó, nó yêu cầu ta đặt tên cho bản sao cơ sở dữ liệu. Nếu ta đang dùng cơ sở dữ liệu Novelty, ta có thể đặt tên cho bản sao là nreplica.mdb.
  7. Khi việc sao chụp thành công, Access hiển thị một thông báo giải thích những gì đã thực hiện.

Thêm các đối tượng hỗ trợ sao chụp vào cơ sở dữ liệu trong Microsoft Access

Ban đầu, khi thêm một đối tượng mới (như một bảng hoặc truy vấn) vào cơ sở dữ liệu Bản thiết kế gốc, bởi mặc định, nó không được sao chụp. Trong Microsoft Access, điều này là hiển nhiên bởi vì các loại đối tượng cơ sở dữ liệu khác nhau (hỗ trợ sao chụp và không sao chụp) có các biểu tượng khác nhau trong cửa sổ Database của Access.

Muốn biến một đối tượng cơ sở dữ liệu mới thành đối tượng dữ liệu hỗ trợ sao chụp ta làm như sau:

  1. Trong cửa sổ Database, nhấn nút phải chuột trên đối tượng cơ sở dữ liệu mà ta muốn thay đổi trạng thái sao chụp của nó.
  2. Từ menu bật ra, chọn Properties.
  3. Hộp thoại DatabaseObjectProperties xuất hiện.
  4. Chọn vào hộp đánh dấu Replicable, nhấn OK. Biểu tượng của đối tượng cơ sở dữ liệu thay đổi phản ánh trạng thái mới của nó là một đối tượng hỗ trợ sao chụp. Sau này, khi tiến hành đồng bộ hoá cơ sở dữ liệu, đối tượng cơ sở dữ liệu mới được copy vào bản sao cơ sở dữ liệu.

Với kỹ thuật này, ta có thể thay đổi trạng thái sao chụp của một đối tượng cơ sở dữ liệu bất kỳ tại một thời điểm bất kỳ. Để biến đối tượng thành cấm sao chụp, đơn giản ta chỉ cần bỏ chọn trong hộp đánh dấu replicable trong hộp thoại Database ObjectProperties.Tuy nhiên, lưu ý rằng, khi ta chuyển một đối tượng cơ sở dữ liệu đặc biệt thành cấm sao chụp, những đối tượng được copy trước đó vào một bản sao cơ sở dữ liệu sẽ bị xoá khi tiến hành đồng bộ hoá.

Tiến hành đồng bộ hoá (Synchronization) với Microsoft Access

Sau khi tạo cơ sở dữ liệu hỗ trợ sao chụp trong Microsoft Access, ta có thể kiểm nghiệm nó. Cách đơn giản nhất là đưa vào một mẩu tin trong Bản thiết kế gốc, sau đó đồng bộ hoá cơ sở dữ liệu. Khi đó, mẩu tin mới được copy vào bản sao :

1. Mở cơ sở dữ liệu Bản thiết kế gốc và đưa một mẩu tin vào một trong những bảng. Nếu ta dùng Replication ID làm kiểm dữ liệu của khoá chính, ta nên chú ý rằng ID sẽ được phát sinh tự động (AutoNumber) khi nhập mẩu tin.

2. Đóng bảng. Đối tượng cơ sở dữ liệu phải được đóng để tiến hành đồng bộ h (synchronization).

3. Từ menu Tools của Microsoft Access, chọn Replication. Chọn Synchronize từ menu con.

4. Hộp thoại SynchronizeDatabase xuất hiện, hiển thị tên của cơ sở dữ liệu bản sao.

Synchronization Database cho phép ta chọn một bản sao hiện hành hoặc chọn từ danh sách các bản sao (dùng danh sách thả xuống của hộp kết hợp). Vì ở đây ta chỉ mới tạo một bản sao, nên ta có thể chấp nhận tên tập tin đề nghị và nhấn OK.

5. Sau một thoáng dừng, Access thông báo rằng đồng bộ hoá đã hoàn tất. nó cũng hỏi ta muốn đóng hay mở lại cơ sở dữ liệu hiện hành để bảo đảm rằng tất cả dữ liệu được đồng bộ hoá đều được hiển thị. Ở đây, bước thực hiện này không cần thiết vì không có dữ liệu mới được copy từ bản sao vào Bản thiết kế gốc.

6. Để xác nhận rằng mẩu tin mới đã được truyền từ Bản thiết kế gốc vào bản sao, đóng cơ sở dữ liệu Bản thiết kế gốc và mở bản sao. Ta sẽ thấy rằng dữ liệu đưa vào Bản thiết kế gốc đã được copy vào bản sao.

Ta có thể đảo ngược lại quá trình với việc thêm, sửa ở bản sao và đồng bộ hoá lại với bản gốc.

Tiến hành replication với DAO

Trong Visual Basic, ta có thể điều khiển cách thức sao chụp cơ sở dữ liệu dùng DAO(Đối tượng truy cập dữ liệu Data AccessObject s). DAO là một kỹ thuật hướng đối tượng cho phép truy cập cơ sở dữ liệu. Khi ta dùng DAO để điều khiển Replication, ta sẽ tăng cường khả năng để kiểm soát cách thức thiết lập cơ sở dữ liệu hỗ trợ sao chụp, định cấu hình và đồng bộ hoá bằng chương trình. Sau đây là các đối tượng DAO chứa những thuộc tính hỗ trợ Replication:

Chức năngReplication Đối tượng Mô tả
Thuộc tínhKeepLocal TableDef QueryDef(cũng như các đối tượng Microsoft Access khác như là biểu mẫu và báo cáo) Xác định đối tượng có được tạo đểhỗ trợ sao chup hay không
Thuộc tínhReplicable Đối tượng Database,TableDef QueryDef( cũng như các đối tượng cơ sở dữ liệu Access như báo cáo và mô-dun chương trình ). Xác định đối tượng ( và choTableDefs, dữ liệu mà nó chứa) có được sao chụp vào lúc đồng bộ hoá hay không.
Phương thứcMakeReplica Database Tạo một bản sao từ Bản thiết kếgốc.
Phương thứcSynchronize Database Đồngbộhoámột bản sao cơ sở dữliệu với Bản thiết kế gốc.
Thuộc tínhReplicaFilter T ab l eDef Cho phép cung cấp một mệnh đềWHERE trong câu SQL để kiểm soát các mẩu tin trong bảng được sao chụp ( thuộc tính này hỗ trợ Sao chụpmộtphần ).
Thuộc tínhPartialReplica Rel a tion Đối với Sao chụp một phần, nócho phép ta xác định những quan
hệ nào kiểm soát việc sao chụp mẩu tin.
Thuộc tínhReplicableBool Database Tương đương với thuộc tínhReplicable, nhưng dễ cài hơn.

Thiết lập Replication với DAO

Để bắt đầu dùng Replication với lập trình DAO, ta phải cho phép cơ sở dữ liệu hỗ trợ Replication. Để thực hiện điều này, thêm một thuộc tính động vào đối tượng Database thể hiện cơ sở dữ liệu. Khái niệm thuộc tính động chủ yếu để hiểu cách thực hiện Replication với DAO; các thuộc tính hiệu chỉnh cho phép mở rộng mô hình đối tượng của DAO.

Các thuộc tính động của cơ sở dữ liệu Jet được giới thiệu trong chương 13 “Đối tượng truy cập dữ liệu ”. Dùng DAO, ta có thể lập trình để xác định các thuộc tính của một đối tượng cơ sở dữ liệu đặc biệt. Ví dụ sau đây trình bày liệt kê tất cả các thuộc tính của một bảng trong Bản thiết kế gốc.

Option Explicit
    ' References DAO 3.51. Dim db As Database
    Dim pr As Property
    Dim td As TableDef
    Public Sub ListProps()
    Set db = OpenDatabase("....DB
master.mdb") Set td = db.TableDefs("tblCustomer")
    For Each pr In td.Properties
    Debug.Print pr.Name
    Next
    End Sub
    

Biến một cơ sở dữ liệu thành cơ sở dữ liệu hỗ trợ sao chụp bằng cách tạo một thuộc tính Replicable,sau đó quy định giá trị cho nó là chuỗi “T”. Biến một cơ sở dữ liệu thành cơ sở dữ liệu hỗ trợ sao chụp sẽ chuyển đổi nó thành Bản thiết kế gốc; điều này khác với khi tạo các đối tượng riêng rẽ ở trong cơ sở dữ liệu hỗ trợ sao chụp. Làm việc với DAO khác với khi ta làm việc với Microsoft Access, bởi vì tự Access đã thực hiện việc sao chụp bên trong. Khi ta yêu cầu Access tạo một bản sao, nó tự làm thêm việc chuyển cơ sở dữ liệu thành cơ sở dữ liệu hỗ trợ sao chụp trên đối tượng cơ sở dữ liệu mà ta chọn.

Dùng chương trình viết với DAO để biến cơ sở dữ liệu thành cơ sở dữ liệu hỗ trợ sao chụp :

Option Explicit
    ' References DAO 3.51. Dim db As Database
    Dim pr As Property
    Dim td As TableDef
    Const DBPath = "....DB
ovelty.mdb"
    Const MasterDBPath = "....DB
master.mdb" Const ReplicaDBPath = "....DB
replica.mdb" Private Sub cmdMakeDBRep_Click()
    On Error GoTo ErrHandler
    ' The "True" parameter in the OpenDatabase method
    ' tells Jet to open the database for exclusive
    ' access, which is required for creating properties. FileCopy DBPath, MasterDBPath
    Set db = OpenDatabase(MasterDBPath, True)
    With db
    Set pr =.CreateProperty("Replicable", dbText, "T")
    .Properties.Append pr
    .Properties("Replicable") = "T" End With
    MsgBox "The database has been copied to " & _
    db.Name & _
    " and its Replicable property is now " & _
    db.Properties("Replicable").Value
    db.Close
    Set db = Nothing' Release exclusive lock on db.
    Exit Sub
    ErrHandler:
    Select Case Err.Number
    Case 3367' Replicable property already exists
    Exit Sub' So ignore the error and exit
    Case Else' Something unforseen happened
    MsgBox "Error: " & Err & " - " & Error
    End Select
    End Sub
    
Đoạn chương trình này sẽ chạy được dù cho cơ sở dữ liệu hiện hành có thuộc tính động Replicable hay không. Nếu cơ sở dữ liệu hiện hành có thuộc tính Replicable, chương trình sẽ không tạo ra thuộc tính này nữa.

Tuy nhiên, có một rắc rối khi tạo một thuộc tính Replicable cho một cơ sở dữ liệu

– Sau khi tạo ra, ta không thể loại bỏ nó. Thử dùng đoạn chương trình sau để loại bỏ :

db.Properties.Delete “Replicable”

Nhưng không thực hiện được. Đoạn chương trình phát ra báo lỗi số 3607, thông báo rằng đây là thuộc tính chỉ đọc và không thể loại bỏ. Vì vậy, như đã cảnh báo ở phần trước, việc tạo bản dự phòng cho cơ sở dữ liệu là điều đặc biệt quan trọng khi ta thao tác với DAO để thực hiện Replication.

Tạo đối tượng trong cơ sở dữ liệu hỗ trợ sao chụp

Sau khi tạo cơ sở dữ liệu hỗ trợ sao chụp, ta phải tạo các đối tượng riêng rẽ (như bảng) trong cơ sở dữ liệu này. Thực hiện điều này bằng cách tạo đối tượng Replicable cho chúng, tương tự như khi ta thực hiện với cơ sở dữ liệu. Các đối tượng cơ sở dữ liệu có thuộc tính Replicable là “T” sẽ được sao chụp đồng bộ hoá.

Để thực hiện điều này, ta dùng đoạn chương trình sau đây. Giả sử rằng đây là cơ sở dữ liệu hỗ trợ sao chụp; ta lấy một bảng hiện hành trong cơ sở dữ liệu và biến nó thành bảng hỗ trợ sao chụp.

Private Sub cmdMakeTable_Click() On Error GoTo ErrHandler
    Set db = OpenDatabase(MasterDBPath, True) Set td = db.TableDefs("tblCustomer") td.Properties("Replicable") = "T"
    On Error GoTo 0
    MsgBox "The Replicable property of " & _
    td.Name & _
    " has been set to " & _
    td.Properties("Replicable")
    Set db = Nothing' Release exclusive lock on DB Exit Sub
    ErrHandler:
    If Err.Number = 3270 Then
    Set pr = td.CreateProperty("Replicable", dbText, "T")
    td.Properties.Append pr
    Else
    MsgBox "Error " & Err & " - " & Error
    End If
    End Sub
    

Đoạn chương trình này tương tự đoạn chương trình thiết lập thuộc tính Replicable của cơ sở dữ liệu. Ở đây, bẫy lỗi đảmnhiệm tình huống thuộc tính Replicablechưa được tạo cho đối tượng. Đoạn chương trình bẫy lỗi để xác định thuộc tính Replicable của đối tượng cơ sở dữ liệu có tồn tại không; nếu chưa có, nó tạo ra thuộc tính đó và quy định thuộc tính hiệu chỉnh là chuỗi “T”. Giá trị “T” làm cho đối tượng ( và các dữ liệu chứa bên trong nó ) được copy vào bản sao cơ sở dữ liệu vào lúc đồng bộ hoá.

Giá trị “T” của thuộc tính Replicable của đối tượng cơ sở dữ liệu tự động đổi thuộc tính KeepLocal thành “F”.

Dùng thuộc tính ReplicableBool để biến đối tượng thành đối tượng hỗ trợ sao chụp

Chú ý rằng các thuộc tính hiệu chỉnh ta dùng đến giờ đều có giá trị là ký tự - ký tự T hay F thể hiện giá trị Boolean là True hay False.Bởi vì khi chúng được giới thiệu cho Jet, các thuộc tính cơ sở dữ liệu hiệu chỉnh chỉ có thể chứa giá trị là ký tự. Trong Jet 3.51, các thuộc tính hiệu chỉnh có thể chứa một tập hợp rất phong phú gồm nhiều kiểu dữ liệu. Nhờ đó, nó giúp ta tạo các thuộc tính gắn liền với Replication trong DAO một cách dễ dàng hơn nếu như ta thích dùng True /Falsethay vì T / F.

Nếu muốn thuộc tính Replicable của đối tượng cơ sở dữ liệu dùng giá trị Boolean, ta tạo và định thuộc tính ReplicableBool thay vì Replicable.ReplicatonBool dùng giá trị Boolean, thay vì chuỗi ký tự.

Private Sub cmdMakeTableBool_Click() On Error GoTo ErrHandler
    Set db = OpenDatabase(MasterDBPath, True) Set td = db.TableDefs("tblCustomer") td.Properties("ReplicableBool") = True
    On Error GoTo 0
    MsgBox "The Replicable property of " & _
    td.Name & _
    " has been set to " & _
    td.Properties("Replicable")
    Set db = Nothing' Release exclusive lock on DB Exit Sub
    ErrHandler:
    If Err.Number = 3270 Then
    Set pr = td.CreateProperty("ReplicableBool", dbBoolean, True)
    td.Properties.Append pr
    Else
    MsgBox "Error " & Err & " - " & Error
    End If
    End Sub
    

Khi tạo và dùng thuộc tính ReplicableBool, thuộc tính Replicable cũng trở thành có sẵn, và 2 thuộc tính trả về cùng giá trị, nghĩa là nếu ta quy định ReplicableBoolTrue, thì đọc thuộc tính Replicable,ta thấy nó là “T”.

Lập trình với DAO để tạo một cơ sở dữ liệu bản sao

Tạo một cơ sở dữ liệu bản sao từ Bản thiết kế gốc bằng cách thi hành phương thức MakeReplica của đối tượng Database.

Cú pháp :

db.MakeReplica <tên tập tin>,[<mô tả>],             
0