Ed Leafe wrote:
>       AutoCommit is a Dabo setting that lets Dabo know that the database  
> is configured to automatically commit changes, so that Dabo doesn't  
> try to duplicate that.
> 

A autocommit setting which is handled by the database does a commit
after every sql command.
If you want to use a transaction for more than one modification,
you won't use autocommit for your backend.
In the case of firebird dabo does a commit after every single sql
command. So explicit transaction handling is not possible.

>       Some backends require an explicit commit after a change to the  
> database; others don't. For example, if you are using MySQL, and  
> execute the following command:
>

What does that mean?
What if you are doing a couple of inserts and want to rollback
your changes at some point if something went wrong?
Is your notion of a commit meant for one record only?

> crs.execute("update employee set fired=1 where pk=86")
> 
> that record is updated. Anyone else querying that record will see  
> fired=1. However, if you were using an SQLite database, that change  
> is buffered; if you were to exit the app at this point, nothing would  
> have changed in the database. You need to call:
> 
> crs._connection.commit()
> 
> before any of your changes actually get persisted.
> 
>       If I were using SQLite for my app, I would need to be sure that  
> AutoCommit was set to False for the employee bizobj. Since this is  
> passed to all the cursors that the bizobj uses, the cursors will know  
> that after a change they will have to manually call their  
> connection's commit() method, which is what the flush() method is  
> designed to do.
> 
>       If I were using MySQL for the app, though, I should set AutoCommit  
> to True, but in practice it really doesn't matter, since the flush()  
> method is implemented for each backend, and for MySQL it does nothing  
> anyway.
> 
>       So what you have to ask yourself is "If I insert/update/delete a  
> record, is that automatically committed to the database, or do I need  
> to call an explicit commit() to make the change permanent?". If the  
> former is the case, your bizobjs should have AutoCommit=True, since  
> committing changes is automatically done for you; if the latter, then  
> AutoCommit should be False.
> 
>       Originally this was written so that all of this was encapsulated in  
> the backend, but there was a case (I don't remember the details)  
> where this was a setting that you could change in the database,  
> rather than a fundamental quality of the database. At this point we  
> refactored the behavior out into a developer-settable property.
> 
>       OK, so now that you know what AutoCommit signifies and how it is  
> supposed to work, there are two discussions that we can have:
> 
> 1) I think we should rename AutoCommit to ...[blank]
> 
> 2) I've found somewhere in the code where what you've described isn't  
> working that way.

It isn't working as you think.
We can prove this with a testcase.

For firebird i'm sure that it's wrong as dabo does a commit after every
sql command (AutoCommit doesn't change anything).
See my answer to john here:
http://leafe.com/archives/byMID/dabo-dev/[EMAIL PROTECTED]



_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/dabo-dev
Searchable Archives: http://leafe.com/archives/search/dabo-dev
This message: http://leafe.com/archives/byMID/dabo-dev/[EMAIL PROTECTED]

Reply via email to