Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problema con ClientDataSet y Resta (https://www.clubdelphi.com/foros/showthread.php?t=52485)

enecumene 22-01-2008 18:53:10

Problema con ClientDataSet y Resta
 
Hola compañeros del foro, estoy teniendo problemas con un borrado de datos en un clientDataSet y una resta con los valores mostrasdos en un DBGRid conectado al clientdataset, tengo lo siguiente:

para el borrado de un dato especifico del clientdataset:

Código Delphi [-]
procedure TFFacturar.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key = VK_DELETE then
  begin
    dsFactDetalle.DataSet.Delete;  
    if ClientDataSet1.RecordCount > 0 then
    begin
       Total.Text := FLoatToStr(StrToFloat(Total.Text) - ClientDataSet1.Fields[9].AsInteger);
    end;
    if ClientDataSet1.IsEmpty then
      begin
        Total.Text := '0.00';
      end;
  end;
end;

el problema esta en esta linea:

Código Delphi [-]
Total.Text := FLoatToStr(StrToFloat(Total.Text) - ClientDataSet1.Fields[9].AsInteger);

los valores lo muestro en un edit, y el problema que me da es que no me resta los valores correcto, por ejemplo, en el DBGrid, la primera linea tiene un valor de 12 pesos, y las demas lineas son de 24, 36, el edit tiene un valor de 72 pesos, selecciono en el grid la linea con valor 24 por ejemplo, la borro, entonces en el edit me deberia resta 24-72 no?, pues no, siempre me resta el valor de la primera linea que es 12, a que se debe eso?.

Saludos.

Caral 22-01-2008 19:04:24

Hola
Maestro no entiendo.
Creo que usas ado?, verdad.
Por que usar el cliente data set?
Que valor quieres borrar?, el de un campo?, la suma de todos?.
Por que no usar un update?
Me explicas, asi aprendo.
Saludos

juanelo 22-01-2008 19:04:54

Que tal,
Tu error está en que primero borras y luego restas.

Código Delphi [-]
dsFactDetalle.DataSet.Delete;

Cuando haces lo anterior el cursor se mueve al registro anterior (que es el que tiene el valor 12).

Lo correcto sería:

Código Delphi [-]
 procedure TFFacturar.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key = VK_DELETE then
  begin      
    if ClientDataSet1.RecordCount > 0 then
    begin
       Total.Text := FLoatToStr(StrToFloat(Total.Text) - ClientDataSet1.Fields[9].AsInteger);
       dsFactDetalle.DataSet.Delete;    
    end;
    if ClientDataSet1.IsEmpty then
      begin
        Total.Text := '0.00';
      end;
  end;
end;

Saludos

enecumene 22-01-2008 19:09:59

Efectivamente, como dijo Juanelo ese era el problema primero borraba y luego calculaba, lo tengo asi ahora y va de 10:

Código Delphi [-]
procedure TFFacturar.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key = VK_DELETE then
  begin
    if ClientDataSet1.RecordCount > 0 then
    begin
       Total.Text := FLoatToStr(StrToFloat(Total.Text) - ClientDataSet1.Fields[9].AsInteger);
    end;
    if ClientDataSet1.IsEmpty then
      begin
        Total.Text := '0.00';
      end;
    dsFactDetalle.DataSet.Delete;  
  end;
end;

Gracias a ambos por su tiempo, Saludos.;)

enecumene 22-01-2008 19:20:21

Cita:

Empezado por Caral (Mensaje 260049)
Hola
Maestro no entiendo.
Creo que usas ado?, verdad.
Por que usar el cliente data set?
Que valor quieres borrar?, el de un campo?, la suma de todos?.
Por que no usar un update?
Me explicas, asi aprendo.
Saludos

Efectivamente Amigo Caral estoy usando en este caso ADO con base de datos Access, uso el clientDataSet porque estoy haciendo un modulo de Facturacion, y los datos los estoy mostrando en Memoria antes de registrarlo en la base de datos, asi para mi es menos trabajoso.

Saludos.

Caral 22-01-2008 19:25:12

Hola
Gracias por la explicacion aunque sigo sin entender, bueno, la edad no perdona, me estais dejando atras demasiado rapido.
Saludos

enecumene 22-01-2008 20:00:10

Y que te parece un pequeño ejemplo grafico para que te des una idea?.:)

http://img183.imageshack.us/img183/7...detallezv8.jpg


La franja horaria es GMT +2. Ahora son las 23:14:57.

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