Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-01-2019
Rc96 Rc96 is offline
Miembro
 
Registrado: ago 2017
Posts: 75
Poder: 7
Rc96 Va por buen camino
Question Error al refrescar el Query

Saludos,
Llevo rato intentando resolver el siguiente problema pero aun no encuentro nada , luego de cada insert, update o delete que realizo en la base de datos ingreso el siguiente codigo para refrescar el Query:

Código Delphi [-]
Query.DBGrid.DataSource.DataSet.Refresh;

el problema esta en que, aunque realiza la rutina sql correctamente, me genera el siguiente error:

Query: cannot perform this operation on a closed dataset.

Espero puedan ayudarme, gracias de antemano.
Responder Con Cita
  #2  
Antiguo 31-01-2019
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Comprueba que la propiedad Active del DataSet sea TRUE. Ten en cuenta que algunas operaciones pueden cerrarlo así que revisa lo que haces y, en última instancia, usa el método Open.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 31-01-2019
Rc96 Rc96 is offline
Miembro
 
Registrado: ago 2017
Posts: 75
Poder: 7
Rc96 Va por buen camino
Cita:
Empezado por Ñuño Martínez Ver Mensaje
Comprueba que la propiedad Active del DataSet sea TRUE. Ten en cuenta que algunas operaciones pueden cerrarlo así que revisa lo que haces y, en última instancia, usa el método Open.

El Dataset esta activo, intente con el metodo open luego del rutina pero genera el siguiete error:

Cannont Open / define command use Execute / ExcSql

Código Delphi [-]
procedure Guardar;
  var
  BD_Codigo:String;
begin
  with Modulo.DMBox.FDQCategoria do
  begin
    Close;
    SQL.Text:='select * from inv_gpo_prod where "codigo"=:c';
    ParamByName('c').AsString:=MCategoria.E_Codigo.Text;
    Open;
    BD_Codigo:=FieldByName('codigo').AsString;
    if IsEmpty then
    begin
      Close;
      SQL.Clear;
      SQL.Add('insert into inv_gpo_prod ("codigo","descripcion","clasificacion","lote","observacion","status")');
      SQL.Add('values (:c,:d,:clasif,:l,:ob,:s)');
      Param_Guardar; ExecSQL; DMBox.FDConexion.Commit;
    end
    else
    begin
      Close;
      SQL.Clear;
      SQL.Add('update inv_gpo_prod set "codigo"=:c,"descripcion"=:d,"clasificacion"=:clasif,"lote"=:l,"observacion"=:ob,"status"=:s');
      SQL.Add('where "codigo"=:c');
      Param_Guardar; ExecSQL; DMBox.FDConexion.Commit;
    end;
  end;
end;

Última edición por ecfisa fecha: 31-01-2019 a las 21:08:24. Razón: Quitar emoticones del código
Responder Con Cita
  #4  
Antiguo 31-01-2019
Avatar de Soa Pelaez
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 133
Poder: 9
Soa Pelaez Va por buen camino
Prueba cerrando y abriendo el query, aunque tambien puedes revisar que sentencia sql tiene tu query, que de pronto no se quede pegado con tus sentencias de update o insert y que este si tenga la de algún tipo de select de datos.
Responder Con Cita
  #5  
Antiguo 01-02-2019
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.232
Poder: 20
ElKurgan Va camino a la fama
¿No será que en alguna función, como el paramguardar o el ExecSQL lo estás cerrando sin querer?

Saludos
Responder Con Cita
  #6  
Antiguo 01-02-2019
Rc96 Rc96 is offline
Miembro
 
Registrado: ago 2017
Posts: 75
Poder: 7
Rc96 Va por buen camino
Cita:
Empezado por Soa Pelaez Ver Mensaje
Prueba cerrando y abriendo el query, aunque tambien puedes revisar que sentencia sql tiene tu query, que de pronto no se quede pegado con tus sentencias de update o insert y que este si tenga la de algún tipo de select de datos.

Buen día Soa, la unica forma de refrescar es realizando una rutina select despues de el insert, update o delete. Con esto resuelvo, aun asi me gustaria entender la causa de este error, debido a que estaba funcionando correctamente.



Gracias a todos por sus respuestas.
Responder Con Cita
  #7  
Antiguo 01-02-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.020
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Rc96 Ver Mensaje
Buen día Soa, la unica forma de refrescar es realizando una rutina select despues de el insert, update o delete. Con esto resuelvo, aun asi me gustaria entender la causa de este error, debido a que estaba funcionando correctamente.
Gracias a todos por sus respuestas.
Es el tipo de pregunta que resulta casi imposible de contestar si no vemos el código fuente implicado en el caso.
Sólamente podemos intentar averiguar.
Responder Con Cita
  #8  
Antiguo 01-02-2019
Rc96 Rc96 is offline
Miembro
 
Registrado: ago 2017
Posts: 75
Poder: 7
Rc96 Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Es el tipo de pregunta que resulta casi imposible de contestar si no vemos el código fuente implicado en el caso.
Sólamente podemos intentar averiguar.

Saludos, casimiro si observas el comentario #3 encontraras el codigo.


Gracias.
Responder Con Cita
  #9  
