PostgreSql Query wont show tables form DB



  • Hello Everybody,
    I Have the following part of code where i set my connection:

     QSqlDatabase DataBaseSample=QSqlDatabase::addDatabase("QPSQL","Sample");
     void setSample(){
             DataBaseSample.setDatabaseName("MyDbName");
             DataBaseSample.setUserName("myuser");
             DataBaseSample.setPassword("mypw");
             DataBaseSample.setHostName("mysite.xy");
             bool ok=DataBaseSample.open();
    }
    ...
    

    And after that i have the following code which is list of all the Tables from the given DB:

        QStringList Tableslist(int DBID){
            QSqlDatabase Current=db->ReturnDataBase(DBID);
            return Current.tables();
        }
    ...
        QSqlTableModel *model=MC.TableReturn(Choose);
        model->setTable(Tabletoshow);
        model->select();
        ui->tableView->setModel(model);
    ...
    

    i wanted to check with wireshark where i got wrong but Postgre is encrypt better than mysql.
    So code is working with MySql but not with PostgreSql what should i do?

    Thank you for your answer


  • Lifetime Qt Champion

    Hi,

    First thing would be to check the value returned by the open call and then check for errors on the other parts of your code.



  • @SGaist

    According to qDebug that i didnt include in my code(i copied wrong):

     void setSample(){
             DataBaseSample.setDatabaseName("MyDbName");
             DataBaseSample.setUserName("myuser");
             DataBaseSample.setPassword("mypw");
             DataBaseSample.setHostName("mysite.xy");
             bool ok=DataBaseSample.open();
             qDebug()<<"Connection established:"<<ok;
             qDebug()<<DataBaseSample.lastError().text();
    }
    

    which is returns with true and ""

    And i dont know any other problems because its work with mysql


  • Lifetime Qt Champion

    You should also check the QSqlTableModel::lastError just in case.

    And maybe a silly question but are you sure that your PostgreSQL database contains the same content as your MySQL database ?



  • @SGaist

    Sorry for late answer. LastError dont report any problem either. In the Tables completely the same as the MySQL table scheme... If this application wasn't be used widely, i would not care about PostgreSQL .
    It is started to frustrate me that i spend days to configure sql databases in different configuration and they're mess with me indirectly...


  • Lifetime Qt Champion

    Then maybe something specific to PostgreSQL, are you using the default schema ?

    In doubt, this small blog article gives a nice overview of the PostgreSQL schema.



  • Can you show us the body of db->ReturnDataBase(DBID); and MC.TableReturn(Choose);?



  • @SGaist
    i have a schame named public. with DataGrip show both way,

    select * 
    from  public.Table
    --or simply Table
    

    @VRonin

    QSqlTableModel *TableReturn(int DBID){
    
            QSqlTableModel *model = new QSqlTableModel(nullptr,db->ReturnDataBase(DBID));
            qDebug()<<model->tableName();
            return model;
        }
    
      QSqlDatabase ReturnDataBase(int DBID){
             QSqlDatabase db;
             if(DBID==0){
                   setmydb1();
                db=QSqlDatabase::database("mydb0");
                return db;
             }else if (DBID==1) {
                    setmydb1();
                 db=QSqlDatabase::database("mydb1");
                 return db;
             }
            ...
                return db;
    
         }
    

    i dont know how efficient is this.


  • Lifetime Qt Champion

    What does setmydb1 do ? It's called for both databases.



  • @SGaist

    setmydb1 is like SetSample with different cities, (i don't want to use real data if that is not a problem). And i know it is harder to help when i do stuff like this, so sorry about that
    EDIT1:I finally figured out... Sample is not equal sample... I named the DB as Sample and i wanted to return with sample
    EDIT2: now its list the tables, but not the content of it...
    EDIT3: for example model->setTable("\"City\""); does the trick

    Thank you for your answers!



  • This post is deleted!

  • Lifetime Qt Champion

    Are you sure you setup the database properly ?

    I find it very strange that you have to add double quotes around the table name to be able to access its content.



  • @SGaist
    The Double quotes used by pgadmin 4 and DataGrip too. So probably the same as the `tablename` in the Mysql syntax but its obligatory in PostgreSQL


  • Lifetime Qt Champion

    After verification, here you can find why double quotes should be used.



  • @SGaist

    Thanks For you Help


Log in to reply