Hola a todos.
En un módulo de datos tengo un IBQuery en blanco, recién implantado desde la VCL lo único que he cambiado es el nombre.
El uso que le doy a este componente es la creación de una tabla IBX en tiempo de ejecución:
Código Delphi
[-]
with DMPrincipal.IBQuery2 do
begin
Close;
Database:= DMPrincipal.IBDB;
Transaction:= DMPrincipal.IBTPermanente;
SQL.Add('SELECT RDB$RELATION_NAME FROM RDB$RELATIONS');
SQL.Add('WHERE RDB$VIEW_BLR IS NULL');
SQL.Add('AND (RDB$SYSTEM_FLAG IS NULL OR RDB$SYSTEM_FLAG = 0)');
SQL.Add('AND RDB$RELATION_NAME = :PTABLE2');
ParamByName('PTABLE2').AsString:= TableName2;
Open;
if IsEmpty then
with DMPrincipal.IBQuery2 do
begin
Close;
Database:= DMPrincipal.IBDB;
Transaction:= DMPrincipal.IBTPermanente;
SQL.Clear;
SQL.Add('CREATE TABLE '+ TableName2 + '(');
SQL.Add('PRECIO_HORA_OFICIAL FLOAT DEFAULT '+IntToStr(0)+',');
SQL.Add('FACTOR_CORRECTOR FLOAT DEFAULT '+IntToStr(0)+',');
SQL.Add('ANUALIDAD_EN_CURSO SMALLINT NOT NULL,');
SQL.Add('MES_EN_CURSO VARCHAR(10) NOT NULL,');
SQL.Add('PRIMARY KEY(MES_EN_CURSO, ANUALIDAD_EN_CURSO)');
SQL.Add(')');
ExecSQL;
end
else
raise Exception.Create('Existe una tabla con ese nombre');
end;
end;
La primera vez que se ejecuta funciona como debe, es decir, genera la tabla, pero si inmediatamente después genero una segunda entonces el sistema da una excepción inesperada y peta en el primer open "token desconocido SELECT"
Alguna idea? intuyo que el componente no queda liberado para volver a cargar. ¿Si es eso como lo libero?