Antiguo 01-02-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.020
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Ya, pero me refería a otro posible código asociado, triggers, etc.


Además, te recomiendo, aunque sea por probar, que no uses with Modulo.DMBox.FDQCategoria do
Responder Con Cita
  #10  
Antiguo 01-02-2019
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por Rc96 Ver Mensaje
[...]estaba funcionando correctamente.
¿Exactamente con ese mismo código?

Porque así, como se ve, después de hacer el Insert o Update ningún Refresh funcionaría con el objeto Modulo.DMBox.FDQCategoria.

Y concuerdo con Casimiro: ¡No uses With en ningún caso! Tiene un enorme defecto de fábrica.
Responder Con Cita
  #11  
Antiguo 01-02-2019
Rc96 Rc96 is offline
Miembro
 
Registrado: ago 2017
Posts: 75
Poder: 7
Rc96 Va por buen camino
Cita:
Empezado por Al González Ver Mensaje
¿Exactamente con ese mismo código?

Porque así, como se ve, después de hacer el Insert o Update ningún Refresh funcionaría con el objeto Modulo.DMBox.FDQCategoria.

Y concuerdo con Casimiro: ¡No uses With en ningún caso! Tiene un enorme defecto de fábrica.

Saludos,


Veran les comentare que paso y es probable que uds aclaren mis dudas


todos los componentes para la conexion de la base de datos, consultas y demas rutinas, estan alojados en un Data Module donde el Unit es "Modulo" y el Data Module "DataModulo".


Esto asi, funcionaba al realizar un insert, update o delete pero al realizar una consulta a la tabla, solo se veia que consultaba por el cursos sql, mas no mostraba los datos en el dbgrid.


Lo que hice fue renombrar el Data module a "DMBox" y ya me consultaba normalmente pero ahora al guardar, modificar o eliminar me generaba el error que comente al principio, y esto sin cambiar nada el codigo solo el nombre del Data Module.


Suena extraño pero eso fue lo que note y asi solvente.


Es problable que algo hice que produjo esa falla, por otra parte me gustaria saber el porque el with no es recomendable.


Gracias de antemano.
Responder Con Cita
  #12  
Antiguo 01-02-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.020
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues tienes un ejemplo muy claro en tu código:
Código Delphi [-]
with Modulo.DMBox.FDQCategoria do 
begin 
  Close;
Ese "Close", puede referirse a FDQCategoria.close o a form.close, no está claro y puedes encontrarte sorpresas.
Responder Con Cita
  #13  
Antiguo 07-02-2019
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 221
Poder: 16
orodriguezca Va por buen camino
Código Delphi [-]
 with Modulo.DMBox.FDQCategoria do
  begin
    Close;

Lo anterior cierra el dataset Modulo.DMBox.FDQCategoria.

Código Delphi [-]
 Open;
    BD_Codigo:=FieldByName('codigo').AsString;
    if IsEmpty then
    begin
      Close;
Lo anterior también cierra el dataset Modulo.DMBox.FDQCategoria.

Código Delphi [-]
      SQL.Add('insert into inv_gpo_prod ("codigo","descripcion","clasificacion","lote","observacion","status")');
      SQL.Add('values (:c,:d,:clasif,:l,b,:s)');
      Param_Guardar; 
      ExecSQL; // Esto no abre el dataset
     DMBox.FDConexion.Commit;

El método ExecSQL no abre un dataset, solo ejecuta la instrucción SQL definida.


Suponiendo que el dataset al cual le estás haciendo Refresh es Modulo.DMBox.FDQCategoria no hay forma de que esté activo, pues no solo lo cierras explicitamente varias veces sino que ademas cambias la instruccion sql a Insert o Update lo que bajo ninguna circunstancia abre un dataset.

Por otra parte, suponiendo que el dataset al cual le haces Refresh NO es Modulo.DMBox.FDQCategoria, quizás el problema te lo esté generando la instrucción Commit, particularmente si la base de datos es Interbase o Firebird. En estas dos bases de datos una instrucción Commit, o Rollback, no solo finaliza la transacción sino que además se cierran todos los dataset asociados a la transacción, por lo que muchos programadores hacen uso de la instrucción CommitRetaining para solventar esta dificultad.
Responder Con Cita
  #14  
Antiguo 07-02-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.020
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por orodriguezca Ver Mensaje
Suponiendo que el dataset al cual le estás haciendo ...
Por otra parte, suponiendo que el dataset al cual le haces ...
Pues eso, entre el lo que se supone que hace lo que hay dentro del with y el resto de suposiciones... no hay nada claro.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
ibase_query() [function.ibase-query]: Dynamic SQL Error SQL error code = -104 Token MALBOTO22 PHP 8 06-05-2015 20:22:39
Refrescar una Query oca Firebird e Interbase 0 27-01-2005 23:34:32
Refrescar un query para un DBGrid neon OOP 4 19-08-2004 18:06:39
Error en Query silviodp Conexión con bases de datos 11 30-07-2004 16:58:52
Como Refrescar un Query sitrico SQL 6 02-07-2004 22:40:35


La franja horaria es GMT +2. Ahora son las 10:50:13.


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