![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Novato en FireBird
Hola a todos, ante todo gracias por este foro que es una tremenda ayuda para los novatos como yo. Me he leido la guia de estilo y espero no meter la pata. Tengo un problema. seguro que para los expertos es una verdadera tontería pero para mí es una montaña.
Tengo una aplicacion hecha con delphi conectada con firebird 2.5, y una tabla creada en IBexpert. Mi problema es que necesito vaciar la tabla para volverla a llenar con datos diferentes. En el query de la tabla (llamada RESULTADO) y desde delphi, pongo : QResultado.SQL.Text := 'DELETE FROM RESULTADO'; QResultado.ExecSQL; Si despues de estas pongo QResultado.SQL.Text := 'SELECT * FROM RESULTADO'; QResultado.ExecSQL; Me dice "Use Open antes de un SELECT" Y si quito las dos ultimas lineas, cuando vuelvo a intentar llenar la tabla con otros datos me da "Key Violation". Vuelve a funcionar cuando lo hago un par de veces, es decir que parece que a la segunda vez sí ejecuta el vaciado de la tabla y funciona correctamente, pero después de esta vez correcta, a la vez siguiente siempre me da el "Key Violation". Seguro que es que no "obligo" a que se vacie la tabla, pero no sé cómo hacerlo. No sé si me he explicado correctamente. Por favor, podríais echarme una mano Gracias de antemano. EDITO : nada más lanzar esta petición de ayuda me he dado cuenta del problema ¡¡dejaba la tabla abierta!!. SOLUCIONADO Gracias de todos modos. Última edición por gaijin50 fecha: 29-04-2012 a las 21:59:03. |
#2
|
||||
|
||||
Muy buenas.
Creo que tu problema es que estás usando Execsql cuando lo que en realidad quieres hacer es un open. Me explico. Execsql se debería utilizar para "lanzar" un comando SQL del que no esperas ningún resultado, como un INSERT, pero si lo que quieres es abrir un Dataset con información que despuedas recorrer tendrias que usar OPEN. QResultado.SQL.Text := 'DELETE FROM RESULTADO'; QResultado.ExecSQL; QResultado.SQL.Text := 'SELECT * FROM RESULTADO'; QResultado.Open; |
#3
|
||||
|
||||
![]() ![]() .
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#4
|
|||
|
|||
Hola gaijin50: A simple vista me parece que no estas actualizando las transacciones. Recorda que Firebird usa transacciones que seguramente has definido para puedas realizar la conexion a la base de datos. Luego de hacer algun tipo de modificacion a la base de datos ya sea agregar, modificar o eliminar registros debes hacer un commit o commitretaining para confirmar o bien rollback o rollbackretaining para cancelar los cambios.
Por ejemplo
Saludos.- |
#5
|
|||
|
|||
Muchas gracias por contestar, como muy bien decís, el problema era que no actualizaba la transacción y mantenía la tabla abierta. Lo he resuelto, cerrando la tabla antres, haciendo el vaciado y luego volviendola a abrir y ahora funciona.
De nuevo, muchas gracias por responder. Un saludo |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Novato en Firebird | salvica | Firebird e Interbase | 17 | 03-11-2011 19:22:56 |
Novato: Guardar a Firebird desde un edit | juanmfer2002 | Firebird e Interbase | 2 | 09-03-2008 18:22:59 |
Novato en firebird | ckaki | Firebird e Interbase | 2 | 01-07-2006 12:00:00 |
Novato en Firebird | Delphos | Firebird e Interbase | 5 | 21-01-2005 17:07:47 |
Novato en firebird, tengo una duda | chakal | Firebird e Interbase | 2 | 03-03-2004 13:48:49 |
![]() |
|