Subject Re: [firebird-support] Error explanation
Author Helen Borrie
At 02:04 AM 11/05/2007, you wrote:
>I am in the process of migrating an "old" tool from using ibx
>components to uib components.
>When I use the same database (FB 2.0) and script with the ibx
>components, everything's fine. When using uib components I get this
>error when I try to add some column to an existing table:
>Dynamic SQL Error
>SQL error code = -817
>Metadata update statement is not allowed by the current database SQL
>dialect 1
>The insert, update, delete, ddl or authorization statement cannot
> be executed because the transaction is inquiry only
>Error Code: 249
>Can anybody explain this error? Do I have to adjust some transaction
>params/options? If so, which?

The SQL -817 group of exceptions covers two possibilities: trying to
use a data type (or other SQL feature) that is not supported in
Dialect 1; and trying to perform a write operation in a read-only

For the first, the DATE type should work with a D1 database *if* the
client is set to be a D1 client. That will create a D1 DATE type
that is stored in TIMESTAMP format. (D1 does not support the Dialect
3 DATE type). If you are trying to use a Dialect 3 client with a
Dialect 1 database, you would see this exception.

By my recollection, the very old IBX components connected using D1 by
default. With UIB, I guess you have to look for a connection
property that forces a Dialect 1 connection. If it exists, it will
have a name something like SQLDialect. If it isn't supported, you'll
need to convert your database to Dialect 3, I'm afraid.

It would also make sense to check that the transaction is not a read-only one.

Alan's comment about "SET AUTODDL" doesn't make sense outside of the
context of the isql utility. The database engine and the dynamic API
don't know about that command.