Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error en una consulta "Error creating cursor handle". (https://www.clubdelphi.com/foros/showthread.php?t=58952)

cesar_gta86 07-08-2008 02:33:39

Error en una consulta "Error creating cursor handle".
 
Hola amigos, ahora tebgo otro problemita, jeje. Lo que pasa es que por 'x' motivos elimino registros de una tabla, utilizando ciclos, de este modo:


Código Delphi [-]
table1.first;
while table1.eof<>true do
begin
if table1.fieldbyname('No_ctrl').asstring=edit1.text then
table1.delete;
table1.next;
end;

//esto es para cuando el último registro de la tabla es uno de los quiero elimar
if table1.last=true then
begin
if table1.fieldbyname('No_ctrl').asstring=edit1.text then
table1.delete;
end;
table1.refresh;





Pero la verdad, no sé porqué, en ocasiones no elimina todos los registros que quiero eliminar, sino que se brinca uno o dos.

Para evitar la utilización de ciclos pensé en utilizar una query y con ella eliminar éstos registros pero al momento que se activa la query manda el mensaje de error:

Código Delphi [-]
Project Project1.exe raised exception class EnoresultSet whit message 'Error creating cursor handle'. Process stoped. Use step or run to continue.





En la query le pongo el siguiente código:

Código Delphi [-]
cad:='delete from prestamos where No_ctrl=' + char(34) + edit1.text + char(34); //cadena
query1.close;
query1.sql.clear;
quey1.sql.text:=cad;
query1.execsql;
query1.active:=true; //manda el mensaje de error





Las tabla de préstamos está desactivada, creí que ese era el problema, pero no es así, espero que me puedan ayudar, desde ya, grácias por sus respuestas.

coso 07-08-2008 11:05:56

Hola, a mi me ocurrian errores parecidos (se me doblaban registros, se perdia el cursor de la tabla, etc...) al final tuve que pasarlo todo a ADO :mad: la verdad es que con mas o menos el mismo codigo, el resultado es mucho mejor ;) Saludos.

Kipow 07-08-2008 11:20:44

Saludos, con el primer codigo no es necesario hacer el next siempre, solamente cuando no elimina, ya que al eliminar un registro automaticamente te colocaria en el registro siguiente tu codigo deberia quedar asi:

Código Delphi [-]
    
    Table1.First;
    while Not Table1.EOF do
        if table1.fieldbyname('No_ctrl').asstring=edit1.text then
            Table1.Delete
        else 
            Table1.Next;

Ahora bien con el query que generas no se que componentes estas usando pero el componente TQuery genera un cursor y la unica instruccion que te permite de las DML es SELECT. proba a usar el componente TISQL (lo digo de memoria). o bien creo que hay una forma de abrir el Query en lugar de open con execSQL. que no te regresa un cursor como resultado sino que el numero de tuplas afectadas por la instruccion.

Saludos.

cesar_gta86 10-08-2008 03:23:51

Hola, sí funcionó con el código, muchas grácias.

Eso de la query, es verdad lo que dices, porque no me acordaba que tengo tablas Páradox7, y creia que estaba usando tipo mysql.

Grácias y nos vemos después.


La franja horaria es GMT +2. Ahora son las 06:55:27.

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