Н. 3, Елманова. C++Builder 3.0, архитектура "клиент/сервер" и Internet
в исходных таблицах и при необходимости отредактировать данные, связав с компонентами TTable управляющие элементы через соответствующие компоненты TDataSource. Пример подобного применения этого компонента приведен в одной из следующих глав.
3.5 Компонент TUpdateSQL
TUpdateSQL предназначен для модификации данных на сервере с помощью заранее подготовленных SQL-предложений. Он позволяет определить различные операторы SQL для удаления, вставки и модификации за писи, в том числе отличные от простых операторов DELETE, INSERT APPEND. Эти операторы SQL содержатся соответственно в свойства: DeleteSQL, InsertSQL, ModifySQL.
Имя компонента TUpdateSQL может быть значением свойств; UpdateObject какого-либо компонента TDataSet (например, TTable шн TQuery). Если в этом случае используется кэширование данных, то в про цессе выполнения транзакции, инициированной применением метод ApplyUpdates компонента TDataSet при попытке вставки, удаления или из менения записи генерируется SQL-запрос, содержащийся соответственно свойстве, InsertSQL, DeleteSQL или ModifySQL. Эти свойства можно редак тировать, выбрав пункт UpdateSQL editor из контекстного меню компонент TUpdateSQL. Если же кэширование не используется, соответствующи SQL-запросы генерируются при выполнении метода Post компонент TDataSet.
Отметим, что эти три свойства поддерживают специальное расширени SQL, обеспечивающее возможность использования в запросах значени полей, существовавших до начала выполнения транзакции, переносящей f сервер данные из кэша (обычно это требуется при создании предложени WHERE в SQL-запросах). Такие значения полей обозначаются следующи образом: префикс "OLD_" + <имя поля>.
На этапе выполнения в процессе сохранения какой-либо записи на се] вере компонент TUpdateSQL выбирает один из трех описанных в его ceoi ствах запросов в соответствии со значением свойства UpdateKind комш нента TDataSet, пересылает параметры запроса на сервер и выполняет з: прос с целью фиксации на сервере данного обновления.
Для управления каждым отдельным обновлением внутри транзакци переносящей данные из кэша на сервер, можно использовать собьгп OnApplyUpdate соответствующего компонента TDataSet, а также параметр UpdateKind (тип обновления) и UpdateAction, которому должно быть пр своено значение uaApplied, если обновление было успешным. Если устан
54
Компоненты Data Access, используемые в приложениях клиент/сервер
вить значение этого параметра равным uaSkip, данная запись в кэше будет проигнорирована и не перенесена на сервер.
Для изучения поведения TUpdateSQL внесем изменения в уже созданное приложение, заменив компонент Table 1 на компонент TQuery и добавив на форму один компонент TUpdateSQL и компонент TCheckBox. Свойства этих компонентов изменим следующим образом (табл. 3.2). Таблица 3.2
Компонент	Свойство	Значение
Queiyl	Active	true
	CachedUpdates	true
	UpdateObject	UpdateSQLl
	SQL	Select * from clients
DataSourcel	DataSet	Queryl
CheckBoxl	Caption	Использовать кэширование
UpdateSQLl	ModifySQL	update CLIENTS set     LAST NAME =   : LAST NAME, FIRST NAME  =   : FIRST NAME, ACCT_NBR =   :ACCT_NBR where LAST NAME =   :OLD  LAST NAME  and FIRST NAME =   :OLD FIRST NAME and ACCT NBR =   :OLD ACCT NBR
	DeleteSQL	delete  from CLIENTS where LAST NAME =   :OLD  LAST NAME  and FIRST NAME =   :OLD FIRST NAME and ACCT NBR =   :OLD ACCT NBR
	InsertSQL	insert  into CLIENTS (LAST_NAME,   FIRST_NAME,   ACCT_NBR) values (:LAST_NAME,    :FIRST_NAME,    :ACCT_NBR)
Стандартные SQL-запросы для добавления, удаления и изменения записи наиболее удобно создавать с помощью UpdateSQL editor, выбранного Нз контекстного меню компонента UpdateSQLl (рис. 3.10).
55