Н- 3- Елманова. C++Builder 3.0, архитектура "клиент/сервер" и Internet
Рис. 7.3.  Главная форма приложения для тестирования SQL-запросов, генерируемых ВОЕ
Установим следующие значения свойств используемых компонентов: Таблица 7.1
Компонент	Свойство	Значение
DBNavigatorl	DataSource	DataSourcel
DBGrid	DataSource	DataSourcel
Button 1	Caption	Use SQL
Button2:	Caption	Update records
ButtonS :	Caption	Exit
DataSourcel	DataSet	Tablel
Tablel	DatabaseName	ORACLE?
	TableName	HOLDINGS
	UpdateMode	UpWhereKeyOnly
Table 1PUR_PRICE	FieldName	PUR PRICE
Queryl	DatabaseName	ORACLE?
	SQL	UPDATE HOLDINGS SET PUR_PRICE=PUR_PRICEHO
Теперь создадим обработчики событий, связанные с нажатием на кнопки. Кнопка Update records реализует аналог фрагмента xBase-кода, приведенного выше:
156
Оптимизация приложений C++Builder в архитектуре "клиент/серее"
void _fastcall TForml::Button2Click(TObject *Sender)
{
Table1->First();
DataSourcel ->Enabled=false;  / /He будем^зде§аться_,н_ад
видеоадаптером!     IT while (!Tablel->Eof) '*"
{
Table1->Edit(); Tablel PUR_PRICE->Valtt4=Table1PUR_PRICE->Value+10;
Table1->Next();
>
DataSourcel->Enabled=tcue; //Посмотрим, что получилось...
}	''            '*'
Временное отключение связи между DataSourcel и Table 1 в данном обработчике событий сделано для того, чтобы исключить перерисовку компо-HeHjaJD>B_Gridl при изменении каждой записи.
Кнопка Use" SQL реализует выполнение одиночного SQL-запроса UPDATE HOLDINGS SET PUR_PRICE=PUR_PRICE+10:
void _fastcall TForml::Button1Click(TObject *Sender)
{
Queryl->Prepare();
Queryl->ExecSQL() ;
Tablel->Refresh(); //Посмотрим на результат...
}
Скомпилировав приложение, запустим SQL Monitor и посмотрим, какие запросы генерируются BDE при нажатии на эти кнопки.
При использовании кнопки Update records log-файл имеет следующий вид:
1	14:37:08    SQL  Prepare:   ORACLE   -  UPDATE   "HOLDINGS" SET   "PUR_PRICE"=:1   WHERE   "ROWID"=:2
2	14:37:08    SQL  Execute:   ORACLE   -  UPDATE   "HOLDINGS" SET   "PUR_PRICE"=:1   WHERE   "ROWID"=:2
3	14:37:08    SQL Stmt:   ORACLE   -   Close
4	14:37:08     SQL  Prepare:   ORACLE   -   SELECT   "ACCT_NBR" ."SYMBOL"    ."SHARES"    ,"PUR_PRICE"    ,"PUR_DATE"    ,"ROWID"      FROM "HOLDINGS"   WHERE   "ACCT_NBR"=:1
5	14:37:08     SQL  Execute:   ORACLE   -   SELECT   "ACCTJJBR" ."SYMBOL"    ."SHARES"    ,"PUR_PRICE"    ,"PUR_DATE"    ."ROWID"      FROM "HOLDINGS"   WHERE   "ACCT_NBR"=:1
6	14:37:08     SQL  Misc:   ORACLE   -   Set   rowset   size
157