I am working with Lazarus and SQlite3 for little time but I just had a good experience on updating each line of big table this way :
var
cnx : TZConnection (or whatever)
query : TQuery (or what's U like best)
code
query.connection := cnx; // blabla...
query.sql.text := 'BEGIN TRANSACTION';
Query.ExecSQL;
while (it's necessary) do
begin
Query.SQL.text := 'SQL QUERY FOR whatever you need to change in the base';
Query.ExecSQL;
end;
Query.SQL.Text := 'COMMIT';
Query.ExecSQL;
// Done... Just housekeeping left.
The commands you want to apply are temporalily stored the queries in a file next to the database. Then, SQlite3 considers all this SQL code at once. I suppose there is some sort of optimization process cause the execution is rather performant (considering the kind of database structure)
Note : You must make sure there is at leat one command between 'BEGIN TRANSACTION' and 'COMMIT', otherwise you may get an error in return. I use to insert the 'BEGIN TRANSACTION' when the program meets the first change that really needs to be done.
I'm not sure this is useful nor if someone else have given a better answer since I did'nt read all the messages.
Enjoy coding...