[fpc-devel] IBConnection and transactions

Michael Van Canneyt michael at freepascal.org
Sun Apr 30 21:59:13 CEST 2006



On Sun, 30 Apr 2006, [UTF-8] Bogusław Brandys wrote:

> Michael Van Canneyt wrote:
> >
> > On Sun, 30 Apr 2006, Joost van der Sluis wrote:
> >
> >> On Sun, 2006-04-30 at 20:09 +0200, Michael Van Canneyt wrote:
> >>> On Sun, 30 Apr 2006, Joost van der Sluis wrote:
> >>>> I have a problem that I do not understand.
> >>>>
> >>>> the following doesn't work with firebird:
> >>>>
> >>>>   Fconnection.ExecuteDirect('create table FPDEV (id INT)');
> >>>>   Fconnection.ExecuteDirect('insert into FPDEV(id) values (1)');
> >>>>
> >>>> But the following does:
> >>>>
> >>>>   Fconnection.ExecuteDirect('create table FPDEV (id INT)');
> >>>>   FConnection.Transaction.commitretaining;
> >>>>   Fconnection.ExecuteDirect('insert into FPDEV(id) values (1)');
> >>>>
> >>>> But both statements are executed within the same transaction?
> >>> No they are not. CommitRetaining is like
> >>> Commit;
> >>> Starttransaction;
> >>> only keeps the resources of the current transaction.
> >>>
> >>> In all the years I worked with interbase/firebird,
> >>> I've learned to explicitly commit after each DDL statement.
> >> Ok, that explains it. But in fact that's a bug in Interbase/Firebird
> >> imho...
> >
> > It is. They know about it, too.
> >
> > Michael.
>
> Well,sort of, but how you can insert data into table which is not
> created yet ?

It is created.
The transaction is not yet committed, so the table
is not visible outside the current transaction, but
inside the transaction, it exists, so one would expect
that inserts work...

Michael.



More information about the fpc-devel mailing list