[Lazarus] SQLDb and TSQLQuery usage for MSSQL database...

Bo Berglund bo.berglund at gmail.com
Thu Feb 25 08:04:09 CET 2016


On Wed, 24 Feb 2016 11:47:18 +0100 (CET), Michael Van Canneyt
<michael at freepascal.org> wrote:

>> constructor TUserDb.Create;
>> begin
>>  FConn := TMSSQLConnection.Create(NIL);
>>  FTrans := TSQLTransaction.Create(NIL);
>
>You must additionally set
>
>   FConn.Transaction:=FTrans;
>
>>  FQuery := TSQLQuery.Create(NIL);
>>  FQuery.DataBase := FConn; // <== Database property set here!!!
>>  FQuery.Transaction := FTrans;
>> end;

Now reading a bit more on the transaction subject and I get confused
by the wiki examples:
http://wiki.freepascal.org/SqlDBHowto#How_to_execute_direct_queries.2Fmake_a_table.3F
and
http://wiki.freepascal.org/SqlDBHowto#Example:_reading_data_from_a_table

It seems like in some examples one uses the transaction as follows:
ATransaction.StartTransaction;
.. do database stuff ...
ATransaction.Commit;

while in other cases there is no action taken on the ATransaction
object, it just sits there on both the query and connection objects
and it still works in my case.

I would like to understand what is happening here...

Note that in our stored procedures in MSSQLServer there are
transactions built-in where they are needed to safeguard consistency
across data in different tables for insance.

The SQLDb transactions are still a bit unclear to me.
As yet I have only run stored procedures that return datasets
(basically select procedures) and these work OK but I don't know if
the transaction object really is involved here...

It seems like a TSQLTransaction activity is only needed if data are to
be changed in the database and not if they are only read from the
database. Is this correct?


-- 
Bo Berglund
Developer in Sweden





More information about the Lazarus mailing list