Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-04-2005
miquellg miquellg is offline
Miembro
 
Registrado: abr 2005
Posts: 46
Poder: 0
miquellg Va por buen camino
Error ("not in edit or insert mode") en Update con ADOQuery

ante todo gracias por pararte a leer esto.
me encuentro con un problema en un update que intento realizar a traves de una ADOQuery. Parece ser que el dataset relacionado no me permite editar la fila seleccionada. Paso un trozo del código :

Código Delphi [-]
     ADOConec: TADOConnection;
     ADOQyArticles: TADOQuery;
     DSarticles: TDataSource;
     ADOQyStocks: TADOQuery;
     DSstocks: TDataSource;
  
   while not ADOQyArticles.Eof do
    begin
             ADOQystocks.SQL.Clear;
             ADOQyStocks.SQL.Add('update F_ARTSTOCK ' +
                                 ' set AS_QTEMINI= :Parm_min,AS_QTEMAXI= :Parm_max ' +
                                 ' where AS_PRINCIPAL = 1 ' +
                                 ' AND AR_REF = '+ #39 + codrefe + #39
                               );
             ADOQyStocks.Parameters.ParamValues['Parm_min'] := round (dias_min * venta_dia);
             ADOQyStocks.Parameters.ParamValues['Parm_max'] := round (dias_max * venta_dia);
           ADOQyStocks.ExecSQL;
           ADOQystocks.Active;
     
           AdoQyStocks.Post;
        end;
       ADOQyArticles.Next;           
    end;
  
  ADOConec.CommitTrans;
Leo los registros de la Query ADOQyArticles y realizo el update con ADOQyStocks en una tabla diferente. Creo que me he hecho un lio con el open,close,active ...
El error que me devuelve al hacer el Post es "DataSet not in Edit or insert mode".
Tengo dudas acerca de como hacer el commit una vez realizado todo el proceso.
Gracias por vuestra ayuda.
Responder Con Cita
  #2  
Antiguo 16-04-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Código Delphi [-]
ADOConec: TADOConnection;
      ADOQyArticles: TADOQuery;
      DSarticles: TDataSource;
      ADOQyStocks: TADOQuery;
      DSstocks: TDataSource;
   
    while not ADOQyArticles.Eof do
     begin
              ADOQystocks.SQL.Clear;
              ADOQyStocks.SQL.Add('update F_ARTSTOCK ' +
                                  ' set AS_QTEMINI= :Parm_min,AS_QTEMAXI= :Parm_max ' +
                                  ' where AS_PRINCIPAL = 1 ' +
                                  ' AND AR_REF = '+ #39 + codrefe + #39
                                );
              ADOQyStocks.Parameters.ParamValues['Parm_min'] := round (dias_min * venta_dia);
              ADOQyStocks.Parameters.ParamValues['Parm_max'] := round (dias_max * venta_dia);
            ADOQyStocks.ExecSQL;
            //ADOQystocks.Active; Esto te sobra
      //si sigue dando error pon añade: AdoQyStocks.Edit;
            AdoQyStocks.Post;
         end;
        ADOQyArticles.Next;           
     end;
   
   ADOConec.CommitTrans;

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 16-04-2005
miquellg miquellg is offline
Miembro
 
Registrado: abr 2005
Posts: 46
Poder: 0
miquellg Va por buen camino
ante todo gracias marcos por tu rapida respuesta.
En relacion a tu consejo :
1.- si quito ADOQystocks.Active ocurre lo mismo.
2.- si pongo el ADOQystocks.Edit me da el error "ADOQyStocks: Cannot perfom this operation on a closed dataset'.

