Borland Delphi и расширения ADO
Страница 4. Использование Jet and Replication Objects


 

Использование Jet and Replication Objects

 

Следующее расширение ADO, которое мы рассматриваем в данной статье, — Jet and Replication Objects (JRO). В отличие от других расширений ADO (ADOX и ADO MD), которые способны работать с различными источниками данных, объекты JRO были созданы специально для поддержки некоторых операций, характерных для репликации баз данных Jet. Это означает, что такие объекты могут быть использованы только с базами данных Microsoft Access.

Введение в JRO

 

Как и другие расширения ADO, JRO обладает объектной моделью, содержащей объекты, позволяющие создавать, модифицировать и синхронизовать реплики. Реплика — это точная копия базы данных или ее части, сделанная в определенный момент времени. А репликация — процесс создания реплик по определенным критериям (тип объектов, периодичность и т.п.).

Главным объектом JRO является объект Replica . Этот объект может быть использован для создания новых реплик, проверки свойств существующих реплик и синхронизации изменений с другими репликами.

Кроме того, объектная модель JRO включает объект JetEngine, экспонирующий некоторые особенности Microsoft Jet Engine. В частности, объект JetEngine может быть использован для сжатия базы данных, установки пароля, шифрования базы данных, обновления данных из кэша. Эти объекты образуют иерархию, показанную на рис. 2.

 

Репликация баз данных Jet может быть предметом отдельной статьи, и мы не будем рассматривать этот вопрос подробно. Вместо этого мы кратко перечислим шаги, которые следует выполнить:

  1. Первый шаг в репликации заключается в создании источника реплик (design master) и в том, чтобы сделать этот источник способным к репликации. Для этой цели используются объект Replica и его метод MakeReplicable.
  2. Далее следует изменить статус объектов базы данных с точки зрения того, доступны ли они для репликации. Для этого используются методы GetObject Replicability и SetObjectReplicabilty объекта Replica.
  3. Затем, в зависимости от задачи, мы должны создать частичную или полную реплику объектов, которые доступны для репликации в источнике реплик. Для этого следует определить некоторые правила обновления данных с помощью объекта Filter.
  4. И, наконец, мы должны синхронизовать данные в двух репликах. Синхронизация может быть прямой или непрямой, а также осуществляться через Интернет. В последнем случае нам требуется программный компонент Replication Manager, входящий в состав Microsoft Office Developer Edition.

Чтобы использовать библиотеку JRO в приложениях Delphi, нужно открыть новый проект, выбрать из главного меню среды разработки пункт Project | Import Type Library, в диалоговой панели Import Type выбрать Microsoft Jet and Replication Objects 2.1 Library (Version 2.1) и нажать кнопку Install. Это приведет к созданию модуля JRO_TLB , который может быть включен в код для доступа к объектам JRO.

Использование объекта JetEngine

 

Как мы уже знаем, объект JetEngine может быть использован для сжатия баз данных и обновления данных из кэша. Следующий пример показывает, как сжать базу данных Northwind.mdb в каталоге c:\data\ и создать новую сжатую копию Newnorth.mdb в каталоге d:\data\.

 const
 Provider = 'Provider=Microsoft.Jet.OLEDB.4.0;';
 SrcMDB    = 'c:\data\northwind.mdb';
 DstMDB    = 'd:\data\newnorth.mdb';
procedure TForm1.Button1Click(Sender: TObject);
var
 JetEng : JetEngine;
 Src      : WideString;
 Dest    : WideString;
begin
// Создать экземпляр объекта JetEngine
 JetEng := CoJetEngine.Create;
// Определить источник
 Src      := Provider + 'Data Source=' + SrcMDB;
// и место назначения
 Dest    := Provider + 'Data Source=' + DstMDB;
// Проверить, есть ли файл с копией, и если есть, то удалить его
If FileExists(DstMDB) Then DeleteFile(DstMDB);
// Сжать базу данных
 JetEng.CompactDatabase(Src, Dest);
// Уничтожить созданный экземпляр объекта JetEngine
 JetEng := Nil;
end;

Не углубляясь в подробности функционирования Microsoft Jet Engine, отметим, что при сжатии базы данных происходит следующее:

  1. реорганизуется расположение табличных данных на страницах — после сжатия таблица располагается на соседних страницах. Это повышает производительность, так как таблицы теперь дефрагментированы;
  2. объекты и записи, помеченные как удаленные, реально удаляются, что позволяет высвободить дополнительное пространство;
  3. текущие значения счетчиков, связанных с полями типа AutoNumber, переопределяются, поэтому следующее значение для такого поля будет на единицу превышать максимальное имеющееся значение;
  4. обновляются сведения о таблицах, используемые для оптимизации запросов;
  5. поскольку сведения о базе данных изменились, все запросы будут заново скомпилированы в момент первого обращения.

Рассмотрев ADO Extension for DDL and Security (ADOX) и Jet and Replication Objects (JRO), мы переходим к последнему расширению ADO — ADO Multidimensional (ADO MD) , используемому для доступа к многомерным хранилищам данных.

 
« Предыдущая статья   Следующая статья »