diff --git a/include/dbStructureView.h b/include/dbStructureView.h index 7baff8e..faf1d5d 100644 --- a/include/dbStructureView.h +++ b/include/dbStructureView.h @@ -31,6 +31,7 @@ private: QString m_curConnection; //用来记录当前链接,只能存在一个链接 void initView(); + void openConnection(const QString&); void connectToDB(const QString&); void disconnectToDB(const QString&); void removeNode(DBStructureNode*); diff --git a/source/dbManager.cpp b/source/dbManager.cpp index f149290..546bbfe 100644 --- a/source/dbManager.cpp +++ b/source/dbManager.cpp @@ -40,7 +40,8 @@ bool DatabaseManager::addDatabase(const DatabaseConfig& config) for(auto i = m_configs.constBegin(); i != m_configs.constEnd(); i++) { DatabaseConfig c = i.value(); - if(config.strHost == c.strHost && config.nPort == c.nPort) + if(config.strHost == c.strHost && config.nPort == c.nPort && config.strDBType == c.strDBType + && config.strDBName == c.strDBName) { QSqlError error(QString::fromWCharArray(L"配置信息错误"), QString::fromWCharArray(L"'%1' 具有相同配置信息").arg(c.strConnectionName), @@ -77,10 +78,11 @@ bool DatabaseManager::connect(const QString& strConnectionName) if(!db.open()) { + QString errorText = db.lastError().databaseText(); LOG_ERROR("DB", QString("DB: %1 open failed. connectionName: %2. error: %3") .arg(config.strDBName) .arg(strConnectionName) - .arg(db.lastError().databaseText())); + .arg(QString::fromLocal8Bit(errorText.toLatin1()))); emit errorOccurred(strConnectionName, QString::fromWCharArray(L"数据库打开失败,详情可见日志文件")); QSqlDatabase::removeDatabase(strConnectionName); return false; diff --git a/source/dbStructureView.cpp b/source/dbStructureView.cpp index 0496bbe..534245c 100644 --- a/source/dbStructureView.cpp +++ b/source/dbStructureView.cpp @@ -52,6 +52,12 @@ void DBStructureView::initView() connect(this, &QTreeView::customContextMenuRequested, this ,&DBStructureView::showContextMenu); } +void DBStructureView::openConnection(const QString& connection) +{ + connectToDB(connection); + m_curConnection = connection; +} + void DBStructureView::connectToDB(const QString& connName) { DBStructureModel* model = dynamic_cast(this->model()); @@ -154,17 +160,10 @@ void DBStructureView::itemDoubleClick(const QModelIndex& index) DBStructureNode* node = static_cast(index.internalPointer()); if(node->type() == ConnectionNode) { - if(!m_curConnection.isEmpty()) //先断掉当前链接 - { - disconnectToDB(m_curConnection); - m_curConnection = ""; - } - - if(node->status() == Disconnect) - { - connectToDB(node->name()); - m_curConnection = node->name(); - } + //先断掉当前链接 + disconnectCurConnection(); + //打开新链接 + openConnection(node->name()); } else if(node->type() == GroupNode) { @@ -188,14 +187,17 @@ void DBStructureView::showContextMenu(const QPoint& pos) QString connName = node->name(); CustomMenu menu; menu.addAction(QString::fromWCharArray(L"链接"), [this, &connName]{ - connectToDB(connName); + //先断掉当前链接 + disconnectCurConnection(); + //打开新链接 + openConnection(connName); //展开链接 DBStructureModel* model = dynamic_cast(this->model()); QModelIndex index = model->getConnNodeIndex(connName); if(model && index.isValid()) expand(index); })->setEnabled(!isConnected); - menu.addAction(QString::fromWCharArray(L"断开链接"), [this, &connName]{disconnectToDB(connName);})->setEnabled(isConnected); + menu.addAction(QString::fromWCharArray(L"断开链接"), [this, &connName]{disconnectCurConnection();})->setEnabled(isConnected); menu.addAction(QString::fromWCharArray(L"刷新"), [this, &connName]{ DBStructureModel* model = dynamic_cast(this->model()); if(model)