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

    @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
                                      • M masa4

                                        @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 Offline
                                        jsulmJ Offline
                                        jsulm
                                        Lifetime Qt Champion
                                        wrote on last edited by
                                        #27

                                        @masa4 said in Sqlite connection weird thing:

                                        db.setDatabaseName("mydbfile"); //Relative path - Does not work

                                        Are you aware that mydbfile is not the same as /home/projectfolder/mydbfile?
                                        The first one is inside current working directory, which is most probably not /home/projectfolder (so you're creating a new file).

                                        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:

                                          db.setDatabaseName("mydbfile"); //Relative path - Does not work

                                          Are you aware that mydbfile is not the same as /home/projectfolder/mydbfile?
                                          The first one is inside current working directory, which is most probably not /home/projectfolder (so you're creating a new file).

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

                                          @jsulm Ow, now i see the point. The db inside the code folder, but current working folder name is actually build-project-desktop-debug. Yeah now issue clarified.

                                          JonBJ 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