[PyQt] PyQt book: problem with database example
Mark Summerfield
mark at qtrac.eu
Thu Jan 10 15:51:53 GMT 2008
On 2008-01-10, Phil Thompson wrote:
> On Thursday 10 January 2008, Mark Summerfield wrote:
> > On 2008-01-09, Sibylle Koczian wrote:
> > > Hello,
[snip]
> > > - After leaving the application I get the error message
> > > "QSqlDatabasePrivate::removeDatabase: connection
> > > 'qt_sql_default_connection' is still in use, all queries will cease to
> > > work." I have had this message in my own programs - it went away,
> > > when I didn't define a "main" funktion, but put its content directly
> > > under "if __name__ == '__main__':". But I never understood why this
> > > should be so.
[snip]
> > The error message is harmless, but annoying. I don't think it is due to
> > any bug in the application, but rather a problem in PyQt regarding the
> > lifetime of the default connection, so I'm passing the buck to Phil on
> > this one.
>
> Yes it's to do with the (random) order that objects get garbage collected
> when the interpreter exits. You need to make sure that the objects that
> internally reference the default connection are deleted before the
> QApplication instance.
>
> In the case of assetmanager placing the following lines after the call to
> app.exec_() does the trick...
>
> del form
> del db
>
> Unfortunately I can't do anything about this as QSqlDatabase isn't a
> QObject, or even has a virtual dtor.
This works for the assetmanager.pyw application (and I'll put it in a
new zip & tarball when I make them in the next few days when I switch
the license to GPL 2). But if you change
sys.exit(app.exec_())
to
app.exec_()
del form
del db
in the phone log applications they still produce the error message...
--
Mark Summerfield, Qtrac Ltd., www.qtrac.eu
More information about the PyQt
mailing list