Russian Qt Forum
Октябрь 01, 2024, 02:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSqlQuery - нужно вывести полный запрос в случае с bind  (Прочитано 7651 раз)
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« : Май 03, 2009, 10:26 »

Как мне вывести реальный исполняемый запрос?

Код
C++ (Qt)
   QSqlQuery q;
   q.prepare("SELECT DISTINCT id FROM features WHERE ftype=? AND dcheck>? GROUP BY domain ORDER BY dcheck DESC");
   q.addBindValue(feature);
   q.addBindValue(QDateTime::currentDateTime().addSecs(-second));
 

после выполняю

Код
C++ (Qt)
qDebug() << "getExpDomain SQL: " << q.lastQuery();
 

и получаю

Цитировать
getExpDomain SQL:  "SELECT DISTINCT id FROM features WHERE ftype=? AND dcheck>? GROUP BY domain ORDER BY dcheck DESC"

а хотелось бы реально выполненный запрос. База sqlite.
Записан
ритт
Гость
« Ответ #1 : Май 03, 2009, 10:39 »

кажись, средствами кутэ никак )
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #2 : Май 03, 2009, 10:41 »

Вот и я так думаю -  и логирование на базе sqlite тоже вроде не делается  В замешательстве
Записан
Rcus
Гость
« Ответ #3 : Май 03, 2009, 11:13 »

lastQuery всегда вернет установленный текст, executedQuery - настоящий текст запроса, но поскольку SQLite поддерживает PositionalPlaceholders Qt не будет заменять их на значения.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Май 03, 2009, 12:32 »

2 Rcus, это похоже справедливо для всех БД поддерживаемых в Qt.
Записан

Юра.
Tonal
Гость
« Ответ #5 : Май 04, 2009, 12:12 »

Вообще-то запросы с параметрами - это стандартный апи самого движка базы.
При этом движку сначала передаётся запрос со специальными заменителями, а потом параметры к нему.
Это позволяет экономить время на разборе запроса движком и трафик, если предполагается выполнить несколько похожих запросов подряд.
Т.е. Qt при этом просто не знает "полного" текста запроса.
Записан
MoPDoBoPoT
Гость
« Ответ #6 : Июнь 25, 2009, 21:11 »

Ответ, конечно, запоздалый Улыбающийся но все же:
QVariant QSqlQuery::boundValue ( const QString & placeholder ) const
QVariant QSqlQuery::boundValue ( int pos ) const
QMap<QString, QVariant> QSqlQuery::boundValues () const

Используя одну из этих функций можно восстановить весь текст запроса. Метод boundValues() самый универсальный, с помощью него слегкостью можно восстановить текст запроса, незная даже вид оного.
« Последнее редактирование: Июнь 25, 2009, 21:16 от MoPDoBoPoT » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.148 секунд. Запросов: 23.