I think I had a similar error when one of the statements wasn't valid.
In this case I'd think that one of the tables already exists (which ends the transaction) and when the next statement is exectuted
it throws the error you see.
Here's something I used:
try {
_sqlConnection.begin();
//
// sql statements here
//
_sqlConnection.commit();
}catch(e:SQLError) {
trace(" - message; ", e.message);
trace(" - details: ", e.details);
_sqlConnection.rollback();
}
}
When creating a table it is a good idea to check if the table already exists.
'CREATE TABLE IF NOT EXISTS ...'
regards,
Muzak
----- Original Message -----
From: "Jiri Heitlager" <[EMAIL PROTECTED]>
To: "Flash Coders List" <flashcoders@chattyfig.figleaf.com>
Sent: Friday, April 18, 2008 10:19 AM
Subject: Re: [Flashcoders] Question AIR Sqlite api
OK, I relplied a bit in a hurry and didnt make myself clear. That is stupid of
me, and I am sorry.
The situation is like so. I open a connection using OpenAsync. I have listeners listening to the Open event. When that is fired, I
response with a method that creates 3 tables in one go, see code below. I keep getting an error, also shown below. If in the whole
story I use open instead of openAsync, everything works perfect. I have now idea why that is??
<error>
Error: Error #3105: Operation is only allowed if a connection has an
open transaction.
at Error$/throwError()
at flash.data::SQLConnection/commit()
at
classes.models::SQLProxy/createDatabase()[/Users/Jiri/Documents/_Flash/SmsApp/SmsApplication/src/classes/models/SQLProxy.as:128]
Debug session terminated.
</error>
private function createDatabase(e:Event):void
{
Sql_conn.addEventListener(SQLEvent.COMMIT , onDatabaseCreated);
Sql_conn.begin();
var createTable:SQLStatement = new SQLStatement()
createTable.sqlConnection = Sql_conn
createTable.text = 'CREATE TABLE contacts (index_id INTEGER PRIMARY
KEY , name TEXT , phone NUMBER )';
createTable.execute();
var createErrors:SQLStatement = new SQLStatement()
createErrors.sqlConnection = Sql_conn
createErrors.text = 'CREATE TABLE errors (index_id INTEGER PRIMARY
KEY , error_id INTEGER , type TEXT )';
createErrors.execute();
var createArchive:SQLStatement = new SQLStatement()
createArchive.sqlConnection = Sql_conn
createArchive.text = 'CREATE TABLE sms_archive (index_id INTEGER
PRIMARY KEY , sms TEXT , receiver NUMBER , sender NUMBER )';
createArchive.execute();
Sql_conn.commit();
}
Muzak wrote:
Then I'm not sure I understand what your problem is.
You said it works when using openAsync()..
<quote>
The weird thing is that when I use openAsync instead of open, it does work?
</quote>
----- Original Message ----- From: "Jiri Heitlager" <[EMAIL PROTECTED]>
To: "Flash Coders List" <flashcoders@chattyfig.figleaf.com>
Sent: Thursday, April 17, 2008 10:52 PM
Subject: Re: [Flashcoders] Question AIR Sqlite api
weird...I will have to look into that and see if there is a work around,
because I would really like to work with openAsync.
J.
Muzak wrote:
Because when adding listeners you are implying asynchronous mode.
In other words, as soon as you add listeners, you have to use openAsync().
I've found the use of synchronous mode to be alot easier.
regards,
Muzak
_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders