Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-07-2008
Netyco Netyco is offline
Registrado
 
Registrado: oct 2007
Posts: 8
Poder: 0
Netyco Va por buen camino
Error: Cannot perform this operation on a closed dataset

Hola gente,

Les cuento que estoy haciendo un programita el cual me esta llevando mucho tiempo porque me sale un error que no se como solucionarlo, me podrían ayudar?

Resulta que tengo un formulario donde agrego tareas, lo ejecuto y funciona, pero cuando agrego varias tareas a la vez me sale el siguiente error:

' Cannot perform this operation on a closed dataset' y la verdad es que no tengo idea de como solucionarlo.

Agradecere mucho su ayuda, saludos
Responder Con Cita
  #2  
Antiguo 02-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola,

la traduccion de este error es que no se puede hacer la operacion en un conjunto de datos cerrados. Esto es, tienes el query o la tabla cerrados. Para abrirlos, debes usar query.open o bien query.active := true. En caso de ser tablas, table.Open. Ten en cuenta que si usas ado y queries, despues de un 'select' debes usar active := true, mientras que para el resto debes usar ExecSQL.

saludos
Responder Con Cita
  #3  
Antiguo 02-07-2008
Netyco Netyco is offline
Registrado
 
Registrado: oct 2007
Posts: 8
Poder: 0
Netyco Va por buen camino
Hola, gracias por la rapidez de tu repuesta.

Pero te cuento que esas consideraciones las tuve en cuenta. En agregar una tarea uso un insert, (tarabajo con ado y query), y al terminar pongo ExecSQL,

Y tengo otro procediemiento donde uso un select, decime escribo query.active:= true o query.open?

Igual probe de las dos maneras y me sigue saliendo error.
Responder Con Cita
  #4  
Antiguo 02-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Bien, deberias hacer algo asi

Código Delphi [-]
 
  query.Active := false;
  query.SQL.Text := 'insert into ...';
  query.ExecSQL;
  query.SQL.Text := 'select * from ...';
  query.Active := true;

al final debes abrirla para poder seguir trabajando con ella. Usa el debugger (f5,f7,f8) para saber exactamente en que linea te salta y prueba de ponernos el codigo, si aun no se soluciona.

PD: personalmente siempre uso active := false, active := true, aunque creo que son completamente equivalentes. Eso si, para el select el active/open. Para el resto, el execsql. No entiendo esta distincion en ado, pues en bde no ocurre, pero asi es. Saludos.
Responder Con Cita
  #5  
Antiguo 02-07-2008
Netyco Netyco is offline
Registrado
 
Registrado: oct 2007
Posts: 8
Poder: 0
Netyco Va por buen camino
ok, mira sos super, muchas gracias por tu ayuda, pero no tuve exito, asi que te paso mi codigo original y decime como lo arreglo porfis:


Código Delphi [-]
procedure tftarea.agregartarea;
begin   
   buscarOperador;   
   dm.Qtareas.Close;     
  dm.Qtareas.SQL.Clear;    
  dm.Qtareas.SQL.Add('INSERT INTO tarea (fecha, hora, asunto, comentario, id_operador,');
    dm.Qtareas.SQL.Add('HoraAReal, FechaAReal, estado, bandera) values (:fech, :hor, :asu, :com, :id,');
    dm.Qtareas.SQL.Add(' :hora, :fecha, :est, :band)');
    dm.Qtareas.Parameters.ParamByName('fech').Value:= strtodate(lfecha.Caption);
    dm.Qtareas.Parameters.ParamByName('hor').Value:= lhora.Caption;
    dm.Qtareas.Parameters.ParamByName('asu').Value:= cbasunto.Text;
    dm.Qtareas.Parameters.ParamByName('com').Value:= Mcom.Text;
    dm.Qtareas.Parameters.ParamByName('id').Value:= strtoint(dbgrid1.Fields[0].Value);
    dm.Qtareas.Parameters.ParamByName('hora').Value:= timetostr(dtphora.DateTime);
    dm.Qtareas.Parameters.ParamByName('fecha').Value:= dtpfecha.DateTime;
    dm.Qtareas.Parameters.ParamByName('est').Value:= 'Pendiente';
    dm.Qtareas.Parameters.ParamByName('band').Value:= 'n';
    dm.Qtareas.ExecSQL;


end;

donde buscaroperador es:

Código Delphi [-]
procedure tftarea.buscarOperador;

begin      
     dm.Qoperador.Close      
     dm.Qoperador.SQL.Clear;       
      dm.Qoperador.SQL.Add('select id from operador where nombre = :nom');
      dm.Qoperador.Parameters.ParamByName('nom').Value:= cbop.Text ;
      dm.Qoperador.Open;
