Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Sqlite connection weird thing
Forum Updated to NodeBB v4.3 + New Features

Sqlite connection weird thing

Scheduled Pinned Locked Moved Solved General and Desktop
29 Posts 5 Posters 3.4k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M masa4

    @Emre-MUTLU
    db.cpp:

    DB::DB(const QString &path)
    {
        m_db = QSqlDatabase::addDatabase("QSQLITE");
        m_db.setDatabaseName(path);
    
        if(!m_db.open())
            qDebug() << "Error: connection with database failed";
        else
            qDebug() << "Database: connection ok";
    }
    

    Its the constructor. im passing path as default value in header: db.h:

    //DB(const QString& path = "/home/projectfolder/mydbname"); //this one works
    DB(const QString& path = "mydbname"); //but i need this one
    
    jsulmJ Offline
    jsulmJ Offline
    jsulm
    Lifetime Qt Champion
    wrote on last edited by
    #7

    @masa4 I repeat myself: Please add error handling: https://doc.qt.io/qt-6/qsqldatabase.html#lastError and https://doc.qt.io/qt-6/qsqlquery.html#lastError

    https://forum.qt.io/topic/113070/qt-code-of-conduct

    1 Reply Last reply
    1
    • jsulmJ jsulm

      @masa4 said in Sqlite connection weird thing:

      Why this happens any idea?

      Please add error handling: https://doc.qt.io/qt-6/qsqldatabase.html#lastError and https://doc.qt.io/qt-6/qsqlquery.html#lastError

      M Offline
      M Offline
      masa4
      wrote on last edited by
      #8

      @jsulm Thank you for advice. I added it like:

      DB::DB(const QString &path)
      {
          m_db = QSqlDatabase::addDatabase("QSQLITE");
          m_db.setDatabaseName(path);
      
          if(!m_db.open())
              qDebug() << "Error: connection with database failed";
          else
              qDebug() << "Database: connection ok";
          qDebug() << m_db.lastError().text();
      }
      

      When i used in this way and set the path's value to a wrong value it returns empty text. no error. and output is "Database: connection ok" but actually its not ok.

      jsulmJ 1 Reply Last reply
      0
      • M masa4

        @jsulm Thank you for advice. I added it like:

        DB::DB(const QString &path)
        {
            m_db = QSqlDatabase::addDatabase("QSQLITE");
            m_db.setDatabaseName(path);
        
            if(!m_db.open())
                qDebug() << "Error: connection with database failed";
            else
                qDebug() << "Database: connection ok";
            qDebug() << m_db.lastError().text();
        }
        

        When i used in this way and set the path's value to a wrong value it returns empty text. no error. and output is "Database: connection ok" but actually its not ok.

        jsulmJ Offline
        jsulmJ Offline
        jsulm
        Lifetime Qt Champion
        wrote on last edited by
        #9

        @masa4 You wrote before: "my sql queries does not run". So, please add error handling in the code where you're executing SQL queries to see what exactly the problem is (https://doc.qt.io/qt-6/qsqlquery.html#lastError).

        https://forum.qt.io/topic/113070/qt-code-of-conduct

        M 1 Reply Last reply
        0
        • E Offline
          E Offline
          Emre MUTLU
          wrote on last edited by
          #10

          maybe your quaries not work right cause your code work for me

          1 Reply Last reply
          0
          • jsulmJ jsulm

            @masa4 You wrote before: "my sql queries does not run". So, please add error handling in the code where you're executing SQL queries to see what exactly the problem is (https://doc.qt.io/qt-6/qsqlquery.html#lastError).

            M Offline
            M Offline
            masa4
            wrote on last edited by masa4
            #11

            @jsulm
            one function in db.cpp:

            double DB::selectData()
            {
                QSqlQuery query;
                query.prepare("SELECT col1 FROM mytable");
            
                if(query.exec()){
                    query.first();
                    return query.value(0).toDouble();
                }
                else{
                    query.lastError().text();
                    return -1;
                }
            }
            

            mainwidget.h:

            public:
            DB *db = new DB;
            

            mainwidget.cpp:

            ui->labeldb->setText(QString::number(db->selectData()));
            

            When path value is setted to like "mydbname" the return value -1 show up on my label. If i corrected path with absolute value like "/home/projectfolder/mydbname" i got right value on my label(its 10)
            But still no error messages. Error messages show as empty text, like this: ""

            jsulmJ 1 Reply Last reply
            0
            • M masa4

              @jsulm
              one function in db.cpp:

              double DB::selectData()
              {
                  QSqlQuery query;
                  query.prepare("SELECT col1 FROM mytable");
              
                  if(query.exec()){
                      query.first();
                      return query.value(0).toDouble();
                  }
                  else{
                      query.lastError().text();
                      return -1;
                  }
              }
              

              mainwidget.h:

              public:
              DB *db = new DB;
              

              mainwidget.cpp:

              ui->labeldb->setText(QString::number(db->selectData()));
              

              When path value is setted to like "mydbname" the return value -1 show up on my label. If i corrected path with absolute value like "/home/projectfolder/mydbname" i got right value on my label(its 10)
              But still no error messages. Error messages show as empty text, like this: ""

              jsulmJ Offline
              jsulmJ Offline
              jsulm
              Lifetime Qt Champion
              wrote on last edited by
              #12

              @masa4 said in Sqlite connection weird thing:

              But still no error messages

              Of course not - you are not printing the error message...

              qDebug() << query.lastError().text();
              

              https://forum.qt.io/topic/113070/qt-code-of-conduct

              M 1 Reply Last reply
              0
              • E Offline
                E Offline
                Emre MUTLU
                wrote on last edited by Emre MUTLU
                #13
                double DB::selectData()
                {
                    QSqlQuery query;
                    query.prepare("SELECT col1 FROM mytable");
                
                    if(query.exec()){
                       while(query.first()) {
                        return query.value(0).toDouble();
                      }
                    }
                    else{
                        qDebug()<<query.lastError();
                        return -1;
                    }
                }
                

                try this

                M jsulmJ 2 Replies Last reply
                0
                • jsulmJ jsulm

                  @masa4 said in Sqlite connection weird thing:

                  But still no error messages

                  Of course not - you are not printing the error message...

                  qDebug() << query.lastError().text();
                  
                  M Offline
                  M Offline
                  masa4
                  wrote on last edited by
                  #14

                  @jsulm ow sorry didnt realize it. its:

                  "No query Unable to fetch row"
                  
                  1 Reply Last reply
                  0
                  • E Emre MUTLU
                    double DB::selectData()
                    {
                        QSqlQuery query;
                        query.prepare("SELECT col1 FROM mytable");
                    
                        if(query.exec()){
                           while(query.first()) {
                            return query.value(0).toDouble();
                          }
                        }
                        else{
                            qDebug()<<query.lastError();
                            return -1;
                        }
                    }
                    

                    try this

                    M Offline
                    M Offline
                    masa4
                    wrote on last edited by
                    #15

                    @Emre-MUTLU said in Sqlite connection weird thing:

                    if(query.exec()){
                    while(query.first()) {
                    return query.value(0).toDouble();
                    }
                    }

                    nope. same error. But actual problem is this code works when i use absolute path. But not for relative path.

                    1 Reply Last reply
                    0
                    • E Offline
                      E Offline
                      Emre MUTLU
                      wrote on last edited by
                      #16

                      did you check db is open when you trying to using query

                      1 Reply Last reply
                      0
                      • E Offline
                        E Offline
                        Emre MUTLU
                        wrote on last edited by Emre MUTLU
                        #17
                        double DB::selectData()
                        {
                          if(db.open()) {
                            QSqlQuery query;
                            query.prepare("SELECT col1 FROM mytable");
                        
                            if(query.exec()){
                               while(query.first()) {
                                return query.value(0).toDouble();
                              }
                            } else{
                                qDebug()<<query.lastError();
                                return -1;
                            }
                        }else {
                        qDebug()<<db.lastError();
                        }
                        }
                        

                        something like this

                        1 Reply Last reply
                        0
                        • E Emre MUTLU
                          double DB::selectData()
                          {
                              QSqlQuery query;
                              query.prepare("SELECT col1 FROM mytable");
                          
                              if(query.exec()){
                                 while(query.first()) {
                                  return query.value(0).toDouble();
                                }
                              }
                              else{
                                  qDebug()<<query.lastError();
                                  return -1;
                              }
                          }
                          

                          try this

                          jsulmJ Offline
                          jsulmJ Offline
                          jsulm
                          Lifetime Qt Champion
                          wrote on last edited by
                          #18

                          @Emre-MUTLU You should also check the return value of query.prepare("SELECT col1 FROM mytable");
                          Try also:

                          QSqlQuery query("SELECT col1 FROM mytable");
                          

                          https://forum.qt.io/topic/113070/qt-code-of-conduct

                          E M 3 Replies Last reply
                          0
                          • jsulmJ jsulm

                            @Emre-MUTLU You should also check the return value of query.prepare("SELECT col1 FROM mytable");
                            Try also:

                            QSqlQuery query("SELECT col1 FROM mytable");
                            
                            E Offline
                            E Offline
                            Emre MUTLU
                            wrote on last edited by Emre MUTLU
                            #19

                            @jsulm

                            double DB::selectData()
                            {
                              if(db.open()) {
                                QSqlQuery query("SELECT col1 FROM mytable");
                                if(query.exec()){
                                   while(query.first()) {
                                    return query.value(0).toDouble();
                                  }
                                } else{
                                    qDebug()<<query.lastError();
                                    return -1;
                                }
                            }else {
                            qDebug()<<db.lastError();
                            }
                            }
                            
                            jsulmJ 1 Reply Last reply
                            0
                            • jsulmJ jsulm

                              @Emre-MUTLU You should also check the return value of query.prepare("SELECT col1 FROM mytable");
                              Try also:

                              QSqlQuery query("SELECT col1 FROM mytable");
                              
                              M Offline
                              M Offline
                              masa4
                              wrote on last edited by
                              #20

                              @jsulm said in Sqlite connection weird thing:

                              isopen returns true. query.prepare() returns false.

                              jsulmJ 1 Reply Last reply
                              0
                              • E Emre MUTLU

                                @jsulm

                                double DB::selectData()
                                {
                                  if(db.open()) {
                                    QSqlQuery query("SELECT col1 FROM mytable");
                                    if(query.exec()){
                                       while(query.first()) {
                                        return query.value(0).toDouble();
                                      }
                                    } else{
                                        qDebug()<<query.lastError();
                                        return -1;
                                    }
                                }else {
                                qDebug()<<db.lastError();
                                }
                                }
                                
                                jsulmJ Offline
                                jsulmJ Offline
                                jsulm
                                Lifetime Qt Champion
                                wrote on last edited by jsulm
                                #21

                                @Emre-MUTLU said in Sqlite connection weird thing:

                                double DB::selectData()
                                {
                                if(db.open()) {
                                QSqlQuery query("SELECT col1 FROM mytable");
                                if(query.exec()){
                                while(query.first()) {
                                return query.value(0).toDouble();
                                }
                                } else{
                                qDebug()<<query.lastError();
                                return -1;
                                }
                                }else {
                                qDebug()<<db.lastError();
                                }
                                }

                                You forgot to mention whether this version works...

                                https://forum.qt.io/topic/113070/qt-code-of-conduct

                                1 Reply Last reply
                                0
                                • M masa4

                                  @jsulm said in Sqlite connection weird thing:

                                  isopen returns true. query.prepare() returns false.

                                  jsulmJ Offline
                                  jsulmJ Offline
                                  jsulm
                                  Lifetime Qt Champion
                                  wrote on last edited by
                                  #22

                                  @masa4 said in Sqlite connection weird thing:

                                  query.prepare() returns false.

                                  Then print the error just after query.prepare()

                                  https://forum.qt.io/topic/113070/qt-code-of-conduct

                                  M 1 Reply Last reply
                                  0
                                  • jsulmJ jsulm

                                    @Emre-MUTLU You should also check the return value of query.prepare("SELECT col1 FROM mytable");
                                    Try also:

                                    QSqlQuery query("SELECT col1 FROM mytable");
                                    
                                    M Offline
                                    M Offline
                                    masa4
                                    wrote on last edited by
                                    #23

                                    @jsulm Same error. And i think there is nothing wrong with my sql queries. Because they work if i set dbname with absolute path.

                                    1 Reply Last reply
                                    0
                                    • jsulmJ jsulm

                                      @masa4 said in Sqlite connection weird thing:

                                      query.prepare() returns false.

                                      Then print the error just after query.prepare()

                                      M Offline
                                      M Offline
                                      masa4
                                      wrote on last edited by
                                      #24

                                      @jsulm the error(i replaced mytable with my table name by the way):

                                      "no such table: mytable Unable to execute statement"
                                      
                                      jsulmJ 1 Reply Last reply
                                      0
                                      • M masa4

                                        @jsulm the error(i replaced mytable with my table name by the way):

                                        "no such table: mytable Unable to execute statement"
                                        
                                        jsulmJ Offline
                                        jsulmJ Offline
                                        jsulm
                                        Lifetime Qt Champion
                                        wrote on last edited by
                                        #25

                                        @masa4 said in Sqlite connection weird thing:

                                        no such table: mytable Unable to execute statement

                                        And does this table really exist? If a new SQLite database file is created there are no tables and you have to create them first.

                                        https://forum.qt.io/topic/113070/qt-code-of-conduct

                                        M 1 Reply Last reply
                                        0
                                        • jsulmJ jsulm

                                          @masa4 said in Sqlite connection weird thing:

                                          no such table: mytable Unable to execute statement

                                          And does this table really exist? If a new SQLite database file is created there are no tables and you have to create them first.

                                          M Offline
                                          M Offline
                                          masa4
                                          wrote on last edited by
                                          #26

                                          @jsulm Yes of course this table exist. Also i can read from this table. But I have to provide full path of sqlite file to setDatabaseName method.

                                          db.setDatabaseName("/home/projectfolder/mydbfile"); //Absolute path - Works without any problem
                                          db.setDatabaseName("mydbfile"); //Relative path - Does not work
                                          

                                          I got this errors when i use relative path. But i want to use relative path, database file is inside the project folder.

                                          jsulmJ 1 Reply Last reply
                                          0

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved