Russian Qt Forum
Ноябрь 24, 2024, 07:54 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: SQLite - Parameter count mismatch  (Прочитано 9706 раз)
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"
Записан
MoPDoBoPoT
Гость
« Ответ #1 : Май 07, 2011, 16:18 »

1. Лучше перечислять все поля таблицы, потому как сразу видно какому полю соответствует какое значение, да и при изменении структуры таблицы, например, при добавлении поля, запрос не сломается (если, конечно, новое поле не является обязательным).
2. Связанные переменные - это не просто тупая замена одного текста другим, поэтому, даже если переменная текстового типа, её не надо брать в кавычки (из-за этого, скорей всего, и проблема):
query.prepare("INSERT INTO \"Пользователь\" VALUES (:username, :password, :type);");
Записан
Einior
Гость
« Ответ #2 : Май 07, 2011, 18:45 »

Спасибо, проблема действительно была в кавычках.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.042 секунд. Запросов: 20.