修改通过右键打开数据库时无法取到链接名称的bug

This commit is contained in:
duanshengchao 2025-04-03 09:45:47 +08:00
parent d0bd059ffe
commit 933f051bff
3 changed files with 20 additions and 15 deletions

View File

@ -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*);

View File

@ -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;

View File

@ -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<DBStructureModel*>(this->model());
@ -154,17 +160,10 @@ void DBStructureView::itemDoubleClick(const QModelIndex& index)
DBStructureNode* node = static_cast<DBStructureNode*>(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<DBStructureModel*>(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<DBStructureModel*>(this->model());
if(model)