Cтраница 3
Имейте в виду, что вы можете обращаться к методам интерфейса СОМ при помощи DCOM, а также используя сокетное или HTTP-соединение. Так как программа использует соглашение о вызовах safecall, исключение, генерируемое на сервере, автоматически перенаправляется и отображается на стороне клиента. В этом случае, когда пользователь устанавливает флажок Connect, функционирование обработчика события, используемого для активизации клиентских наборов данных, прерывается, и пользователь, указавший неправильный пароль, не сможет увидеть данные. [31]
Благодаря тому что компонент ClientDataSet хранит информацию о каждой из модификаций набора данных, вы можете при желании отменить то или иное изменение, удалив из области Delta соответствующую запись. Для отмены последней модификации набора данных компонента ClientDataSet используется метод Undo-LastChange. Совместно с этим методом используется параметр FollowChange, который позволяет вам перейти к месту выполнения отмены, - иными словами, клиентский набор данных переместится к записи, которая была восстановлена в результате отмены. [32]
Давайте расширим этот пример, преобразовав его в серверное приложение. Программа WebSearcher, доступная как CGI-приложение или исполняемый файл отладчика Web App Debugger, имеет два действия: сначала возвращает HTML, полученный от поисковой машины, а затем проверяет HTML-заполнение компонента ClientDataSet ( клиентский набор данных), который привязывается к продюсеру таблиц страниц для генерации окончательного вывода. [33]
Этот компонент является комбинацией четырех существующих компонентов: SQLConnection, SQLDataSet, DataSetProvider и ClientDataSet. Компонент SimpleDataSet задуман как инструмент, облегчающий разработку, - вместо того чтобы создавать четыре разных компонента и соединять их между собой, вы создаете всего один компонент. Компонент SimpleDataSet фактически является клиентским набором данных ( то есть аналогом ClientDataSet) с подключенными к нему двумя составными ( compound) компонентами ( из семейства dbExpress) плюс скрытый компонет-провайдер. В данном случае странно, что провайдер скрыт, так как он создается как составной компонент. [34]
Фактически, компонент TCIientDataSet содержит в памяти не один, а два набора записей. Первый набор носит название Data. Он отражает текущее состояние набора данных. Второй набор записей называется Delta и содержит информацию обо всех изменениях, произведенных в наборе данных. Когда в клиентский набор данных вносятся изменения, эти изменения тут же отображаются в наборе записей Data, а в набор записей Delta добавляется полная информация о выполненных изменениях. При этом никаких изменений в первичном хранилище данных еще не производится. [35]
STAFF, например, состоит из 100000 записей, то выполнение SQL-оператора SELECT FROM STAFF может привести к перегрузке сети. Это свидетельствует о том, что при открытии набора данных извлекаются сразу все записи. В результате с сервера будут изначально извлечено только указанное количество записей, а остальные будут подгружаться по мере перемещения по клиентскому набору данных. [36]