Энциклопедия C++ Builder



         

ВИЗУАЛЬНАЯ РАЗРАБОТКА ПРИЛОЖЕНИЙ БАЗ ДАННЫХ - часть 23


// Изменить

EditOld на EditNew в таблице ORDERS sprintf(sqls, "UPDATE ORDERS set ShipToAddrl = \"%s\" WHERE (ShipToAddrl = \"%s\")", EditNew->Text.c_str(), Edit01d->Text.c_str()) ;

Queryl->SQL->Add(sqls) ;

Queryl->ExecSQL();

// Внести все изменения, сделанные до этого момента Databasel->Commit();

Tablel->Refresh();

Table2->Refresh() ;

}

catch(EDBEngineError* dbError) //

обработка ошибок BDE {

for (int i=0; i<dbError->ErrorCount; i++) MessageBox (0, dbError[i].Message.c_str(), "SQL Error", MB_OK) ;

Databasel->Rollback() ;

return;

} catch (Exception* exception) //

обработка исключений

{

MessageBox (0, exception->Message.c_str (), "Error", MB_OK) ;

Databasel->Rollback() ;

return;

) }

Листинг 5.9. Транзакция, реализующая смену адреса фирмы.

Конечно, показанный на Рис. 5.20 пример прохождения транзакции в соединении с локальным сервером не имеет особой практической ценности и приводится здесь только с целью проиллюстрировать работу компоненты

TDatabase.

Рис. 5.20. Результат прохождения транзакции.

Листинг 5.10 показывает, как соединиться с сервером базы данных во время выполнения программы, не создавая ее псевдонима. Ключевые моменты заключаются в том, чтобы указать DriverName и заполнить массив параметров информацией, необходимой для первого соединения (в нашем примере пользователь вводит свое имя и пароль в объекты компонент редактирования Editi и Edit2). Мы определили только те параметры соединения, которые не установлены для данного драйвера в утилите конфигурации BDE. Значение параметра SQLPASSTHRU MODE определяет один из трех возможных способов взаимодействия табличных методов Add, Append и Insert с компонентами запросов, которые соединены с той же базой данных. Использованное в примере значение NOT SHARED означает, что табличные методы и запросы используют два раздельных соединения с сервером. Сервер рассматривает их как соединения с двумя разными пользователями. До тех пор, пока транзакция не завершится, табличные методы не применяются, хотя результаты выполнения запросов могут менять содержимое базы данных, раздельно от действий активной транзакции. Два других значения SHARED NOAUTOCOMMIT и SHARED AUTOCOMMIT указывают, что табличные методы и запросы разделяют одно общее соединение с сервером. Если вам нужно включить табличные методы в транзакцию, используйте способы SHARED NOAUTOCOMMIT или NOT SHARED.




Содержание  Назад  Вперед