qt bindvalue () не может динамически привязывать значение

#c #sql #database #qt

#c #sql #База данных #qt

Вопрос:

Ниже приводится инструкция sql

 QString  myQuery = "UPDATE myTable SET myAttr = :myAttr WHERE ID = 1";    

//m_query is a QSqlQuery object pointer
m_query->prepare(myQuery);
QString value = "some value";
m_query->bindValue(":myAttr", QVariant(value)) ;
m_query->exec();

But when I print the executedQuery, it shows the value for **myAttr = ?**
  

Выполнение не вызывает никаких жалоб на bindValue().
Кто-нибудь в курсе, что здесь происходит? Я использую QT5.2.1 MinGW_32bits
Заранее спасибо.

Комментарии:

1. Я не уверен, но executedQuery не покажет вам запрос с привязанным значением. Просто строка с заполнителем

2. @tema спасибо за ответ. Однако я дважды проверил выполняемый запрос в qt, и он показывает следующее: в большинстве случаев эта функция возвращает ту же строку, что и lastQuery(). Если подготовленный запрос с заполнителями выполняется в СУБД, которая его не поддерживает, подготовка этого запроса эмулируется. Заполнители в исходном запросе заменяются их связанными значениями для формирования нового запроса. Эта функция возвращает измененный запрос. Это в основном полезно для целей отладки.

3. В приведенной части документации четко указано, что значения в этой строке заменяются, только если СУБД (базовый драйвер базы данных) сама по себе не поддерживает привязку переменных. Это означает, что если вы используете MySQL, SQLite3, PostgreSQL, Oracle и т.д., То у вас это не сработает. Qt не может показать вам конечный выполняемый SQL, потому что драйвер базы данных скрывает его от Qt.

4. @Googie совершенно верно. Однако я думаю, что базовый драйвер базы данных поддерживает привязку переменных. Это отлично работает в более старой версии QT.

Ответ №1:

Я решил проблему, используя следующее:

 change the  :myAttr to :MYATTR
  

и когда вы привязываете значение, следуйте тому же формату.

 m_query->bindValue(":MYATTR", QVariant(value)) **strong text**
  

Я думаю, что это проблема для более новой версии QtCreator.