Ver Mensaje Individual
  #1  
Antiguo 17-03-2014
gorsan gorsan is offline
Miembro
 
Registrado: jun 2003
Ubicación: Alcala de Henares (Madrid)
Posts: 87
Reputación: 21
gorsan Va por buen camino
Un IBQuery que falla cuando se ejecuta por segunda vez

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?
Responder Con Cita