Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Actualización de Datos a DB haciendo recorriedo a ClientDataSet (https://www.clubdelphi.com/foros/showthread.php?t=91077)

novato_erick 06-11-2016 18:32:10

Actualización de Datos a DB haciendo recorriedo a ClientDataSet
 
Hola Sres:

Es Gusto Saludarlos nuevamente:

eh estado experimentando un poco con DataSnap y aun con DBExpress.

eh tenido un poco de experiencia haciendo una actualización modificando un registro desde el ClientDataSet simplemente haciendo esto:

Código Delphi [-]
procedure TfrmActualizaCantidadInv.btnModificarClick(Sender: TObject);
begin
 //aqui solamente traigo el registro que quiero modificar datos ejemplo:
  
        dmConexion.cdsModArtCantidad.Params.ParamByName('pIDART').AsInteger :=
        dmConexion.cdsTempModArtCantidadID_ARTICULO.AsInteger;
        dmConexion.cdsModArtCantidad.Active := True;
        dmConexion.cdsModArtCantidad.Edit;
//ok perfecto hasta aquí se activa el dataset en edit cambio el registro en etc le doy un botonActualizar y actualiza.
end;

El punto es que ahora al intentarlo hacer con un ClientDataSet temporal con un conjunto de datos escogido de una tabla por el usuario solamente actualizar el campo determinado y no lo hace a la finales al terminar el recorrido on ClientDataSet.EoF quiere hacer un insert.
ejemplo:
Código Delphi [-]
  try
       dmConexion.cdsTempModArtCantidad.First;
      while not dmConexion.cdsTempModArtCantidad.Eof do
     begin
        dmConexion.cdsModArtCantidad.Params.ParamByName('pIDART').AsInteger :=
        dmConexion.cdsTempModArtCantidadID_ARTICULO.AsInteger;
        dmConexion.cdsModArtCantidad.Active := True;
        dmConexion.cdsModArtCantidad.Edit;
        dmConexion.cdsModArtCantidadSTOCK.AsFloat :=
        dmConexion.cdsTempModArtCantidadSTOCK.AsFloat; //este dato lo traigo desde el temporal
        dmConexion.cdsModArtCantidad.Post; // el post se lo deje en el Evento OnBeforePost del  dmConexion.cdsTempModArtCantidad
        dmConexion.cdsTempModArtCantidad.Next;
    end;

      Except
       if VariablesRisto.messageerror <> '' then
       ShowMessage(VariablesRisto.messageerror);
       dmConexion.cdsModArtCantidad.Cancel;
    end;

Bueno a la finales el resultado es ya mencionado.

a la finales talvez aya una mejor manera de actualizar conjunto de datos con clientDataSet sin embargo es como se me ocurre por mi experiencia.

Agradeciendo cualquier colaboración;

Saludos

novato_erick

novato_erick 06-11-2016 19:11:33

Chicos lo siento el ApplyUpdate lo hago en el evento OnAfterPost del ClientDataSet Ejmplo:

Código Delphi [-]
procedure TdmConexion.cdsModArtCantidadAfterPost(DataSet: TDataSet);
begin
  if (cdsModArtCantidad.State in [dsEdit, dsInsert]) AND
    (cdsModArtCantidad.ChangeCount > 0) then
  begin
    cdsModArtCantidad.ApplyUpdates(0);
  end;
end;

Saludos nuevamente;

novato_erick 06-11-2016 19:48:29

Hola... utilizando el debug me percate que:

Código Delphi [-]
//
          dmConexion.cdsModArtCantidad.Params.ParamByName('pIDART').AsInteger :=
            dmConexion.cdsTempModArtCantidadID_ARTICULO.AsInteger;
          dmConexion.cdsModArtCantidad.Active := True; //aquì se pone en estado dsBrowse
          dmConexion.cdsModArtCantidad.Edit;//A pesar que le cambio su estado a Edición no lo esta haciendo por eso en el EventoOnAfterPost applica actualizaciones.
  if (dmConexion.cdsModArtCantidad.State in [dsBrowse]) then
  begin
   dmConexion.cdsModArtCantidad.Edit //Trate de hacer esto pero igual en el evento onAfterPost aun queda en dsBrowse
  end;

:confused:

Saludos


La franja horaria es GMT +2. Ahora son las 21:40:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi