Взглянув на исходный код Qt, я обнаружил, где заканчивается строка в методе prepare
:
...
if (query.isEmpty()) {
qWarning("QSqlQuery::prepare: empty query");
return false;
}
#ifdef QT_DEBUG_SQL
qDebug("\n QSqlQuery::prepare: %s",query.toLocal8Bit().constData());
#endif
return d->sqlResult->savePrepare(query);
В котором sqlResult
является частным QSqlQueryPrivate
объектом. Поэтому я бы сказал, что получить строку оттуда может быть сложно.
Однако мне приходит в голову решение. Подкласс QSqlQuery
, устанавливающий атрибут QString
, который будет содержать подготовленный оператор. Затем переопределите QSqlQuery::prepare()
, чтобы он сохранил значение в атрибуте, а затем выполните исходную работу:
bool TestQSqlQuery::prepare(const QString& query){
this->m_preparedQuery = query;
return QSqlQuery::prepare(query);
}
Затем создайте getPreparedQuery
метод для получения значения в любой момент времени.
Я не думаю, что это «чистое» решение, но, тем не менее, оно может вам помочь.
person
martinarroyo
schedule
08.09.2015
SELECT * FROM Foo;
, а не только значения, привязанные к заполнителям. - person Antonio Pérez   schedule 08.09.2015lastQuery
возвращает пустую строку. Действительно, утверждение с вопросительными знаками было бы действительным для моего текущего варианта использования, но я не нашел метода, который возвращал бы строку перед запускомexec()
- person Antonio Pérez   schedule 08.09.2015QSqlQuery
, чтобы разобрать его, о чем я и спрашиваю, если возможно :) - person Antonio Pérez   schedule 08.09.2015QSqlQuery
, пока ваша композиция и проверка не будут выполнены.QSqlQuery
на самом деле не очень хорошо спроектирован как инструмент обработки запросов высокого уровня. Это способ отправить запрос на выполнение, и на этом все. - person Kuba hasn't forgotten Monica   schedule 08.09.2015