Главная » Delphi » Дополнительные возможности наборов данных клиента

0

Управление компонентом TClientDataSet осуществляется при  помощи множе ства разнообразных параметров. В данном  разделе будут рассмотрено применение компонента TClientDataSet, упрощающего код в сложных приложениях.

Двухуровневые приложения

Теперь, изучив,  как в трехуровневом приложении поставить в соответствие компо ненту  ClientDataSet провайдера, а значит и данные, можно  задаться вопросом; как выполнить подобные действия в двухуровневом приложении? Ведь зачастую  создать подобное приложение достаточно просто. Для этого существует четыре возможности.

•   Присвоить данные  во время  выполнения.

•   Присвоить данные  во время  разработки.•   Назначить провайдера во время  выполнения.

•   Назначить провайдера во время  разработки.

При  работе с компонентом ClientDataSet существует  две основные возможности: либо использовать свойство AppServer, либо обращаться к данным  напрямую. В первом случае  между компонентами TClientDataSet и TDataSetProvider нужно  установить связь, что позволит им взаимодействовать друг с другом. Если же потребуется работать не посредственно с самими данными, то в распоряжении программиста окажется эффектив ный механизм локального хранения данных. При этом для получения данных нет необхо димости обращаться к компоненту TDataSetProvider.

Для  получения  компонентом  TCLientDataSet данных  непосредственно  от  ком

понента TDataSet во время  выполнения программы используйте код, приведенный в

листинге 21.9.

Листинг 21.9. Код для получения данных непосредственно от компонента

TDataSet

function GetData(ADataset: TDataset): OleVariant;

begin

with TDatasetProvider.Create(nil) do

try

Dataset:= ADataset;

Result:= Data;

finally

Free;

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

ClientDataset1.Data:= GetData(ADOTable1);

end;При  использовании такого  метода  в Delphi 6 требуется больше  усилий  и кода,  чем в предыдущих версиях, в которых было достаточно свойству  ClientDataSet1.Data при своить свойство Table1.Provider.Data. Однако функция GetData() позволяет скрыть дополнительный код.

Для того  чтобы  из компонента TDataSet извлечь данные  с помощью компонента TClientDataSet в процессе разработки, выберите в контекстном меню компонента TClientDataSet пункт Assign Local Data. Затем  задайте компонент TDataSet, в ко тором содержатся необходимые данные, и они будут помещены в свойство TCLient- DataSet.Data.

CОВЕТ

Если сохранить файл в этом состоянии и сравнить размер файла DFM с размером дан- ных до выбора этого пункта, то можно заметить, что размер файла DFM увеличился. Это связано с тем, что в файле DFM Delphi сохраняет все метаданные и записи, ассо- циированные с компонентом TDataSet. Эти данные будут переданы в файл DFM толь- ко в том случае, если значение свойства Active компонента TClientDataSet уста- новлено равным True. Объем файла также можно сократить, выбрав в контекстном меню компонента TClientDataSet пункт Clear Data.

Для того  чтобы  воспользоваться всей  гибкостью, предоставляемой провайдером, необходимо  обратиться  к  свойству   AppServer.  Нужное   значение  этому  свойству можно  присвоить во время  выполнения. Указанное можно  осуществить в методе FormCreate примерно так:

ClientDataset1.AppServer:=TLocalAppServer.Create(Table1); ClientDataset1.Open;

И,  наконец, установить  значение свойства AppServer можно  во время  разра ботки.  Если  значение свойства RemoteServer компонента TCLientDataSet не установлено,  то   свойству   TClientDataSet.ProviderName можно   присвоить значение TDataSetProvider.

Основным недостатком использования свойства TClientDataset.Provider- Name является то, что оно не может  быть связано с провайдерами, расположенными в другой форме или модуле данных во времени разработки. Поэтому  в Delphi 6 появился компонент TLocalConnection. Он  самостоятельно обнаруживает и обеспечивает доступ ко всем найденным компонентам TDatasetProvider того  же самого  владель ца. Чтобы использовать этот  метод  связи  с провайдерами, назначьте свойству  Cli- entDataset.RemoteServer компонент LocalConnection во  внешней форме или модуле данных  DataModule. По завершении этих действий будет получен  список  про вайдеров  для   данного  компонента  LocalConnection в   свойстве  ClientData- set.ProviderName.

Основным отличием между использованием компонента TDataSet и компонента TClientDataSet является то, что при  использовании компонента TClientDataSet в качестве посредника между запросами к данным  компонента TDataSet применяет ся интерфейс IAppServer. Это позволяет манипулировать свойствами, методами, событиями и полями компонента TClientDataSet, но не компонента TDataSet. Можно  считать, что  данный компонент содержится в отдельном приложении и, сле довательно, им нельзя  управлять непосредственно из кода. Поместите все серверные компоненты в отдельный модуль DataModule. Размещение компонентов TDatabase, TDataSet и TCDSProvider в отдельном модуле DataModule позволяет заранее под готовить создаваемое приложение к предстоящей установке в многоуровневой среде. Такая  организация приложения обладает еще одним  преимуществом: при  ее исполь зовании модуль DataModule можно  рассматривать как объект, доступ к которому для клиента будет затруднен. Это  также  будет способствовать подготовке приложения к переносу в многоуровневую среду,  поскольку  затруднит разработчикам  создание та ких связей, которые впоследствии будут препятствовать переносу.

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии