Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Novato en FireBird (https://www.clubdelphi.com/foros/showthread.php?t=78561)

gaijin50 29-04-2012 21:48:56

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.

champy 29-04-2012 22:22:25

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;

Casimiro Notevi 29-04-2012 22:56:49

:) Recordad poner los tags al código fuente, ejemplo:



.

MartinS 30-04-2012 01:32:44

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

Código Delphi [-]
  QResultado.Sql.Clear;
  QResultado.SQL.Text := 'DELETE FROM RESULTADO';
  QResultado.ExecSQL;
  // y despues
  TuTransaccion.CommitRetaining; // para confirmar

Saludos.-

gaijin50 30-04-2012 10:20:35

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


La franja horaria es GMT +2. Ahora son las 14:54:25.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi