Политика конфиденциальностиКонтактыО сайтеОтзывыGitHubDonate
© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
10 ноября 2018 г. 15:47

через QT не могу открыть файл SQLite

Qt, SQLite

Добрый день.

Я создал  в SQLiteStudio базу данных.

Пытаюсь открыть ее в QT этим кодом

QSqlDatabase ResumeDB; //resume sql
ResumeDB.setDatabaseName("C:\\CVReader\\ResumeArraySQLite.db");

if (!ResumeDB.open()) {qDebug()<<"not open";}


дебаг выдает "not open"

Не знаете, где ошибка и как открыть?

13
  • Ответ был помечен как решение.
  • 10 ноября 2018 г. 15:59
    QSqlDatabase dbcache = QSqlDatabase::addDatabase("QSQLITE", "cache");
    dbcache.setDatabaseName("/dbc.db3");


    if (!dbcache.open()) {
        qDebug() << "error connect to database" << dbcache.lastError().text();
        return false;
    }
1

Спасибо.

И еще вопрос, пытаюсь использовать запрос exec, но выдает ошибку QSqlQuery::exec: database not open

код такой


QSqlQuery query;
        query.exec("INSERT INTO SQLliteResumeArray ("
                   "Name,"
                   "Gender,"
                   "Age,"
                   "DateOfBirth,"
                   "PhoneNumber,"
                   "Email,"
                   "City,"
                   "PostDesired,"
                   "Salary,"
                   "CVPost,"
                   "NameCompany,"
                   "Experiance,"
                   "Languages,"
                   "AdditionalInformation,"
                   "Education,"
                   "Skills,"
                   "Comments,"
                   "Resume)"
               "VALUES ("
                   "'NameFromResume',"
                   "'GenderFromResume',"
                   "AgeFromResume,"
                   "'DateOfBirthQString',"
                   "'PhoneNumberFromResume',"
                   "'MailFromResume',"
                   "'CityFromResume',"
                   "'PostDesiredFromResume',"
                   "SalaryFromResume,"
                   "'CVPostFromResume',"
                   "'CompanyFromResume',"
                   "'ExperianceFromResume',"
                   "'LanguagesFromResume',"
                   "'AdditionInformationFromResume',"
                   "'EducanionFromResume',"
                   "'SkillsFromResume',"
                   "'CommentsFromResume',"

                   "'TextResume');");
0

прочитай хотя бы это

http://www.java2s.com/Code/Cpp/Qt/UsingsqldatabasefromQt.htm

    QSqlQuery m_query(QSqlDatabase::database("cache"));
    m_query.prepare("INSERT INTO name_table (id_item)"
                    " VALUES (:id_item)");


    m_query.bindValue(":id_item", idItem());


    if(!m_query.exec())
    {
        qDebug() << Q_FUNC_INFO << m_query.lastError();
    }

0

спасибо , читаю.

но почему у меня не верно?

тут https://doc.qt.io/qt-5.11/qsqlquery.html#exec также написано.

их пример

QSqlQuery query;
    query.exec("INSERT INTO employee (id, name, salary) "
               "VALUES (1001, 'Thad Beaumont', 65000)");

0

и скажите пожалуйста, что такое cache

0

и по предложенной Вами ссылки также делают

    QSqlQuery query;
    query.prepare("INSERT INTO person (id, forename, surname) ""VALUES (:id, :forename, :surname)");
0

cache это название соединения

можно так

 QSqlDatabase dbcache = QSqlDatabase::addDatabase("QSQLITE");

тогда будет какая-то базовая название соединения


если я не ошибаюсь вот так будет работать твой вариант, так как при таком, ты не передаешь соединения для квери

QSqlQuery query;



0

Сделал тренировочную таблицу. Если вот так писать, то при первом запросе нет ошибок, но при повторе действия выдает ошибку QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.

  QSqlDatabase TestDB = QSqlDatabase::addDatabase("QSQLITE"); //resume sql
        TestDB.setDatabaseName("/TestSQLite.db");
        //TestDB.open();
        if (!TestDB.open()) {qDebug()<<"not open";}
        QSqlQuery query;       
                query.exec("INSERT INTO TestSQL ("
                          // "NumberID,"
                           "TestInt,"
                           "TestStr"
                       ")"
                       "VALUES ("
                           //"'1',"
                           "'2',"
                           "'TestStr'"
                       ");");

        qDebug()<<"наверно записалось";

        TestDB.close();

Смотрел в редакторе SQL, данные не добавляются.

Подскажите пожалуйста, что не так.

0

и если делать так, тоже  не работает


 query.prepare("INSERT INTO TestSQL ("
                       "TestInt,"
                   ")"
                   "VALUES ("
                       ":IntTest,"
                   ");");
        query.bindValue(":IntTest",123);

        query.exec();
0

мені по російски важко писати тому, моежш перкласти ))))



