Hola.
Con tu código los errores quedan ocultos, ya que no salta ningún mensaje al usuario, simplemente haces un Rollback y por tanto no se graban los datos (que es el problema que comentas, no se graban datos sin ninguna razón aparente).
Deberías hacer que cuando haya errores se muestren o al menos se informe al usuario de que sus datos no serán guardados.
Código:
exception
Error := True;
on E: Exception do ShowMesasage('Error: ' + E.Message);
end;
Por cierto, ¿ tienes triggers en esas tablas ?, los triggers pueden ser el motivo de que a veces no se inserten algunos registros. Si el trigger falla entonces no se graban los datos.
Saludos.