2013-11-12 2 views
1

QMake версия 3.0QSqlQuery конструктор странное поведение

Qt версии 5.0.2

При использовании

QSqlQuery query(QString("SELECT device_text_id FROM device")); 
qDebug() << query.exec(); 

я получаю ложна в query.exec() и никаких результатов, возвращенных в объекте запроса, но при Я использую

QSqlQuery query; 
query.prepare("SELECT device_text_id FROM device"); 
qDebug() << query.exec(); 

Я верю и верну данные.

В documentation of QSqlQuery является конструктором неоспоримым используется в обоих случаях выше:

QSqlQuery(const QString & query = QString(), QSqlDatabase db = QSqlDatabase()) 

Для получения дополнительной информации я проверил мои Postgres (V9.1) журналы. Я ударяю эту ошибку каждый раз, когда запрос выполняется в первом порядке.

CET ERROR: syntax error at end of input at character 9 
CET STATEMENT: EXECUTE 

Я что-то пропустил? Почему первый подход не работает?

ответ

2

Вызов конструктора со строкой напрямую выполняет этот запрос. Запрос уже выполнен после создания объекта.

Когда вы звоните .exec(), он пытается выполнить запрос, подготовленный с помощью prepare(). Но не было prepare(), так что попытка не удалась. Эта ошибка вызывает возвращаемое значение false, которое вы видите в программе.

+0

так как я могу привязать значения, если я попробую первый подход? Возможно ли это только при приготовлении? –

Смежные вопросы