Создание приложений для работы с базами данных в сети____________565

В этом запросе вы указываете условие отбора: значение поля Dep должно быть
равно параметру Dep. В предыдущем разделе было рассказано, как вводить в за-
прос и использовать параметры. Но в данном случае не надо определять этот пара-
метр с помощью редактора параметров, вызываемого из свойства Params компо-
нента Query2. Вместо этого в свойстве DataSource компонента Query2 надо сосла-
ться на DataSowcel — источник данных, связанный с таблицей Dep. Это скажет
приложению, что оно должно взять значения параметра :Dep из текущей записи
этого источника данных. А поскольку имя параметра совпадает с именем поля в
источнике данных, то в качестве значения параметра будет взято текущее значе-
ние этого поля. Таким образом, вспомогательная таблица, запрашиваемая в Que-
ry2, оказывается связанной с головной таблицей, запрашиваемой в Query 1.

После изменения содержимого свойства SQL свойство Active компонента Que-
ry2 сбросится в false. Установите его в true и запустите приложение. Вы увидите,
что при перемещении по первой таблице во второй отображаются только те записи,
которые относятся к отделу, указанному в текущей записи первой таблицы.

10.1.6.6 Основные методы компонента Query

К основным методам Query можно отнести методы открытия и закрытия сое-
динения с базой данных.

Метод Close закрывает соединение с базой данных, переводя свойство Active в
false. Этот метод надо выполнять перед изменением каких-то свойств, влияющих
на выполнение запроса или на отображение данных. Например, при изменении па-
раметров запроса в свойстве SQL надо сначала методом Close закрыть соединение,
связанное с прежним запросом, а потом уже выполнять новый запрос.

Метод Open открывает соединение с базой данных и выполняет запрос, содер-
жащийся в свойстве SQL. Но этот метод применим только в том случае, если за-
прос сводится к оператору Select. Если же запрос содержит другой оператор, на-
пример, Update или Insert, то при выполнении Open будет генерироваться исклю-
чение EDatabaseError. Для осуществления любого другого запроса, кроме Select,
используется метод ExecSQL. Он подготавливает выполнение данного запроса,
если подготовка не осуществлена заранее, и затем выполняет его. Подготовка вы-
полнения требует определенных затрат времени. Поэтому для ускорения взаимо-
действия с базой данных полезно перед первым выполнением запроса выполнить
метод Prepare.

При изменении текста в свойстве SQL методы Close и Prepare вызываются ав-
томатически.

Наличие двух методов выполнения запроса — Open и ExecSQL ставит вопрос:

«Как же поступить, если запрос сформирован пользователем или программой и его
характер неизвестен?». Неизвестный запрос, сформированный в некоторой пере-
менной ssql типа строки, можно выполнить с помощью следующего кода:

.try

{

Queryl->SQL->Clear() ;

Queryl->SQL->Add(ssql) ;

Queryl->0pen();

}

catch (EDatabaseError&)

(

Queryl->ExecSQL() ;

}

В блоке try (см. раздел 4.9.3 главы 4) осуществляется попытка выполнить за-
прос с помощью метода Open. А если эта попытка завершается генерацией исклю-
чения, т.е. если запрос состоит из оператора, отличного от Select, то генерируется
исключение EDatabaseError, которое перехватывается в разделе catch, и выпол-
няется метод ExecSQL.