Jacob Elder wrote:
On Tue, Apr 09, 2002 at 11:13:09AM +0100, Martin Harriss wrote:
I am using Embperl on an intranet system to perform complex database
searches and display the results.
My problem is that, depending on the parameters given by the user, some
searches can take some time - returning thousands of rows, and there is a
danger that the user will hit the stop button, execute the Back command or
even close the browser session altogether. If this happens at the wrong
time, an oracle connection could have been made, but no SQL sent to it,
leaving an Oracle process hanging there.
I need to be able to trap these browser events, and I can then call a
cleanup routine to close any database connections. I can use the
Javascript onUnload event, I can't figure how to commmuncate with the Perl
process.
I don't remember where I saw this, but I think it might be what you're
looking for.
while ($dbh-fetch) {
# format, print, etc.
last if $r-connection-aborted;
}
$dbh-disconnect;
Remember that if you're using Apache::DBI, your database connection will
be persistant anyway, so that's not a total waste :) The above code's
still a good idea (although the $dbh-disconnect will be silently
ignored under Apache::DBI) as it will still free the process (or thread
soon :)) which is dealing with the current response, which would
otherwise still have lots of work to do for a client who's no longer
interested.
Issac