PDA

View Full Version : what is prudent as far as closing connections etc?



landonmkelsey
3rd September 2008, 21:47
this code works!

edit works! table grid changes show up in database

However, I get error on closing the window!:


QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.


database queries from a client work! What is ceasing to work?



#include <QtGui>

#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QSqlTableModel>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("landonx");
db.setUserName("landon4");
db.setPassword("Kateaux3141");
db.setConnectOptions(QString("CLIENT_INTERACTIVE"));
bool ok = db.open();

QSqlTableModel *model = new QSqlTableModel();
model->setTable( "log_book" );
model->setEditStrategy(QSqlTableModel::OnFieldChange);

model->select();
model->setHeaderData( 0, Qt::Horizontal, QObject::tr("rowid") );
model->setHeaderData( 1, Qt::Horizontal, QObject::tr("fdate") );
model->setHeaderData( 2, Qt::Horizontal, QObject::tr("acid") );
model->setHeaderData( 3, Qt::Horizontal, QObject::tr("actype") );
model->setHeaderData( 4, Qt::Horizontal, QObject::tr("nlandings") );
model->setHeaderData( 5, Qt::Horizontal, QObject::tr("nhours") );
QTableView *view = new QTableView();
view->setModel( model );
view->show();

// db.close(); keeps edit from working OF COURSE

return app.exec();
}



This is all I can think of at present!

Still have error message:



QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.







#include <QtGui>

#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QSqlTableModel>
#include <QtDebug>
void QWidget::closeEvent(QCloseEvent * e)
{
qDebug()<<"closing";
QSqlDatabase defaultDB = QSqlDatabase::database();
defaultDB.close();
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("landonx");
db.setUserName("landon4");
db.setPassword("Kateaux3141");
db.setConnectOptions(QString("CLIENT_INTERACTIVE"));
bool ok = db.open();
// QSqlDatabase defaultDB = QSqlDatabase::database();

QSqlTableModel *model = new QSqlTableModel();
model->setTable( "log_book" );
model->setEditStrategy(QSqlTableModel::OnFieldChange);

model->select();
model->setHeaderData( 0, Qt::Horizontal, QObject::tr("rowid") );
model->setHeaderData( 1, Qt::Horizontal, QObject::tr("fdate") );
model->setHeaderData( 2, Qt::Horizontal, QObject::tr("acid") );
model->setHeaderData( 3, Qt::Horizontal, QObject::tr("actype") );
model->setHeaderData( 4, Qt::Horizontal, QObject::tr("nlandings") );
model->setHeaderData( 5, Qt::Horizontal, QObject::tr("nhours") );
QTableView *view = new QTableView();
view->setModel( model );
view->setAlternatingRowColors ( true );
view->setFixedSize ( 800,500 );
view->show();

// db.close();

return app.exec();
}

jacek
4th September 2008, 00:06
You create the model on the heap and you don't destroy it after app.exec() returns. So the "db" gets destroyed first.

Try:
...
int ret = app.exec();
delete view;
delete model;
return ret;

landonmkelsey
4th September 2008, 02:53
THAT WORKED! Thanks!

Some years in the past I had to do something similar!

Even when one is following a "wrong track", one learns something!

Perhaps more!