QSqlDatabasePrivate::addDatabase: 重复的连接名称'MyConnection'错误

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

本文关键字:MyConnection 错误 连接 addDatabase QSqlDatabasePrivate      更新时间:2023-10-16

我已经在C Inorder中编写了QT程序,以访问数据库并加载数据库表来表达表视图!我的程序没有显示任何编译错误,但给出了2个运行时错误

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

主要有MainWindow的类(具有数据库连接方法)和对话框以下是我的代码

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

MainWindow表单用于登录,对话框用于将数据库表中的条目检索到表视图我该如何纠正问题?

QSqlDatabase::addDatabase是一个静态函数,每次调用它时,都会创建一个连接实例。因此,如果您的应用程序仅建立了与数据库服务器的单个连接,则不应将其调用一次。

QSQLDATABASE QSQLDATABASE :: ADDDATABASE(const qString& type,const qString&connectName = qlatin1string(defaultConnection)(DefaultConnection))

使用驱动程序将数据库添加到数据库连接列表 类型和连接名称connectionName。如果已经存在 数据库连接称为connectionName,该连接已删除。

您可能需要将打开数据库代码(包括QSqlDatabase::addDatabase)的逻辑移动到整个应用程序中仅被调用一次的地方。