QtSql не может выполнить запрос

#include <QtGui>
#include <QtSql>
#include <QDebug>
int main(int argc, char* argv[])
{
    QApplication app(argc, argv);

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setHostName("test");
    db.setDatabaseName("firma");
    db.setUserName("user");
    db.setPassword("pass");

    if (!db.open()) {
        qDebug() << db.lastError();
        return 1;
    }

    QSqlQuery query;
    bool ret = query.exec("CREATE TABLE employees(id int primary key auto_increment, lastname varchar(255), firstname varchar(255), department int) ");
    qDebug() << ret << endl;
}

Каждый раз, когда я получаю false. Я не могу получить ошибку.


person Dewsworld    schedule 17.03.2012    source источник


Ответы (2)


SQLite предпочитает видеть autoincrement и хочет применить его только к integer столбцам, auto_increment синтаксическая ошибка с SQLite. Ваш SQL должен выглядеть так:

CREATE TABLE employees(id integer primary key autoincrement, ...
person mu is too short    schedule 17.03.2012
comment
Мне удалось это с помощью CHARSET и auto_incremnt. Кстати, автоинкремент тоже не работает. - person Dewsworld; 17.03.2012
comment
Ваш CREATE TABLE employees(id int primary key auto_increment, lastname varchar(255), firstname varchar(255), department int) дает мне синтаксическую ошибку в инструменте sqlite3 CLI, изменение его, как указано выше, заставляет его работать нормально. Я также изменил int на integer. - person mu is too short; 17.03.2012

QSqlQuery может помочь вам выяснить, почему exec() возвращает false. Вызовите QSqlError QSqlQuery::lastError () const, затем QString QSqlError::text() const. Вы получаете текст ошибки, сообщаемый базой данных и драйвером.

person Bill    schedule 17.03.2012