Ver Mensaje Individual
  #3  
Antiguo 23-04-2008
Fita Fita is offline
Miembro
 
Registrado: jul 2003
Ubicación: Pilar - Argentina
Posts: 218
Reputación: 23
Fita Va por buen camino
Hola Kuan-Yiu... gracias por tu preocupación....

El problema es que justamente el campo nItem no forma parte de ninguna clave.
Si bien es cierto lo que tu dices, (al usuario no le importa en que orden estan los registros) en mi caso particular es necesario que cuando cargan un pedido que esta pendiente, éste se muestre en el orden en que lo cargaron (imagínate un pedido de 60 items) para su control.
Mi madre tenía una frase que decía: "La necesidad agudiza el ingenio", y bueno... con ingenio pude resolver el tema, aunque me gustaría saber porque el clientdataset falla de esa manera...
Te cuento como lo he resuelto:

En primer lugar no renumero los renglones (esto generaba la falla).
En el clientdataset detalle he creado un campo calculado: nRecs y en el evento OnCalcFields puse este codigo:

procedure TdmFac002.cds_Lpf022CalcFields(DataSet: TDataSet);
begin
Dataset.FieldByName('nRec').Value := Dataset.RecNo;
end;
Esto va contando los registros para mostrarlos por pantalla.
En el campo nItem sigo numerando los items cargados.
Cuando borran un item en lugar de renumerar hago lo siguiente:

procedure TfrmFac002.SetItems;
begin
with dmFac002 do
begin
nItem := 0;
// Guardo el Item mayor, ya que luego de un delete quedan salteados
cds_Lpf022.First;
while not cds_Lpf022.Eof do
begin
if nItem < cds_Lpf022Item.Value then
begin
nItem := cds_Lpf022Item.Value;
end;
cds_Lpf022.Next;
end;

// sumo 1 al item para que no se repita
inc( nItem );

end;
end;

Y sigo contando los items en la rutina de carga...

Un afectuoso saludo
Responder Con Cita