Cтраница 1
Клиентские наборы данных отличаются не только возможностью быстрой навигации по записям таблицы. Важной их особенностью является также возможность сохранять наборы данных в файле на диске. Эта возможность позволяет приложениям, использующим клиентские наборы данных, работать в автономном режиме в случае отсутствия связи с сервером баз данных. При сохранении набора данных в локальном файле запоминается не только набор записей Data, но и набор Delta, что позволяет позднее, при подключении к серверу, внести в базу данных изменения, сделанные при работе в автономном режиме. [1]
ДУ не клиентские наборы данных) рекомендуется создавать не при инициализации приложения, а динамически, так как каждое открытое подключение к: серверу забирает часть пропускной способности сети. [2]
![]() |
Приложение-редактор таблицы. [3] |
Свойство indexFieldNames клиентского набора данных позволяет указать имя столбца набора данных ( образа таблицы), по которому выполняется сортировка. [4]
Компонент TCIientDataSet реализует клиентский набор данных и может использоваться как в приложениях, работающих с dbExpress, так и в приложениях других типов. Как уже отмечалось, особенность клиентских наборов данных состоит в том, что компоненты, реализующие эти наборы данных, хранят в памяти набор записей. Этот набор может содержать все записи таблицы, с которой работает компонент, либо некоторое подмножество записей. В пределах хранящегося в памяти набора записей возможна быстрая ( и произвольная) навигация. [5]
Основное различие между однонаправленным и клиентским набором данных заключается в том, что клиентский набор данных хранит в памяти массив записей, полученных в результате запроса к серверу баз данных. Компоненты, реализующие клиентские наборы данных, предоставляют произвольный доступ к записям, хранимым в массиве. При этом возможно не только считывание записей из массива, но и их изменение и добавление, поэтому набор и называется двунаправленным. [6]
![]() |
Приложение-редактор таблицы. [7] |
Как уже отмечалось, метод Applyupdates синхронизирует состояние клиентского набора данных и таблицы. В процессе выполнения метода генерируется последовательность SQL-команд, вносящих изменения в таблицу. При выполнении этих команд могут возникнуть ошибки. Аргумент метода Applyupdates позволяет указать максимальное число ошибок, после которого операция внесения изменений будет аварийно завершена. Значение - 1 указывает, что нужно игнорировать все ошибки. В качестве результата метод Applyupdates возвращает количество ошибок, возникших в процессе внесения изменений. [8]
Далее мы назначаем обработчик событию OnAfterinsert объекта, реализующего клиентский набор данных. Это событие вызывается после каждой операции добавления новой записи в набор данных. Текст обработчика приведен в листинге 4.5. На компакт-диске в каталоге AutoGen можно найти программу, реализующую этот метод. [9]
Компонент DataSetProvider играет роль посредника между первичным источником данных и клиентским набором данных. [10]
![]() |
Программа SchemaTest отображает перечень таблиц в базе данных, а также перечень. [11] |
Программа использует традиционный набор компонентов, включающий в себя провайдера, клиентский набор данных и источник данных. Результирующие данные отображаются в сетке, как показано на рис. 14.7. Получив из базы данных перечень таблиц, вы можете щелкнуть на одной из строк сетки, а затем щелкнуть на кнопке Fields; в результате будет отображен список полей выбранной таблицы. [12]
Основное различие между однонаправленным и клиентским набором данных заключается в том, что клиентский набор данных хранит в памяти массив записей, полученных в результате запроса к серверу баз данных. Компоненты, реализующие клиентские наборы данных, предоставляют произвольный доступ к записям, хранимым в массиве. При этом возможно не только считывание записей из массива, но и их изменение и добавление, поэтому набор и называется двунаправленным. [13]
Интересно проследить взаимодействия между компонентами пользовательского интерфейса, компонентом-источником данных ( TDataSource) и клиентским набором данных. Компоненты пользовательского интерфейса посредством компонента-источника данных вносят изменения в образ таблицы, хранящийся в клиентском наборе данных. Изменения клиентского набора данных, в свою очередь, влияют на состояние элементов пользовательского интерфейса. Важно понимать, что при выполнении этих операций изменение состояния самой таблицы, хранящейся в базе данных, не происходит. [14]
Графический вывод приложения ( рис. 23.7) выглядит в точности так же, как если бы в клиентский набор данных было загружено содержимое обычного локального файла. [15]