• 4893阅读
  • 3回复

DB问题,没人知道吗?我第二次问了,急急急急!!! [复制链接]

上一主题 下一主题
离线zhangrui241
 
只看楼主 倒序阅读 楼主  发表于: 2009-04-03
removeDatabase: connection '**' is still in use, all queries will cease to work.
如题,
出现这个错误。
“**”为DB的名字,我看那个精华里面有解释,谁能解释的详细一点儿啊

摘自:【原创】常见的几个Qt编程问题的处理

20、删除数据库时出现"QSqlDatabasePrivate::removeDatabase: connection 'xxxx' is still in use, all queries will cease to work"该如何处理
答:出现此种错误是因为使用了连接名字为xxxx的变量作用域没有结束,解决方法是在所有使用了xxxx连接的数据库组件变量的作用域都结束后再使用QSqlDatabase::removeDatabae("xxxx")来删除连接。
离线carbuncle
只看该作者 1楼 发表于: 2009-04-03
告诉你种不太好看的写法

{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "xxx");
}
QSqlDatabase::removeDatabase("xxx");

不过使用数据库的时候,不要有事没事的不停建立连接,断开连接
离线zhangrui241
只看该作者 2楼 发表于: 2009-04-03
我现在有两个类都需要用DB连接,这样就得连接两次,DB就会出错,怎么能让他只连接一次呢?
建个超类?两个类都继承这个超类?
还是有什么好办法?
离线aaaaa007

只看该作者 3楼 发表于: 2009-09-03
引用第2楼zhangrui241于2009-04-03 11:48发表的  :
我现在有两个类都需要用DB连接,这样就得连接两次,DB就会出错,怎么能让他只连接一次呢?
建个超类?两个类都继承这个超类?
还是有什么好办法?


给每个数据库连接指定一个唯一的connectionName,不然建立第二个连接的时候第一个连接就会自动断开

可以考虑封装一个专门用于连接数据库的类,在构造函数中把connectionName作为一个参数,连接的时候指定这个参数.
比如:
/*dbConnection.h*/
class dbConnection : public QObject
{
    Q_OBJECT

public:
    dbConnection(const QString &fileName);
    bool createConnection(QString connectionName);
    bool createConnection();
    void open();
    void close();
......
};
/*dbConnection.cpp*/
bool dbConnection::createConnection(QString connectionName)
{
    db=QSqlDatabase::addDatabase(dbType,connectionName);
        ......
}
快速回复
限100 字节
 
上一个 下一个