Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-04-2008
Fita Fita is offline
Miembro
 
Registrado: jul 2003
Ubicación: Pilar - Argentina
Posts: 216
Poder: 21
Fita Va por buen camino
Ayuda con ClientDataset

Hola a todos...

Mi problema es el siguiente:

Mi aplicacion es un sistema de facturacion, con una tabla maestra (cabecera del pedido) y una detalle (con los items cargados). Un provider para cada una y un clientdataset para cada provider. El sistema puede dejar pedidos pendientes, lo que permite una posterior modificación.
Cuando cargan un pedido voy grabando en un campo el n° de item. Cuando llaman a un pedido pendiente y borran un item, el sistema renumera los items cargados. la rutina es así:

nItem := 1;

while not TablaDetalle.eof do // es el clientdataset
begin
Tabladetalle.edit;
TabladetalleItem.value := nItem;
Tabladetalle.post;
TablaDetalle.next;
end;
Luego de esto el clientdataset queda parado en el ultimo registro.

Esto funciona perfecto, pero si vuelven a dejarlo pendiente tengo que hacer un ApplyUpdates(0) para actualizar los datos en el server. Bueno aca es donde falla...

Si se renumeran los items cargadaos Todos los registros de la tablaDetalle se actualizan con el ultimo registro del clientdataset. So no se renumeran los items anda perfecto.
Nota: El n° de item es para el delete:

delete from TablaDetalle where npedido = :npedido and item = nItem

Que puede pasar ?? alguna ayuda será bienvenida

Saludos
Fita
Delphi7 - FIBPlus 6.3
Responder Con Cita
  #2  
Antiguo 22-04-2008
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
Nunca, jamás, salvo que sea absoluta y totalmente imprescindible renumeres las líneas de detalle si ese número forma parte de la clave primaria. A mí me ha dado más problemas que ventajas.
En el día a día al usuario le va a importar muy poco si las líneas de detalle internamente son la 2,3,7 o la 1,2,3.
Es mejor ajustar la numeración cuando se muestre en pantalla (si es que lo necesitas) que toquetear las claves primarias.
Responder Con Cita
  #3  
Antiguo 23-04-2008
Fita Fita is offline
Miembro
 
Registrado: jul 2003
Ubicación: Pilar - Argentina
Posts: 216
Poder: 21
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
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
ayuda ClientDataSet, DataSetProvider y ApplyUpdates cmm07 Varios 1 23-03-2008 08:27:28
Ayuda: ClientDataset Fita Conexión con bases de datos 2 11-10-2005 19:18:44
ClientDataSet y W98 tgsistemas Conexión con bases de datos 5 03-08-2004 10:13:06
ClientDataSet narvaez.om Conexión con bases de datos 2 19-05-2004 18:58:21
Ayuda con ClientDataSet!!!! Selene Providers 4 28-08-2003 19:21:27


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


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