10 ноября 2018 г. 10: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 г. 10: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

    Комментарии

    Только авторизованные пользователи могут публиковать комментарии.
    Пожалуйста, авторизуйтесь или зарегистрируйтесь
    МБ
    14 июля 2019 г. 17:57
    Максим Беликов

    C++ - Тест 005. Структуры и Классы

    • Результат:100баллов,
    • Очки рейтинга10
    МБ
    14 июля 2019 г. 17:52
    Максим Беликов

    C++ - Тест 004. Указатели, Массивы и Циклы

    • Результат:90баллов,
    • Очки рейтинга8
    МБ
    14 июля 2019 г. 17:45
    Максим Беликов

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

    • Результат:71баллов,
    • Очки рейтинга1
    Последние комментарии
    16 июля 2019 г. 15:15
    Евгений Легоцкой

    Конечно )) На самом деле не все читали Шлее... я например не читал ))
    16 июля 2019 г. 15:05
    IscanderChe

    Так пример с QLocalServer и QLocalSocket я целиком переписал с QTcpSocket и QTcpServer из книги Шлее. Принципиальное отличие - где коннект ставить. :)) Разве что на это упор сделать. Но я могу...
    16 июля 2019 г. 14:47
    Евгений Легоцкой

    Лучше API ))) Кстати, по использованию QLocalServer и QLocalSocket на сайте нет статей, было бы очень полезно и хорошо пошло бы в раздел Qt.
    16 июля 2019 г. 12:36
    IscanderChe

    Да, прямой доступ не предполагается. Впрочем, можно, конечно, и напрямую. Всё равно всё локально происходит. Проблема в том, как донести сведения об изменениях в базе, которые вносит клиент, д...
    b
    16 июля 2019 г. 8:38
    bbb116

    спасибо, до smart pointer еще не дошел )
    Сейчас обсуждают на форуме
    17 июля 2019 г. 11:49
    Михаиллл

    В настройкак указан индификатор проекта и ключ. Осталось понять как использовать ключ. Попробовал вставить в этот запрос 'https://[PROJECT_ID].firebaseio/users/jack/name.json?access_to...
    b
    17 июля 2019 г. 9:01
    bbb116

    Вообщем работает только если делать setSceneRect только в конструкторе главного окна, если потом менять rect например при вставке картинки то появляются сколлы все как надо только области не р...
    17 июля 2019 г. 5:54
    Алексей Внуков

    хочу не стандартный набор символов, а все ненужное убрать чтоб не мешало. для начала решил посмотреть как работает клава на родном примере, а он на телефоне не взлетел вот и начал разби...
    17 июля 2019 г. 5:06
    Михаиллл

    Добрый день.Возможно вы сталкивались с облаками.Нужно из Qt создавать на облаке папки, записывать в папки файлы, читать и удалять с компьютера файлы.Возможно знаете, что лучше и проще испол...
    Ищу работу?
    25,000.00 руб. - 30,000.00 руб.
    Разработчик Qt/C++
    Barnaul, Altai Krai, Russia

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

    EVILEG
    О нас
    Услуги
    Присоединяйтесь к нам
    © EVILEG 2015-2019
    Рекомендует хостинг TIMEWEB