Cтраница 3
Впрочем, сохранение наборов данных на диске может использоваться не только в приложениях, предполагающих воссоединение с сервером баз данных. Так как клиентские наборы данных взаимодействуют с другими элементами приложения одинаково, независимо от того, получают ли они пакеты данных от компонентов-провайдеров или загружают их из локальных файлов, вы можете построить приложение, имеющее архитектуру, подобную архитектуре приложений БД, но работающее исключительно с локальными файлами. [31]
Впрочем, сохранение наборов данных на диске может использоваться не только в приложениях, предполагающих воссоединение с сервером баз данных. Так как клиентские наборы данных взаимодействуют с другими элементами приложения одинаково, независимо от того, получают ли они пакеты данных от компонентов-провайдеров или загружают их из локальных файлов, вы можете построить приложение, имеющее архитектуру, подобную архитектуре приложений БД, но работающее исключительно с локальными файлами. [32]
Если вы хотите разработать в среде Delphi простейшее приложение для работы с базой данных, самый простой способ основан на использовании компонента ClientDataSet, который отображается на содержимое локального файла. В рамках этого подхода способ отображения отличается от традиционного способа отображения данных на локальный файл. В рамках традиционного способа данные читаются из локального файла по одной записи, возможно, при этом используется второй файл, в котором хранятся индексы. Когда программа начинает работу, весь файл загружается в память, после выполнения обработки данные записываются в файл целиком. [33]
Поддерживается также метод MergeChangesLog, при обращении к которому все хранящиеся в журнале изменения вносятся в набор данных, после чего журнал изменений очищается. Эта процедура полезна в случае, если вы хотите хранить журнал изменений только в течение одного рабочего сеанса. При обращении к методу MergeChangesLog изменения заносятся в набор данных, затем набор данных сохраняется в локальном файле. В противном случае изменения будут сохранены в локальном файле наряду с изначальным набором данных. [34]
Если в качестве места основного расположения используется файл автономного расположения, то у вас все еще остается возможность создания и использования любого числа файлов личных папок. Так необходимо поступить, если вы хотите сохранить сетевое окружение или уменьшить время синхронизации благодаря архивации сообщений в локальном файле. [35]
Они, как и внешние файлы, могут быть описаны на любом уровне процедуры. Системные блоки управления файлами размещаются в стеке при активизации процедуры, содержащей описание файлов. Буферы размещаются в стеке по первой операции RESET или REWRITE. Размещение локальных файлов должно производиться на томе прямого доступа. [36]
Клиентские наборы данных отличаются не только возможностью быстрой навигации по записям таблицы. Важной их особенностью является также возможность сохранять наборы данных в файле на диске. Эта возможность позволяет приложениям, использующим клиентские наборы данных, работать в автономном режиме в случае отсутствия связи с сервером баз данных. При сохранении набора данных в локальном файле запоминается не только набор записей Data, но и набор Delta, что позволяет позднее, при подключении к серверу, внести в базу данных изменения, сделанные при работе в автономном режиме. [37]
Поддерживается также метод MergeChangesLog, при обращении к которому все хранящиеся в журнале изменения вносятся в набор данных, после чего журнал изменений очищается. Эта процедура полезна в случае, если вы хотите хранить журнал изменений только в течение одного рабочего сеанса. При обращении к методу MergeChangesLog изменения заносятся в набор данных, затем набор данных сохраняется в локальном файле. В противном случае изменения будут сохранены в локальном файле наряду с изначальным набором данных. [38]
Приложение должно автоматически определять, работает ли оно автономно или существует возможность подключения к сети. Если приложение работает в автономном режиме, вместо того чтобы подключаться к базе данных, оно Должно извлечь данные из локального файла при помощи метода LoadFromFile. Когда требуется опубликовать данные в базе, вместо метода UpdateBatches приложение Должно обращаться к методу SaveToFile для каждой из таблиц. Если возможна связь с базой данных через сеть, необходимо присвоить значение True свойству Connected Компонента ADOConnection, а также свойству Active каждого из компонентов ADO-DataSet. Когда пользователь возвращается из путешествия, он должен внести ин - IФормацию о сделанных им изменениях в базу данных. [39]
Представьте себе, что вы разработали клиент-серверное приложение, которое обеспечивает доступ к серверу базы данных и полностью удовлетворяет запросам пользователя. Теперь пользователь требует, чтобы вы обеспечили работу этого приложения в автономном режиме, то есть даже тогда, когда нет возможности подключиться к серверу БД. Для этого вы должны добавить в приложение возможность сохранения данных на пользовательском локальном жестком диске. Иными словами, прежде чем пускаться в путешествие, пользователь должен отдать команду подготовки приложения к работе в автономном режиме. По этой команде каждая таблица сохраняется в локальном файле при помощи метода SaveToFile. В результате на пользовательском жестком диске возникает коллекция файлов ATDG или XML, которые являются отражением содержимого базы данных. После этого пользователь может отключить свой портативный компьютер от сети и продолжить работу с привычным для него приложением в автономном режиме. [40]