ADOConec: TADOConnection; ADOQyArticles: TADOQuery; DSarticles: TDataSource; ADOQyStocks: TADOQuery; DSstocks: TDataSource; while not ADOQyArticles.Eof do begin ADOQystocks.SQL.Clear; ADOQyStocks.SQL.Add('update F_ARTSTOCK ' + ' set AS_QTEMINI= :Parm_min,AS_QTEMAXI= :Parm_max ' + ' where AS_PRINCIPAL = 1 ' + ' AND AR_REF = '+ #39 + codrefe + #39 ); ADOQyStocks.Parameters.ParamValues['Parm_min'] := round (dias_min * venta_dia); ADOQyStocks.Parameters.ParamValues['Parm_max'] := round (dias_max * venta_dia); ADOQyStocks.ExecSQL; //ADOQystocks.Active; Esto te sobra //si sigue dando error pon añade: AdoQyStocks.Edit; AdoQyStocks.Post; ADOQyArticles.Next; end; ADOConec.CommitTrans; Gracias por la ayuda prestada
Responder Con Cita
  #4  
Antiguo 16-04-2005
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Cita:
Empezado por miquellg
1.- si quito ADOQystocks.Active ocurre lo mismo.
No trabajo con ADO, pero pensando... si pones
Código Delphi [-]
ADOQystocks.Active := True;
Es sólo un pálpito.
Saludos
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.
Responder Con Cita
  #5  
Antiguo 16-04-2005
miquellg miquellg is offline
Miembro
 
Registrado: abr 2005
Posts: 46
Poder: 0
miquellg Va por buen camino
Parece que tampoco funciona, el mismo error.

Cambio la forma de la pregunta:
Alguien podria decirme que componentes necesito para modificar un registro con ADOquery y en que orden debo abrir, cerrar, editar, etc ...
Responder Con Cita
  #6  
Antiguo 16-04-2005
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Hola.. pero el error que te da es que el DataSet está cerrado... ¿y si dejas todo abierto y lo ejecutas desde delphi?
Saludos
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.
Responder Con Cita
  #7  
Antiguo 27-04-2005
CCCP CCCP is offline
Miembro
 
Registrado: dic 2004
Ubicación: Barcelona
Posts: 38
Poder: 0
CCCP Va por buen camino
AdoQyStocks.Post;

AdoQyStocks.Post;
Esto no tiene sentido hacerlo. quitalo y te funcionara
Responder Con Cita
  #8  
Antiguo 25-02-2009
Sodesne Sodesne is offline
Registrado
 
Registrado: nov 2008
Posts: 7
Poder: 0
Sodesne Va por buen camino
Cita:
Empezado por miquellg Ver Mensaje
Parece que tampoco funciona, el mismo error.

Cambio la forma de la pregunta:
Alguien podria decirme que componentes necesito para modificar un registro con ADOquery y en que orden debo abrir, cerrar, editar, etc ...

Hola que tal, oye cómo lograste resolver este problema, me está sucediendo lo mismo a mi, Hago un post y despues quiero "refrescar" el dataset desactivándolo y volviendolo a activar, y justo en el Dataset.Active := True, me manda el error de Dataset no t in edit or insert mode.

Saludos
Responder Con Cita
  #9  
Antiguo 16-05-2011
Sodesne Sodesne is offline
Registrado
 
Registrado: nov 2008
Posts: 7
Poder: 0
Sodesne Va por buen camino
SOlucionado

Cita:
Empezado por Sodesne Ver Mensaje
Hola que tal, oye cómo lograste resolver este problema, me está sucediendo lo mismo a mi, Hago un post y despues quiero "refrescar" el dataset desactivándolo y volviendolo a activar, y justo en el Dataset.Active := True, me manda el error de Dataset no t in edit or insert mode.

Saludos
Que tal, solo pasaba para escribir cómo solucioné el problema.

Resulta que me pasaba este error al activar el dataset, porque en otro codigo del formulario en varios eventos (cobre todo el evento Onchange) de distintos componentes, se hacia un llamado al dataset que acababa de cerrar, para modificar valores o leerlos del dataset, y por eso me salía el msj de error, entonces controlando esos eventos dodne utilizaba el dataset siempre verificaba antes de hacer cualquier modificacions que si el dataset estaba activo lo hiciera.

Y con eso tuvo.

Saludos
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


La franja horaria es GMT +2. Ahora son las 03:53:18.


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