end;

Última edición por roman fecha: 02-07-2008 a las 17:13:14. Razón: Corregir etiquetas [delphi]
Responder Con Cita
  #6  
Antiguo 02-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
y donde te salta la excepcion? en el execsql? o despues?
creo que el problema te viene del dbgrid1.Fields[0].Value, y, si cbasunto y mcom son dbedits, quiza tambien por alli. prueba de poner valores de test a estos o ves comentando las lineas, para saber exactamente que es lo que te lo esta provocando, si no es en el execsql. Usa f5,f7,f8 para saber exactamente donde te salta. El debugger esta precisamente para esto.

Última edición por coso fecha: 02-07-2008 a las 16:43:17.
Responder Con Cita
  #7  
Antiguo 02-07-2008
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: sep 2007
Posts: 1.083
Poder: 18
juanelo Va por buen camino
No estan funcionando correactamente las etiquetas de DELPHI
Responder Con Cita
  #8  
Antiguo 02-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
debes usar... (delphi) al inicio, (/delphi) al final, siendo los parentesis corchetes [,].

Código Delphi [-]
Test

creo q si...
Responder Con Cita
  #9  
Antiguo 02-07-2008
Netyco Netyco is offline
Registrado
 
Registrado: oct 2007
Posts: 8
Poder: 0
Netyco Va por buen camino
apenas pasa el ExecSQL me salta el error
Responder Con Cita
  #10  
Antiguo 02-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
vamos a ver... si pones un breakpoint (F5) en la linea
Código Delphi [-]
...
dm.Qtareas.Close; 
...

y vas con el F8 siguiendo linea por linea...te salta en la linea

Código Delphi [-]
...
dm.Qtareas.ExecSQL;
...

?

me esta dando la impresion que te salta antes, cuando asignas los valores a los parametros. O bien despues del execsql, en alguna otra funcion que se ejecute a continuacion. En el codigo que has mostrado actualmente no veo ningun error.

Última edición por coso fecha: 02-07-2008 a las 16:58:18.
Responder Con Cita
  #11  
Antiguo 02-07-2008
Netyco Netyco is offline
Registrado
 
Registrado: oct 2007
Posts: 8
Poder: 0
Netyco Va por buen camino
Te cuento lo que me salio:

voy con f8 y pasa ExecSQL, y me sale el error que te comento, y una vez que acepto el error el puntero se posiciona en el formulario que crea el form de agregar tarea

ftarea:=Tftarea.Create(self);
ftarea.Showmodal;
ftarea.Free; (aqui apunta )

me siento una inutil .

Yo me estoy yendo a clases, pero por favor si puedes responde si sabes como lo soluciono, seguramente durante la tarde le dare una miradita. Saludos y muchas gracias
Responder Con Cita
  #12  
Antiguo 02-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Cita:
me siento una inutil .
juas! si esto de la programacion es lo que tiene, que de tantas tonterias que tiene uno se siente idiota (aunque, evidentemente, no lo sea )

Cita:
ftarea:=Tftarea.Create(self);
ftarea.Showmodal;
ftarea.Free; (aqui apunta )
aqui apunta? no te entendi.

sinceramente, no se verlo. Si es en la linea execsql donde te salta, no lo entiendo. Quiza tengas la tabla abierta en modo exclusivo por otro lado, por lo que acceder a ella te provoque el error, o quizas codigo en los eventos OnDataChange, OnPost, etc... que te cierre la tabla. Sinceramente, no lo se. Creia que era en el momento en que asignas los argumentos, y que el error de tabla cerrada te lo daba de otra que no fuese tarea.

PD: prueba de poner

Código Delphi [-]
   dm.Qtarea.ExecSql;   
   dm.Qtarea.SQL.Text := 'select * from tarea';
   dm.Qtarea.Active := true;

a ver si soluciona algo...

Última edición por coso fecha: 02-07-2008 a las 17:52:58.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Canont perform this operation on a closedataset yhoho SQL 22 18-02-2008 17:03:54
Cannot perform this operation on a ON A CLOSED DATASET Yun-i Varios 23 22-01-2008 18:35:19
Firebird - Delphi (Cannot perform operation...) papulo Conexión con bases de datos 5 26-10-2005 18:43:22
Closed dataset srobles Conexión con bases de datos 3 14-03-2005 21:10:24
FB+IBX error: IBSQL closed apicito Conexión con bases de datos 0 29-05-2003 12:39:57


La franja horaria es GMT +2. Ahora son las 12:56:45.


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
Copyright 1996-2007 Club Delphi