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

    Комментарии

    Только авторизованные пользователи могут публиковать комментарии.
    Пожалуйста, авторизуйтесь или зарегистрируйтесь
    v
    17 января 2019 г. 11:51
    vitalir12

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

    • Результат:20баллов,
    • Очки рейтинга-10
    v
    17 января 2019 г. 11:49
    vitalir12

    C++ - Тест 002. Константы

    • Результат:50баллов,
    • Очки рейтинга-4
    v
    17 января 2019 г. 11:13
    vitalir12

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

    • Результат:28баллов,
    • Очки рейтинга-10
    Последние комментарии
    I
    16 января 2019 г. 8:06
    IscanderChe

    Заработало. Забыл model->select(); вписать.
    I
    16 января 2019 г. 8:02
    IscanderChe

    Всё равно пусто, хотя строка с данными в базу добавляется.
    16 января 2019 г. 7:51
    Евгений Легоцкой

    потому, что нужно сохранять информацию для всех остальных ролей и столбцов через вызов переопределённого метода. Да к тому же вы ещё и зациклили вызов метода data. QVariant MySqlTableModel:...
    I
    16 января 2019 г. 7:43
    IscanderChe

    Сделал вот так. В tableView ничего нет, кроме заголовка. QVariant MySqlTableModel::data(const QModelIndex &index, int role) const{ if (role == Qt::DisplayRole) { QTime ...
    Сейчас обсуждают на форуме
    18 января 2019 г. 11:26
    nayk1982

    Для Desktop делал так: void pause(int ms){ QTimer timer; timer.setInterval( qBound(1, ms, 3600000) ); timer.setSingleShot(true); QEventLoop loop; QObject::connect(&...
    17 января 2019 г. 12:01
    Алексей Внуков

    у меня просто есть отдельное поле с чекбоксамими какие колонки нужно отображать CheckBox { id: checkBox text: qsTr("some text") checked: true onC...
    15 января 2019 г. 16:53
    Михаиллл

    Спасибо, заработало.Но выдало обычный текст без форатирования HTML.Придется искать дальше
    15 января 2019 г. 12:52
    BlinCT

    Я же вам выше написал CLion умеет работать с ремоут машинами. И Qt так же собирает.
    Присоединяйтесь к нам в социальных сетях

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