Михаиллл
МихаилллҚар. 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 хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

15
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;
    }
    Михаиллл
    • Қар. 10, 2018, 11:41 Т.Ж.
    • (өңделген)

    Спасибо.

    И еще вопрос, пытаюсь использовать запрос 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');");
      R
      • Қар. 10, 2018, 11:51 Т.Ж.

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

      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();
          }

        Михаиллл
        • Қар. 11, 2018, 8:37 Т.Ж.

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

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

        тут 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)");

          Михаиллл
          • Қар. 11, 2018, 8:49 Т.Ж.

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

            Михаиллл
            • Қар. 11, 2018, 8:52 Т.Ж.

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

                QSqlQuery query;
                query.prepare("INSERT INTO person (id, forename, surname) ""VALUES (:id, :forename, :surname)");
              R
              • Қар. 11, 2018, 9:03 Т.Ж.
              • (өңделген)

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

              можно так

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

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


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

              QSqlQuery query;



                Михаиллл
                • Қар. 11, 2018, 10:34 Т.Ж.

                Сделал тренировочную таблицу. Если вот так писать, то при первом запросе нет ошибок, но при повторе действия выдает ошибку 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, данные не добавляются.

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

                  Михаиллл
                  • Қар. 11, 2018, 10:49 Т.Ж.

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


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

                          query.exec();
                    R
                    • Қар. 11, 2018, 10:52 Т.Ж.

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



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

                    QSqlDatabase::removeDatabase(name_connect);


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

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


                    ........

                    QSqlDatabase::removeDatabase("connect_db");



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

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


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





                      Ruslan Polupan
                      • Қар. 12, 2018, 1:42 Т.Ж.

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


                        R
                        • Қар. 12, 2018, 2:50 Т.Ж.

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

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


                      • m_query.prepare("INSERT INTO name_table (id_item)"
                      • " VALUES (:id_item)");
                        • Михаиллл
                          • Қар. 12, 2018, 3 Т.Ж.

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

                          Так работает

                          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();






                            p
                            • Қыр. 24, 2020, 4:58 Т.Ж.
                            • (өңделген)

                            Добрий день.
                            Я реалізую з'єдання з БД у окремому потоці.

                            dbName = "my_db_" + QString::number((quint64)QThread::currentThread(), 16);

                            db = QSqlDatabase::addDatabase("QSQLITE", dbName);
                            db.setPort(dataBase->port());
                            db.setHostName(dataBase->hostName());
                            db.setDatabaseName(dataBase->databaseName());
                            dbIsValid = db.open();

                            І БД відкривається. Проте при створення QSqlQuery:

                            QString resualtQuery {"SELECT rowId, * FROM Contacts WHERE Name = \"" + name + "\""};
                            QSqlQuery sqlQuery {resualtQuery};

                            Виникає помилка:

                            QSqlDatabasePrivate::database: requested database does not belong to the calling thread.
                            QSqlQuery::prepare: database not open

                            Робота з потоками організована на основі signal-slot в Qt::DirectConnection.
                            Підкажіть, будь-ласка, що може бути не так?

                              p
                              • Қыр. 24, 2020, 7:12 Т.Ж.
                              • (өңделген)

                              Вирішення знайшов.
                              Вказав замість назви БД об'єкт класу QSqlDataBase для QSqlQuery.

                              QSqlQuery m_query = QSqlQuery(qSqlDataBase);

                              Після двох днів пошуку рішення, все-таки знайшов.

                                Пікірлер

                                Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                                Кіріңіз немесе Тіркеліңіз
                                OI
                                • Ora Iro
                                • Жел. 24, 2024, 6:38 Т.Ж.

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

                                • Нәтиже:40ұпай,
                                • Бағалау ұпайлары-8
                                AD

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

                                • Нәтиже:50ұпай,
                                • Бағалау ұпайлары-4
                                m
                                • molni99
                                • Қаз. 26, 2024, 1:37 Т.Ж.

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

                                • Нәтиже:80ұпай,
                                • Бағалау ұпайлары4
                                Соңғы пікірлер
                                ИМ
                                Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
                                Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                                Evgenii Legotckoi
                                Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
                                Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                                A
                                ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
                                Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                                ИМ
                                Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
                                Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                                d
                                dblas5Шілде 5, 2024, 11:02 Т.Ж.
                                QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                                Енді форумда талқылаңыз
                                Evgenii Legotckoi
                                Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
                                добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                                t
                                tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
                                google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
                                NSProject
                                NSProjectМаусым 4, 2022, 3:49 Т.Ж.
                                Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
                                9
                                9AnonimҚаз. 25, 2024, 9:10 Т.Ж.
                                Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

                                Бізді әлеуметтік желілерде бақылаңыз