Russian Qt Forum

Qt => Базы данных => Тема начата: Einior от Май 07, 2011, 11:28



Название: SQLite - Parameter count mismatch
Отправлено: Einior от Май 07, 2011, 11:28
В базе создана таблица

CREATE TABLE Пользователь
(Имя TEXT PRIMARY KEY NOT NULL,
Пароль TEXT NOT NULL,
Тип INTEGER NOT NULL);

Требуется добавить запись в таблицу.
Код такой:
Код:
void UsersDialog::addUser()
{   QSqlQuery query(db);

    query.prepare("INSERT INTO \"Пользователь\" VALUES (':username', ':password', :type);");
    if (typeBox->currentText() == "Администратор")
query.bindValue(":type", 0);
    else if (typeBox->currentText() == "Опытный пользователь")
query.bindValue(":type", 1);
    else query.bindValue(":type", 2);

    query.bindValue(":username", usernameEnter->text());
    query.bindValue(":password", passwordEnter->text());

//    qDebug() << query.lastQuery();
//    qDebug() << usernameEnter->text() << passwordEnter->text() << typeBox->currentText();

    if (!query.exec())
    { QErrorMessage *error = new QErrorMessage(this);
error->showMessage("Ошибка записи: " + query.lastError().text());
    }
}
Выдаётся ошибка "Parameter count mismatch"


Название: Re: SQLite - Parameter count mismatch
Отправлено: MoPDoBoPoT от Май 07, 2011, 16:18
1. Лучше перечислять все поля таблицы, потому как сразу видно какому полю соответствует какое значение, да и при изменении структуры таблицы, например, при добавлении поля, запрос не сломается (если, конечно, новое поле не является обязательным).
2. Связанные переменные - это не просто тупая замена одного текста другим, поэтому, даже если переменная текстового типа, её не надо брать в кавычки (из-за этого, скорей всего, и проблема):
query.prepare("INSERT INTO \"Пользователь\" VALUES (:username, :password, :type);");


Название: Re: SQLite - Parameter count mismatch
Отправлено: Einior от Май 07, 2011, 18:45
Спасибо, проблема действительно была в кавычках.