566_____________________________________________Глава 10

В некоторых случаях приложению требуется получить список имен полей таб-
лицы, связанной с Query. Это может быть сделано методом GetFieldNames, кото-
рый загружает список имен полей в любую переменную типа TStrings, передавае-
мую в него в качестве аргумента. Например, оператор

Queryl->GetFieldNames(ComboBoxl->Items);

загружает в выпадающий список ComboBoxl имена полей таблицы, связанной с
Queryl. В дальнейшем будет приведен пример использования этого метода.

10.1.6.7 Кэширование изменений, совместное применение Query
и UpdateSQL

Метод ExecSQL осуществляет немедленную модификацию таблицы. Однако
нередко удобнее было бы кэшировать изменения (хранить их временно в памяти),
а после того, как все изменения и проверки сделаны, переслать их в базу данных
или, по решению пользователя, отменить все сделанные исправления.

Это делается так же, как и для компонента Table (см. раздел 9.11.3 главы 9):

устанавливается в true свойство CachedUpdates компонента Query и применяются
методы ApplyUpdates для записи изменений в базу данных, метод CancelUpdates
для отмены изменений и метод CommitUpdates для очистки буфера кэша.

Но режим кэширования позволяет сделать большее — он позволяет подклю-
чить в приложение компонент UpdateSQL. Этот компонент, расположенный на
странице библиотеки Data Access, позволяет модифицировать наборы данных, от-
крытые в режиме только для чтения — readonly. Это особенно важно для наборов
данных, открываемых Query с запросом Select, поскольку Select создает таблицу
только для чтения.

Давайте построим приложение, демонстрирующее режим кэширования и тож-
дественное тому, которое рассматривалось в разделе 9.11.3 главы 9. Возьмите то
же самое приложение (рис. 9.46, только замените в нем компонент Tablel на ком-
понент Queryl и везде в тексте тоже проведите соответствующую замену Tablel на
Queryl. В свойстве SQL компонента Queryl запишите «Select * from Pers» и уста-
новите свойство CachedUpdates в true.

Вид этого приложения в законченном виде во время выполнения приведен на
рис. 10.3. Запустите свое приложение, и вы увидите, что оно, увы, не работает. От-
редактировать запись или вставить новую запись невозможно. А из кнопок нави-
гатора доступны только кнопки навигации. Причина всего этого была указана ра-
нее — Query с запросом Select создает таблицу только для чтения.

Давайте исправим ваше приложение. Поместите на него компонент Upda-
teSQL со страницы библиотеки Data Access. Чтобы связать его с приложением,
установите в компоненте Queryl свойство UpdateObject равным имени введенного

Рис. 10.3

Приложение, демонстрирующее кэширование
данных