Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   No puedo eliminar registros de una tabla (https://www.clubdelphi.com/foros/showthread.php?t=48235)

Shikanda 19-09-2007 09:19:49

No puedo eliminar registros de una tabla
 
Buenos dias a todos!

Vereis, llevo un par de dias dándole vueltas a una cosa extraña que me pasa. Resulta que en mi programa delphi tengo un query con el que mando una instrucción sql a mi base de datos (interbase & firebird) pero no sé porqué no la consigue ejecutar. Es tan simple como:
Código Delphi [-]
QELIMINACALEN.SQL.CLEAR;
                QELIMINACALEN.SQL.Add('DELETE FROM CALENDARIO WHERE CODIGO='+ CHR(39)+ CALENDARIO + CHR(39) ) ;
                QELIMINACALEN.Open;

Y en la tercera linea se queda como.... congelado. No lanza error pero deja de funcionar. Intenté ejecutar la instrucción desde la base de datos directamente y aquí es donde me sale el mensaje extraño, que os paso a comentar:
Código Delphi [-]
ISC ERROR CODE:335544345

ISC ERROR MESSAGE:
lock conflict on no wait transaction
deadlock
update conflicts with concurrent update


Alguien tiene alguna idea de porqué me pasa esto???

Ivanzinho 19-09-2007 09:59:07

En el codigo debe cambiar
Código Delphi [-]
QELIMINACALEN.Open;
por
Código Delphi [-]
QELIMINACALEN.ExecSQL;
El procedimiento Open se usa sólo cuando se van a traer datos, es decir, cuando se trata de un Select, para Insert y Update se utiliza ExecSQL.

El segundo error se debe a que alguien modificó el registro antes y todavía no se hizo un commit o rollback. Revisa que hagas commit o rollback al final de cada transacción.

Un saúdo.

Shikanda 19-09-2007 10:18:30

A las transacciones les he puesto la opcion Read Commited (no tenia nada seleccionado) y he hecho los cambios que me has comentado, quedando el código así:
Código Delphi [-]
QELIMINACALEN.SQL.CLEAR;
QELIMINACALEN.SQL.Add('DELETE FROM CALENDARIO WHERE CODIGO='+ CHR(39)+ CALENDARIO + CHR(39) ) ;
QELIMINACALEN.ExecSQL;
QELIMINACALEN.Transaction.Commit;

pero lo único que ha cambiado es que el mensaje que me salía en la base de datos me sale ahora en delphi :confused: Además es que soy muy nuevo programando en delphi y no entiendo eso de "lock conflict on no wait transaction"....

Ivanzinho 19-09-2007 10:24:46

¿Qué gestor de bases de datos utilizas y que estás haciendo antes de lanzar la consulta?

Puedes hacer la siguiente prueba:

1.- Matas el servicio de la base de datos.
2.- Lo levantas.
3.- Lanzas la consulta directamente contra la base de datos.

Si con esto de siguen dando el error es que hay algo mal configurado en la base de datos.

Un saúdo

Shikanda 24-09-2007 09:50:43

Al final se ve que era un problema de la base de datos. He estado tocándola mucho últimamente y se ve que algo jodí. Menos mal que tenía copias de seguridad y pude recuperar los datos.

En cualquier caso, muchas gracias por la ayuda!


La franja horaria es GMT +2. Ahora son las 22:26:15.

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