QSqlDatabasePrivate::addDatabase: duplicate connection name 'MyConnection' error



  • I have written a Qt program in c++ inorder to access a database and load database tables to table view! My program does not show any compile errors but gives 2 runtime errors

    QSqlDatabasePrivate::removeDatabase: connection 'MyConnection' is still in use, all queries will cease to work.
    QSqlDatabasePrivate::addDatabase: duplicate connection name 'MyConnection', old connection removed.
    

    There are mainly to classes namely MainWindow(Has database connection methods) and Dialog Following are my codes

    MainWindow.h

    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
    
    public: QSqlDatabase mydb;
            bool conOpen(QString userName,QString password,QString hostname,int port,QString service){
                mydb=QSqlDatabase::addDatabase("QOCI","MyConnection");
                mydb.setUserName(userName);
                mydb.setPassword(password);
                mydb.setHostName(hostname);
                mydb.setPort(port);
                mydb.setDatabaseName(service);
                return mydb.open();
    
    }
    

    MainWindow.cpp

    void MainWindow::on_pushButton_clicked()
    {
        Dialog *dialog1 = new Dialog(this);
       if(conOpen(ui->uname->text(),ui->pword->text(),ui->ip->text(),ui->port->text().toInt(),ui->service->text())){
    
            dialog1->show();
    }
    

    Dialog.h

    class Dialog : public QDialog
    {
        Q_OBJECT
    
    public:
        explicit Dialog(QWidget *parent = 0);
        ~Dialog();
    
    private slots:
        void on_pushButton_clicked();
    

    Dialog.cpp

    void Dialog::on_pushButton_clicked()
    {
    
        QSqlQueryModel *modal = new QSqlQueryModel();
        if(QSqlDatabase::contains("MyConnection")){
    
            QSqlQuery* qry=new QSqlQuery(QSqlDatabase::database("MyConnection"));
            qry->prepare("select NAME FROM Employees");
               qry->exec();
            modal->setQuery(*qry);
          ui->tableView->setModel(modal);
    
        }
    }
    

    The MainWindow form is used for login and Dialog form is used to retrieve entries in database table to a table view How can I correct the issue?

    Please take care to use the code tags where appropriate when making a post ~kshegunov

    [Added code tags ~kshegunov]


  • Qt Champions 2018

    @Lasith You should open the database only once. Currently you do it each time button is pressed.