I got an exception when compiling

I/O function: C, mode: 0, on driver: SLE 
 database is locked 
Error       : -100005
  Description : Commit failed
  Context     :
  [DBERROR] = 5

As Im' the only one who is working with the database: strange ...
Maybe it was the still open test with this component in question.
But this is not the point.

I got a few choises to press, I use the "ignore" button.
Compiling the component again shows no error.
But when testing the component, there was still the old code.

It looks like, the changed script would not be stored.
As I don't want to lose the new script, I did a copy into clipboard, close IDE, restart IDE and copy the script into the script container.

In UnifAce 9, you could still try to store again, until the database lock is released.

So, how can I be sure, that there is no loss of information after such exception?
Is there an indication, if or if not a component is stored?
And how to store again, if the first try didn't succeed?

Any ided/hint


  1. Daniel Iseli


    I've discussed this with the IDE team. We have not seen this particular exception (with STATUS = "TRANSACTION_IN_PROGRESS") before. And when looking at the code (where this error is thrown) then it is also not clear how you could provoke this exception. Do you maybe have a repro-scenario for us? Thanks.

    And SLE (SQLite) is not really the most "care-free" database (at least that is my experience). You really have to be careful. Even in version 9 you can run into situations where you basically cannot store the changes for a component. This can (e.g.) happen when having a component open in the IDF that has some changes that are not stored yet and then compile the component from the command line. When you try to store the changes in the IDF then you get an "unrecoverable" error (2012 - Occurrence in form does not match database occurrence) and you need to "safe" the changes by copy-and-paste.

    In case you run into this kind of issues more frequently then it might be better to switch to a different database for the repository (e.g. PostgreSQL or Oracle).


CommentAdd your comment...

3 answers


    With SQLite, never ever have more than one session open.

    Also not if the two sessions are from the same user and on the same computer.

    Also not if one session is interactive and the other on a command line compile.

    SQLite locking strategy is not really suiteable for Uniface.

    It is only delivered with Uniface because a) it is free, and b) does not require installation.

    But if you want a better database, you'll need to move to Postgress or something...

      CommentAdd your comment...

      Found the unifaceinfo.com post (without timestamp, it's a bit harder)
      and unfortunately formatting was lost as well, but it includes Norberts remarks:

      Uniface 10 Enterprise Edition: U10.3: IDE abort when parallel editing 2 forms

        CommentAdd your comment...

        looks like 10.3 has still problems coordinating the database transactions
        in the non-modal world.

        I had reported that problem already in August; as unifaceinfo.com is lost,
        see https://www.tapatalk.com/groups/turf/u10-3-ide-abort-when-parallel-editing-2-forms-t1688.html

        When I change from editing a sourcecode in one form
        and changed to another form and clicked in the sourcecode
        the exception you encountered occured after 10 seconds of inactivity.

        In 10.3 IDE we have no control what happens with the database.

        As we no longer have a STORE, ACCEPT and QUIT in the IDE,
        there is not so much we can do about it.

          CommentAdd your comment...