[Lazarus] What is a TSQLTransaction and why do I need one?
michael.vancanneyt at wisa.be
michael.vancanneyt at wisa.be
Wed Dec 1 17:38:53 CET 2010
On Wed, 1 Dec 2010, Joost van der Sluis wrote:
> On Wed, 2010-12-01 at 16:01 +0100, michael.vancanneyt at wisa.be wrote:
>>
>> On Wed, 1 Dec 2010, Joost van der Sluis wrote:
>>
>>>
>>>> Is there somewhere I can hook into the TSQLQuery to (a) see exactly what
>>>> query was passed to the server (b) collect any error text and (c) get
>>>> execution timing?
>>>
>>> a) Easiest is to use the database-client's log mechanism. (If there is
>>> any). Else you can change the TPQConnection.Preparestatement function.
>>> The 'buf' parameter is the actual query. But as you'll see it also adds
>>> some more to the query, so it opens a cursor, before it is send to the
>>> database-server.
>>>
>>> b) Ehm.. the error-text is in the exception?
>>>
>>> c) Hook into TPQConnection.PrepareStatement and TPQCOnnection.Execute
>>
>> I am a firm proponent of putting a unified mechanism for a) and c) in
>> TSQLQuery/TSQLConnection, and have, in fact, a patch ready for this
>> (it implements a simple event mechanism for the log).
>
> That's a no-brainer. It could als use TCustomApplication.Log, if
> Customapplication is assigned. Or, add events before and after an
> statement is prepared, executed or unprepared. (And when data is
> fetched)
That would create a dependency on custapp. If it isn't there yet, I would
not introduce it.
I have now
TDBEventType = (detPrepare,detExecute,detFetch,detCommit);
TDBLogNotifyEvent = Procedure (Sender : TSQLConnection; EventType : TDBEventType; Const Msg : String) of object;
And in TSQLConnection:
Property OnLog : TDBLogNotifyEvent Read FOnLog Write FOnLog;
But we can provide a unit that, when included, logs all queries
to custapp through a global hook. In fact, I think that's a good
idea.
If it is OK with you, I'll implement and commit it Friday ?
>
> But should we add this code in the connection-objects for each db-type,
> or in the code in the sqldb unit?
In the sqldb unit, of course.
Michael.
More information about the Lazarus
mailing list