2015-06-15 2 views
0

Как проверить, не сработал ли QSqlQuery::addBindValue()? Например, не может быть больше заполнителей, оставленных для привязки. Рассмотрим этот код:Проверьте, не удалось ли QSqlQuery :: addBindValue()

QSqlQuery q; 
q.prepare("INSERT INTO table1 (field1) VALUES (?)"); 
q.addBindValue("value1"); 
q.addBindValue("value2"); // this one should fail 

Однако addBindValue() является void, поэтому она не возвращает информацию о том, удалось ли это или нет.

+1

Проверьте q.exec(). Если метод возвращает false, проверьте строку ошибки. Если вы ошиблись в привязке, эта ошибка описана в строке ошибки. – Milovidov

+0

exec() не скажет мне, какой addBindValue() не удалось, поэтому он не работает для меня. Мне нужно знать, какой addBindValue(), в частности, не удалось. – sashoalm

+0

'const int count = queryString.count ('?');' – Amartel

ответ

0

Наконец-то я вышел из источников, и, похоже, вы действительно не можете узнать, не получилось ли это. Он не устанавливает последнюю ошибку или какой-либо другой код ошибки:

void QSqlResult::bindValue(int index, const QVariant& val, QSql::ParamType paramType) 
{ 
    Q_D(QSqlResult); 
    d->binds = PositionalBinding; 
    QList<int>& indexes = d->indexes[d->fieldSerial(index)]; 
    if (!indexes.contains(index)) 
     indexes.append(index); 
    if (d->values.count() <= index) 
     d->values.resize(index + 1); 
    d->values[index] = val; 
    if (paramType != QSql::In || !d->types.isEmpty()) 
     d->types[index] = paramType; 
} 

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

  • Нет связанных вопросов^_^