separate these commands and execute one by one (freepascal code follows) :
sqlquery1.close;
sqlquery1.sql.clear;
sqlquery1.sql.add('CREATE TEMPORARY TABLE tmp_test (f1 INT, f2 INT)');
sqlquery1.execsql;
sqlquery1.close;
sqlquery1.sql.clear;
sqlquery1.sql.add('INSERT INTO tmp_test (f1, f2) VALUES (1,1) ');
sqlquery1.execsql;
sqlquery1.close;
sqlquery1.sql.clear;
sqlquery1.sql.add('INSERT INTO tmp_test (f1, f2) VALUES (2,1) ');
sqlquery1.execsql;
sqlquery1.close;
sqlquery1.sql.clear;
sqlquery1.sql.add('INSERT INTO tmp_test (f1, f2) VALUES (3,1) ');
sqlquery1.execsql;
sqlquery1.close;
sqlquery1.sql.clear;
sqlquery1.sql.add('SELECT * FROM tmp_test');
sqlquery1.open;
I guess you will note the different usage of "sqlquery1.execsql" and "sqlquery1.open", that is normal,
when we have a sql query which returns an answer (example a "select" query) then we use ".open", and when we have a sql query which doesnot return anything (a "insert", "update", "delete" etc. etc.) then we use ".execsql".