On Tue, 13 Oct 2009, Alexsander Rosa wrote:

I'm using Lazarus from SVN with FPC 2.2.4 under Ubuntu 9.04 connecting to an 
8.3 PosgreSQL server.

I need to use it in a program that stays open all day -- it's a price check 
terminal. The user can read a barcode to show data about a single product or 
type
part of a description and browse the resulting list. This list is a DBGrid 
whose TSQLQuery's DataSet stays open while the user browses (or simply abandon 
the
terminal). It's a SELECT that does not change anything, it does not need a transaction. 
With the required transaction, there's always an "<IDLE> in
transaction" query open when the Lazarus application is running:

select datname, usename, query_start, procpid, client_addr from pg_stat_activity 
where current_query = '<IDLE> in transaction';

This transaction locks the changes in the database structure so you can't, for 
example, create a new table with a foreign key. A mere CREATE TABLE with a
FOREIGN KEY referring to an existing table would take forever waiting for that 
lock to be released.

Did you try calling "CommitRetaining" on the transaction ? It will commit the transaction (and so free the lock), but should keep the dataset open ?

If you want the transaction closed (no transaction active), then you'll have to transfer the results of the query to a list (TCollection) and show the collection in the grid, because committing the transaction closes any dataset associated with it.

Michael.

--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to