Политика конфиденциальностиКонтактыО сайтеОтзывы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"

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

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
13
R
  • 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
R

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

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
R

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
R

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



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

QSqlDatabase::removeDatabase(name_connect);


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

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


........

QSqlDatabase::removeDatabase("connect_db");



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

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


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





0

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


0
R

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

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


  • 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

    Комментарии

    Только авторизованные пользователи могут публиковать комментарии.
    Пожалуйста, авторизуйтесь или зарегистрируйтесь
    N
    23 марта 2019 г. 7:52
    Nico03

    C++ - Тест 001. Первая программа и типы данных

    • Результат:80баллов,
    • Очки рейтинга4
    Y
    22 марта 2019 г. 9:39
    Yavlados

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

    • Результат:21баллов,
    • Очки рейтинга-10
    ЭА
    22 марта 2019 г. 5:02
    Эвелина Алексеева

    C++ - Тест 001. Первая программа и типы данных

    • Результат:53баллов,
    • Очки рейтинга-4
    Последние комментарии
    22 марта 2019 г. 12:32
    Евгений Легоцкой

    Ну может бибилотеки не те положили? У вас сборка для MinGW, а либы для MSVC.
    ВН
    22 марта 2019 г. 11:08
    Волчонок Над-Пропастью

    Из кьюта приложение не хочет запускаться, аварийно завершается, но каких-либо ошибок не выдаёт. Оно открывается, после нажатия "старт" зависает и завершается. Если не из кьюта запускать дебаг ...
    21 марта 2019 г. 15:49
    Евгений Легоцкой

    серьезно? Эта ошибка 404 уже даже не относится к данному вопросу. В каких-то urls в вашем проекте. Вопросы, которые не относятся непосредственно к статье, задавайте, пожалуйста на...
    АБ
    21 марта 2019 г. 15:00
    Артем Бел

    а это где? сейчас ошибка в debag такая: Page not found (404)Request Method: GETRequest URL: http://amadowshop.site/accounts/profile/
    21 марта 2019 г. 12:47
    Евгений Легоцкой

    не вижу здесь проблемы, поменяйте url для callback в приложения oauth в социальных сетях https://amadowshop.site/auth/verify/complete/facebook/
    Сейчас обсуждают на форуме
    m
    22 марта 2019 г. 19:40
    monevich

    int main(int argc, char *argv[]){ QApplication a(argc, argv); MainWindow w; w.show(); if (argc==2) { w.openFile(argv[1]); } return a.exec();} Допустим...
    22 марта 2019 г. 12:29
    Дмитрий

    Да, мьютекс добавил, но в том потоке, где сигнал вызывается.
    ВН
    22 марта 2019 г. 9:04
    Волчонок Над-Пропастью

    Да, на эту проблему! Зато у меня теперь новая, ругается на подключение QMediaPlayer, пишет, что не находит подобного файла или библиотеки. Пока не нашла как исправить, только вариант с переуст...
    22 марта 2019 г. 8:58
    Михаиллл

    4) это , похоже, для создания видоизмененных страниц, для анимации. 3,5) добавить фвйл/qt/ui.qml
    22 марта 2019 г. 8:04
    Евгений Легоцкой

    Привет. Если там std::vector , то наверное можно заранее подготовить вектор с необходимым количеством элементов и просто устанавливать значение по индексу элемента. Но в данном слу...
    Присоединяйтесь к нам в социальных сетях

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