¿Puedes crear una tabla e insertarle filas en una sola transacción? ¿Algo cómo esto?:

CREATE TABLE MiTabla (
   Columna1 INTEGER,
   Columna2 VARCHAR(40));

INSERT INTO MiTabla
   (Columna1, Columna2)
VALUES
   (1, 'Insertando una fila');

COMMIT;

Pues no, no puedes. ¿Por qué no? Porque estás creando la tabla e insertando la fila en una sola transacción (hay un solo COMMIT) y el Firebird necesita que la tabla esté creada y “comiteada” antes de insertarle datos. Por lo tanto a continuación de crear la tabla debes escribir un COMMIT. Lo mismo sucederá si la modificas, debes escribir un COMMIT después de alterarle la estructura y antes de insertarle, borrarle o modificarle datos. Esto es lo correcto:

CREATE TABLE MiTabla (
   Columna1 INTEGER,
   Columna2 VARCHAR(40));

COMMIT;

INSERT INTO MiTabla
   (Columna1, Columna2)
VALUES
   (1, 'Insertando una fila');

COMMIT;

Poniendo un COMMIT después de CREATE TABLE (o de ALTER TABLE) está todo ok.