Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Actualizar todos los registros de un ClientDataSet (https://www.clubdelphi.com/foros/showthread.php?t=93514)

oscarac 22-10-2018 22:40:12

Actualizar todos los registros de un ClientDataSet
 
Como dice el titulo como hago para actualizar todos los registros ?
la idea es que tengo una tabla en memoria con varios registros y una columna de ITEM que va del 1 al Nº total de registros

imaginemos que tengo una tabla con 60 registros, enumerados y si borro el registro 20, todos los demas deben re-enumerarse y tendre 59 registros....

estaba pensando en

Código Delphi [-]
vitem := 1;
CdsAsiento.First;
While not cdsasiento.eof do
Begin
  cdsasiento.edit;
  cdsasiento.item.value := vItem;
  cdsasiento.post;
  inc(vitem);
End;


existe alguna otra manera?

Caminante 23-10-2018 00:09:54

Hola


Como es un clientdataset podrias crear el campo para la numeracion como calculado y luego en el evento oncalcfields:


Código Delphi [-]
MiDataset.fieldbyname('Num').asinteger:=Midataset.recno;


No lo he probado pero una vez hice lo mismo y mas o menos recuerdo que asi lo resolvi.



Espero sea util


Saludos

oscarac 23-10-2018 00:21:07

no funciona, me sale 0 en todos los registros.

ecfisa 23-10-2018 19:53:37

Hola.

Pero, ¿ Asignaste la propiedad TClientDataSet.RecNo al campo calculado en el evento OnCalcFields del TClientDataSet ?

Saludos :)

oscarac 23-10-2018 20:28:28

me explicas como se hace por favor?

ecfisa 23-10-2018 21:29:08

Hola.

Si por supuesto, va un ejemplo:

1.- Sobre el TClientDataSet hace click con botón derecho del mouse y agrega los campos persistentes:


2.- Agrega un nuevo campo:


3.- Definelo:


Y luego, estando seleccionado el TClientDataSet, desde el Object Inspector -> events -> doble click sobre el evento -> OnCalcFields y dentro del procedimiento este código:
Código Delphi [-]
procedure TForm1.ClientDataSet1CalcFields(DataSet: TDataSet);
begin
  cdsRecNo.Value := ClientDataSet1.RecNo;
end;

Saludos :)

oscarac 24-10-2018 02:06:25

ah si
hice eso, agregue un campo Item (Calculated)
pero me sale cualquier cosa

ecfisa 24-10-2018 16:07:59

Hola.

En mis pruebas mantiene correctamente la numeracion de los registros al agregarlos o al borrarlos:


Pero, hay que tomar en cuenta que no todos los DataSet reconocen posiciones y eso podría estar dandote algun problema. En la categoría de los que no lo hacen entran aquellos que soportan cliente/servidor.

Como desconozco el gestor de base de datos y los componentes de conexión que estas usando, no podría decir mucho mas...

Saludos :)

Caminante 24-10-2018 17:04:56

Cita:

Empezado por ecfisa (Mensaje 529215)
Hola.

En mis pruebas mantiene correctamente la numeracion de los registros al agregarlos o al borrarlos:





En el programa que tenia tambien funcionaba bien sobre el clientdataset. Tal vez tengas en la propiedad packetrecords un valor diferente al que tiene por defecto y eso este afectando (Creo). Fuera de eso no se que pueda estar pasando.
Por desgracia no he podido encontrar el codigo de mi programa para compararlo.


Saludos

oscarac 27-11-2018 17:34:28

Uso MsSQL me conecto via FireDac

Cita:

Empezado por ecfisa (Mensaje 529215)
Hola.

En mis pruebas mantiene correctamente la numeracion de los registros al agregarlos o al borrarlos:


Pero, hay que tomar en cuenta que no todos los DataSet reconocen posiciones y eso podría estar dandote algun problema. En la categoría de los que no lo hacen entran aquellos que soportan cliente/servidor.

Como desconozco el gestor de base de datos y los componentes de conexión que estas usando, no podría decir mucho mas...

Saludos :)


oscarac 27-12-2018 16:24:41

aun no puedo solucionar este problema
he seguido los pasos indicados y nada

alguna referencia adicional?

Al González 27-12-2018 20:02:57

Hola Oscar. Tal vez deberías mostrar lo que estás haciendo, por lo menos con el 10% de dedicación y detalle que tuvo ecfisa para orientarte.

La pereza para los que programan en Visual Basic, colega. ;-)

oscarac 27-12-2018 20:25:59

entendi cual es el problema.
lo que me dio ecfisa si funciona ya lo probe, el tema es que posteriormente al post, recorro los registros del ClientDataSet, para hacer unos calculos (sumas, acumulados, etc), es ahi donde se hace bolas.
lo solucione, pero ahora me doy con la sorpresa que cuando ejecuro la instruccion

CdsDetalle.First

el campo Item se pone en blanco (cero) en todos los registros...
cosa de locos


La franja horaria es GMT +2. Ahora son las 09:56:58.

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