Работа с подготовленными запросами (QSqlQuery::prepare) (Firebird 2.1), оптимизация запросов, кэширование, транзакции |
Здравствуйте, гость ( Вход | Регистрация )
Работа с подготовленными запросами (QSqlQuery::prepare) (Firebird 2.1), оптимизация запросов, кэширование, транзакции |
Steklova Olga |
3.2.2014, 19:23
Сообщение
#1
|
Участник Группа: Участник Сообщений: 198 Регистрация: 27.9.2011 Из: Санкт-Петербург Пользователь №: 2912 Спасибо сказали: 5 раз(а) Репутация: 4 |
Всем привет
Пишу класс для работы с БД. Написала метод класса, выполняющий подключение к БД. Написала метод класса, выполняющий вставку записей в таблицу. В таком виде он работает. Метод insertToDB() в процессе работы программы вызывается многократно.В результате, каждый раз подготавливается один и тот же запрос. Как сделать так, чтобы запрос подготавливался только один раз? Я хотела вынести подготовку запроса в другой метод класса, который можно будет вызвать однократно. Насколько я понимаю, для этого queryIns_T_BLOCK должно быть известно в обоих этих методах. Еще не написав доп. метод, а только выполнив перенос описания QSqlQuery queryIns_T_BLOCK сюда у меня перестала работать подготовка запроса. prepare стал выдавать ошибку Driver not loaded. Не понимаю, в чем дело. Экземпляры класса QSqlQuery могут быть только локальными переменными? Сообщение отредактировал Steklova Olga - 7.2.2014, 18:45 |
|
|
Litkevich Yuriy |
8.2.2014, 13:36
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
q.exec(squery); Если ты хочешь проверить успешность запроса, то смотри что возвращает exec(), а не активность/неактивность. Часто isActive() будет возвращать Ложьif (!q.isActive()) А если я выполняю несколько запросов, используя один QSqlQuery q, то мне каждый раз надо вызывать setForwardOnly? НетА если у меня в таблице, например, 15000 записей. Надо их почти все удалить. Значит надо делать так? И транзакция здесь тоже нужна? Транзакции лучше применять всегда явно.Но драйвер Qt для Firebird убогий, в нём нельзя задавать тип транзакции. |
|
|
Текстовая версия | Сейчас: 28.11.2024, 8:31 |