помилка виникає тому що ти намагаєшся створити ще одне з'єднання з такоюж назвою, щоб це зробити спочатку потрібно видалити старе з'єднання

QSqlDatabase::removeDatabase(name_connect);


ти можеш зробити так

QSqlDatabase TestDB = QSqlDatabase::addDatabase("QSQLITE", "connect_db"); 


........

QSqlDatabase::removeDatabase("connect_db");



якщо у вас плануєтсяь виокористовувати одну базу то яб просто встановив  зєднання десь на початку програми і потім просто на нього зсилався

усі конекти до бази в Qt є статичними


по приклату який ти скинув важно щось сказати....





0

Из опыта: Прежде чем использовать запрос в QSqlQuery напиши его и выполни непосредственно на базе данных. Убедись что он работает а потом переноси уже в программу. Сразу отпадет масса вопросов.


0

тому що цей запит не коректний, в тебе там зайві коми, зайва крапка з комою

порівняй з от цим


  • m_query.prepare("INSERT INTO name_table (id_item)"
  • " VALUES (:id_item)");
  • 0

    Большое спасибо всем за помощь.

    Так работает

    QSqlDatabase TestDB = QSqlDatabase::addDatabase("QSQLITE"); //resume sql
            TestDB.setDatabaseName("C:\\CVReader\\TestSQLite.db");
            if (!TestDB.open()) {qDebug()<<"not open";}
            QSqlQuery query;
            int q1 = 124;
            query.prepare("INSERT INTO TestSQL (TestInt)VALUES (:q1);");
            query.bindValue(":q1",q1);
            if (!query.exec()) {qDebug()<<"не записалось";}
            else {qDebug()<<"записалось";}

            TestDB.close();






    0

    Ответы

    Только авторизованные пользователи могут отвечать на форуме.
    Пожалуйста, авторизуйтесь или зарегистрируйтесь
    16 ноября 2018 г. 19:09
    Илья Завьялов

    Qt - Тест 001. Сигналы и слоты

    • Результат:31баллов,
    • Очки рейтинга-10
    16 ноября 2018 г. 12:49
    Ирина Минигузина

    C++ - Тест 003. Условия и циклы

    • Результат:0баллов,
    • Очки рейтинга-10
    16 ноября 2018 г. 8:55
    Vitaliy

    Qt - Тест 001. Сигналы и слоты

    • Результат:52баллов,
    • Очки рейтинга-4
    Последние комментарии
    16 ноября 2018 г. 6:50
    Евгений Легоцкой

    Добрый день! шаблон не находит, или шаблон неправильно прописали, или тег шаблона неправильно написан, иных выводов сделать не могу, из того, что вы написали. трейсбек нужно смотреть. Со...
    16 ноября 2018 г. 6:48
    Евгений Легоцкой

    пройтись циклом по всем виджетам в обратном порядке for (int i = ui->vertialLayout->count() - 1; i >= 0; --i){ QWidget* w = ui->verticalLyout->itemAt(i)->widget();...
    15 ноября 2018 г. 21:35
    chunk

    Доброго времени суток Евгений. Не подскажете что я делаю не так? Получаю ошибку такого характера: Reverse for 'add_comment' with arguments '('',)' not found. 1 pattern(s) tried: ...
    15 ноября 2018 г. 15:35
    Михаиллл

    Спасибо. Похоже где то описку сделал, поэтому не работало. Я добавил на verticalLayout много виджитов. А можно ли их как то быстро и просто удалить?
    15 ноября 2018 г. 14:55
    Евгений Легоцкой

    verticalLayout - это, по-моему предположению, должен быть у вас объект класса QVBoxLayout, который наследован от QBoxLayout. Поэтому открываете документацию на QVBoxLayout ...
    Сейчас обсуждают на форуме
    17 ноября 2018 г. 23:20
    Евгений Легоцкой

    Три года назад я подключал ffmpeg в проект на Qt/С++ на первой работе. И кодирование декодирование удалось запустить. Подключал как библиотеку. Думаю, что в зависимости от проекта мо...
    17 ноября 2018 г. 14:13
    Чарльз Грин

    Я сейчас занимаюсь мультимедией, это аудио и видео, программы для концертов и т. д. Бибилиотека Qt очень помогает, она надежная, а надежность в моих приложениях очень важный фактор чтоб не пол...
    16 ноября 2018 г. 16:28
    Евгений Легоцкой

    Добрый день! Спасибо, что воспользовались именно форумом. Заниматься курсовыми работами чьими-то ни было у меня времени нет, у самого полторы работы. Но что-то подсказать на фо...
    16 ноября 2018 г. 9:52
    Евгений Легоцкой

    Отладчик!!!! Версия комплекта MSVC 2015 + компилятор 14.0!!!!
    Присоединяйтесь к нам в социальных сетях

    Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы