PDA

Ver la Versión Completa : Error en una consulta "Error creating cursor handle".


cesar_gta86
07-08-2008, 02:33:39
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 [-] (http://www.clubdelphi.com/foros/#)
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 [-] (http://www.clubdelphi.com/foros/#)
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 [-] (http://www.clubdelphi.com/foros/#)
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:


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.