Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Error ("not in edit or insert mode") en Update con ADOQuery (https://www.clubdelphi.com/foros/showthread.php?t=20485)

miquellg 16-04-2005 14:08:00

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.

marcoszorrilla 16-04-2005 14:11:59

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.

miquellg 16-04-2005 14:27:27

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

Pablo Carlos 16-04-2005 17:19:12

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

miquellg 16-04-2005 17:55:07

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 ...

Pablo Carlos 16-04-2005 18:00:49

Hola.. pero el error que te da es que el DataSet está cerrado... ¿y si dejas todo abierto y lo ejecutas desde delphi?
Saludos

CCCP 27-04-2005 01:14:09

AdoQyStocks.Post;
 
AdoQyStocks.Post;
Esto no tiene sentido hacerlo. quitalo y te funcionara

Sodesne 25-02-2009 04:56:58

Cita:

Empezado por miquellg (Mensaje 85165)
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

Sodesne 16-05-2011 20:11:07

SOlucionado
 
Cita:

Empezado por Sodesne (Mensaje 339260)
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


La franja horaria es GMT +2. Ahora son las 02:12:39.

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