Как создать таблицу в базе данных? - PullRequest
0 голосов
/ 13 июля 2020

Я использую QSqlDatabase для создания базы данных и таблиц, но недавно у меня возникла проблема.

Я создал базу данных, которая была открыта отлично (когда я создал базу данных, я открыл ее, чтобы проверить, все ли в порядке, но позже я удалил открытие из своего кода) и никаких проблем не возникло. Затем я попытался создать таблицу другим методом, но не могу открыть свою базу данных для ее создания. В консоли ошибок нет.

Вот мой код

void DbManager::createDb(QString name)
{
    if (!QFile::exists(name))
    {
        QSqlDatabase db;
        db = QSqlDatabase::addDatabase("QSQLITE", name);
        db.close();
    }
}

void DbManager::createTable(QString dbName, QString tableName)
{
    if(QFile::exists(dbName))
    {
        qDebug() << "database exists";
        QSqlDatabase db = QSqlDatabase::database(dbName);
        if(db.open())
        {
            qDebug() << "no way: Database is opened!";
            QString about = "CREATE TABLE " + tableName +
                    "Id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL " +
                    "pictureSource VARCHAR(50)" +
                    "projectName VARCHAR(50)" +
                    "projectDescription VARCHAR(50)";

            QSqlQuery qry;
            if(!qry.exec(about))
            {
                qDebug() << "error: cannot create table";
            }
        }
        else {
            qDebug() << "error: cannot open database";
        }
    }
    else {
        qDebug() << "database doesn't exists";
    }
}

1 Ответ

0 голосов
/ 13 июля 2020

Есть ли у вас активный сеанс / соединение с сервером sql с разрешениями, необходимыми для доступа к БД, открытой до запуска скрипта?

Если это сработало, а затем нет, это может быть проблема в том, что соединение / вход в систему закрыто, и вы никогда не открывали его повторно.

Имейте в виду, что это становится еще более странным, если вы делаете это за пределами localhost.

Тогда вам нужно посмотреть на независимо от того, открывает ли эта библиотека несколько соединений и не закрывает их, как описано здесь

Qt - одновременная обработка нескольких подключений к базе данных

...