Проверьте, не завершилась ли ошибка 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, поэтому он не возвращает информацию о том, успешно или нет.


person sashoalm    schedule 15.06.2015    source источник
comment
Проверьте q.exec(). Если метод возвращает false, проверьте строку ошибки. Если вы ошиблись в привязке, эта ошибка была описана в строке ошибки.   -  person synacker    schedule 15.06.2015
comment
exec() не сообщит мне, какой метод addBindValue() завершился неудачно, поэтому у меня он не работает. Мне нужно знать, какой именно addBindValue() не удался.   -  person sashoalm    schedule 15.06.2015
comment
@sashoalm, ИМО, вы не можете анализировать запрос и обнаруживать в нем ошибки, если он не выполняется в базе данных.   -  person vahancho    schedule 15.06.2015


Ответы (1)


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

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;
}
person sashoalm    schedule 15.06.2015