Название: незакрывается подключение к БД после запросов
Отправлено: zloyGamer от Декабря 01, 2009, 06:26
подскажите как поправить, или что тут может быть не так, к примеру простая форма с несколькими кнопками и вьюхой: #ifndef form_query_H #define form_query_H
#include "..."
namespace Ui { class form_query; }
class form_query : public QWidget { Q_OBJECT public: form_query(QWidget *parent = 0); ~form_query();
private: Ui::form_query *ui; QSqlDatabase db; QSqlQueryModel m_model;
public slots: void _on__connect_refresh(); void _on__connect(); void _on__disconnect(); void _on__remove_connect(); void _on__connect_select(); };
#endif // form_query_H
#include "form_query.h" #include "..." //------------------------------------------------------------------------------------------------- form_query::form_query(QWidget *parent) : QWidget(parent), ui(new Ui::form_query) { ui->setupUi(this); } //------------------------------------------------------------------------------------------------- form_query::~form_query() { delete ui; } //------------------------------------------------------------------------------------------------- void form_query::_on__connect_refresh() {
if(db.isValid()) ui->label_test2->setText( ui->label_test2->text() + " db_is_valid");
if(db.isOpen()) ui->label_test2->setText( ui->label_test2->text() + " db_is_open");
if( m_model.query().isActive()) ui->label_test2->setText( ui->label_test2->text() + " query_is_active");
} //------------------------------------------------------------------------------------------------- void form_query::_on__connect() { ui->label_test2->setText("_on__connect"); QSqlDatabase::removeDatabase( "test" );
db = QSqlDatabase::addDatabase( "QIBASE" , "test" );
db.setHostName( "127.0.0.1" ); db.setPort( 3050 ); db.setDatabaseName( "D:\\test.FDB" ); db.setConnectOptions( "" ); db.setUserName( "SYSDBA" ); db.setPassword( "masterkey" );
db.open();
_on__connect_refresh(); } //------------------------------------------------------------------------------------------------- void form_query::_on__disconnect() { ui->label_test2->setText("_on__disconnect"); db.close(); _on__connect_refresh(); } //------------------------------------------------------------------------------------------------- void form_query::_on__remove_connect() { ui->label_test2->setText("_on__remove_connect"); db.removeDatabase("test"); _on__connect_refresh(); } //------------------------------------------------------------------------------------------------- void form_query::_on__connect_select() { ui->label_test2->setText("_on__connect_select"); QSqlQuery q("SELECT * FROM ui_table",db); m_model.setQuery(q); ui->view->setModel(&m_model); _on__connect_refresh(); }
вообщем при нажатии на _on__connect_refresh(); - срабатывает в любом случае и выдает кое какие данные, и если подключиться к бд (_on__connect() ) а потом вызвать _on__disconnect() то все ок,: FB вначале выдает что было 1 соединение а потом 0, но если после _on__connect() вызвать _on__connect_select() и _on__disconnect() то соединение остается! что может мешать разорвать соединение?
Название: Re: незакрывается подключение к БД после запросов
Отправлено: ecspertiza от Декабря 01, 2009, 09:23
Попробуй в on_disconnect перед db.close() прописать QSqlDatabase::database().removeDatabase(QSqlDatabase::database().connectionName());
Название: Re: незакрывается подключение к БД после запросов
Отправлено: zloyGamer от Декабря 03, 2009, 07:04
нет не помогло, QSqlDatabase::database().removeDatabase(QSqlDatabase::database().connectionName()); //ни этот db.removeDatabase("test"); //ни тупо этот вариант db.close(); и вообще мне кажется это бессмысленно, чтоб отрубить подключение - должно быть достаточно просто db.close(); или я ошибаюсь? есть другие варианты?
Название: Re: незакрывается подключение к БД после запросов
Отправлено: lit-uriy от Декабря 03, 2009, 08:17
Сделай переменную QSqlDatabase db; локальной, а не общей для класса.
Название: Re: незакрывается подключение к БД после запросов
Отправлено: zloyGamer от Декабря 04, 2009, 02:52
Сделай переменную QSqlDatabase db; локальной, а не общей для класса. проверил, некатит, тоже самое получается - коннект остается, и при следующем подключении создается новый коннект! какие могут быть варианты?
|