Ver Mensaje Individual
  #37  
Antiguo 19-05-2010
sur-se sur-se is offline
Miembro
 
Registrado: may 2003
Posts: 212
Reputación: 22
sur-se Va por buen camino
Bueno, el tema del borrado de la tabla. No sé si debería ir en otro hilo, pero bueno, como salió aquí, pues a ver si Donald puede ayudarme, o algún otro compañero. Es un ejemplo sencillo sin controles de errores ni similar. Es para que lo veáis.

Coloco en la pantalla 5 botones:
button1 --> conectar con la Bd
button5 --> desconectar de la bd
button3 --> crear un tabla y commit
button2 --> ejecutar proceso de inserts y commit
button4 --> borrar la tabla creada commit

Un label1 para poner un texto.

En pantalla los componentes fibplus:
FIBdatabase para conectar con la BD
una pareja fibtransaction1/fibquery1
otra pareja fibtransaction2/fibquery2

Código:
procedure TForm1.Button1Click(Sender: TObject);
begin
     pFIBDatabase1.Connected:=true;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
     pFIBDatabase1.Connected:=false;
end;

procedure TForm1.pFIBDatabase1AfterConnect(Sender: TObject);
begin
     label1.caption:='Conectada';
end;

procedure TForm1.pFIBDatabase1AfterDisconnect(Sender: TObject);
begin
     label1.caption:='Desconectado';
end;

procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
     pFIBTransaction2.StartTransaction;
     with pFIBQuery2 do
     begin
          close;
          sql.clear;
          sql.add('INSERT INTO TMPPRUEBA( C1, C2) VALUES (:c1, :c2)');
          Prepare;
          for i:=1 to 100 do
          begin
               ParamByName('c1').value:=i;
               ParamByName('c2').value:=i;
               ExecQuery;
          end;
          close;

     end;
     pFIBTransaction2.Commit;
     showmessage('Terminado');
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
     pFIBTransaction1.StartTransaction;
     with pFIBQuery1 do
     begin
          close;
          sql.clear;
          sql.Add('CREATE TABLE TMPPRUEBA ( C1 INTEGER, C2 INTEGER )');
          ExecQuery;
     end;
     pFIBTransaction1.Commit;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
     pFIBTransaction1.StartTransaction;
     with pFIBQuery1 do
     begin
          close;
          sql.clear;
          sql.Add('DROP TABLE TMPPRUEBA ');
          ExecQuery;
     end;
     pFIBTransaction1.Commit;
end;
Se conecta con la Bd, se crea la tabla, se ejectua el proceso, se borra la tabla.
Si el servidor es 1.5, funciona bien. Si es 2.x al borrar la tabla da un error de "object metadata in use".
Todo tiene sus commits correspondientes.
En 2.x, después de crear y ejectuar, si desconecto de la bd y vuelvo a conectar ya puedo borrarla.
Un saludo.
Responder Con Cita