FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
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; 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. |
#2
|
||||
|
||||
¿ Utilizas la última versión disponible de Firebird 2.1 (2.1.3) ?. Parece claro que la tabla queda bloqueada más allá del tiempo durante el que realizas la transacción (y solo se desbloquea al desconectar la base de datos).
Normalmente estos problemas los suelen solventar en las actualizaciones de cada nueva versión de Firebird.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Dlephi 6 - Windows 7 - SQL Server 2008 | andresu723 | MS SQL Server | 0 | 14-04-2010 16:33:50 |
Instalacion de Servicio Windows Server 2008 | genius | Varios | 2 | 27-12-2009 23:44:04 |
Problema DBExpress en Windows Server 2008 | cmagno | Conexión con bases de datos | 0 | 12-02-2009 14:39:11 |
firebird y .net 2008 | voldemmor | .NET | 0 | 27-11-2008 17:15:54 |
No más Windows XP a partir de 2008 | kinobi | Noticias | 15 | 17-04-2007 19:57:13 |
|