Actually if you need to re-use the prepared statement, it's much more efficient to simply call sqlite_reset() on it instead of finalize.
As long as the statement is not currently step()'ing and is in the reset state, the database will not be locked. Example: select_stmt = db.execute("SELECT * FROM people") # use some, but not all of the rows in select_stmt -->db.reset(select_stmt) create_stmt = db.execute("CREATE TABLE other (a,b)") # error: --># step through the select_stmt again Robert > -----Original Message----- > From: Paolo Vernazza [mailto:[EMAIL PROTECTED] > Sent: Friday, April 08, 2005 9:09 AM > To: sqlite-users@sqlite.org > Subject: Re: [sqlite] create table question > > Charles Mills wrote: > > >>> I am trying to create a table after creating a select statement > >>> which selects records from an existing table. Is this > possible? I > >>> get a SQLITE_LOCKED / "database table is locked" error when I > >>> attempt this. > >>> > >>> In psuedo code the logic is as follows: > >>> > >>> select_stmt = db.execute("SELECT * FROM people") > >>> # use some, but not all of the rows in select_stmt > >>> create_stmt = db.execute("CREATE TABLE other (a,b)") # error: > >>> database table is locked > >>> > >>> Why does this happen? > >>> > >>> Anyway around this? > >> > >> > >> You must finalize select_stmt before running again db.execute > > > > > > Right. I have an instance where I would like to keep the > select_stmt > > _open_ (or not finalized) while I create a new table. Is > this possible? > > While you are reding the DB, you can't update it, sqlite support many > simultaneous readers but only one write; so you can't create > a new table > while your select statement is running. > I thin you must do somthing like this: > > select_stmt = db.execute("SELECT * FROM people") > # use some, but not all of the rows in select_stmt > sqltorun += "CREATE TABLE other (a,b);" > select_stmt.finalize() > create_stmt = db.execute(sqltorun) > > Paolo >