[Lazarus] Handling Firebird connection
Richard Mace
richard.mace at gmail.com
Mon Aug 25 12:09:19 CEST 2014
Antonia,
Many thanks for your reply.
I'll re-code my app and do some more testing.
Richard
On 25 August 2014 09:19, SPRL AFOR <aforsprl at gmail.com> wrote:
> Le 25/08/2014 09:32, Richard Mace a écrit :
>
> Hi all,
>
> I have the following code that I use to connect to a Firebird database,
> which works fine, however, if the Firebird server becomes unavailable,
> fIBConnection.Connected always returns true. What's the best way of
> checking to make sure that the Firebird server is still available before I
> attempt to connect to the database?
>
>
> AFAIK the TIbConnection is based upon TSQLConnection itself based upon
> the TDatabase component. In all this chain the Connected property is
> defined in the latest component, the TDatabase. And the Connected property
> has a read function wich sends a boolean variable content (FConnected
> variable). That's why once the first connection has been established with
> the Firebird server (whether is succeeds or not), the connection status is
> kept thru all component life until next disconnect or re-connect operation
> takes place.
> To solve the situation when the link to the databse server is broken I
> rely on the transaction mechanism. In fact I always control the transaction
> state allowing any query to be executed, as the Firebird server requires
> that any database access has to be done under the control of a transaction.
> This means thar when the MyTrans.StartTransaction fails I know (most of the
> times) that the link to the FB server is broken (omitting programmatic
> errors which can be controlled or checkced in another way). This does not
> protect your code from a connection exception between two consecutive
> database access (two consecutive calls to the fbclient library anyway).
> When I need a fine tuned control over a database access, after a initial
> MyDB.Connected := True, I always use the same sequence:
>
> try
> MyDatabase.Connedted := True;
> except
> on ...(exception process) do ... connection fault
> end
> [...] prepare data for the database
> try
> MyTransaction;StartTransaction
> try
> do whatever has to be done with the database
> finally
> MyTransaction.Commit
> end
> except
> do whatever needed when the exception rises: check whether its is
> an ordinary exception or a server link fault
> if MyTransaction.InTransaction then
> MyTransaction.RollBack;
> end;
>
> This sequence does not protect against the server disconnection between
> two consecutive database calls. I easily can imagine that the same process
> occurs with any other database server hosted in a remote machine. Even when
> the database server is hosted in the same machine of the applicaton, TCP/IP
> communication applies.
>
> Antonio.
>
>
>
> ------------------------------
> <http://www.avast.com/>
>
> Ce courrier électronique ne contient aucun virus ou logiciel malveillant
> parce que la protection Antivirus avast! <http://www.avast.com/> est
> active.
>
>
> --
> _______________________________________________
> Lazarus mailing list
> Lazarus at lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20140825/d916c754/attachment-0003.html>
More information about the Lazarus
mailing list