Ver Mensaje Individual
  #13  
Antiguo 19-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Reputación: 25
Caral Va por buen camino
Hola
Aqui Hell_Raiser tiene razon, en parte.
Si haces una consulta y luego cierras el query los datos se perderan, salvo que los guardes en algun sitio, por eso te recomendo Hell_Raiser el uso de otro query.
Bien, si te empeñas en usar solo uno, entonces tienes que guardar los datos en algun sitio.
clave y costoac son datos sacados de la consulta, si la cierras los pierdes, entonces como recogerlos, pues con una variable.

Código Delphi [-]
Var
 Clave : String;
 costoac: Real;
begin
 //Zcompras.sql.Clear;  // mucho trabajo
 // Zcompras.Close;    // Mucho trabajo
  Zcompras.SQL.Text:= 'SELECT Cantidad, CostoF, Subtotal, CostoAc,Clave FROM compras ';
  Zcompras.open;

 //  if Zcompras.RecordCount<>0 then begin // para que, no se necesita
 //  Zcompras.First; // para que

  if( Edit3.Text<> '') then
  begin
 //While Not(Zcompras.Eof) do // nada
 // begin

  cantidad:=  Zcompras.Fields[0].AsInteger;
  precio:= Zcompras.Fields[1].AsFloat;
  sub:= Zcompras.Fields[2].AsFloat;
  anterior:= Zcompras.Fields[3].AsFloat;
  clave:=Zcompras.Fields[4].asString;
  distribuir:=strtofloat(Edit3.Text);
 porcentaje:=(Precio/Updatesub)*100;
 miparte:=(distribuir*porcentaje)/100;
 CostoNuevo:=miparte/cantidad;
 costoac:=trunc(anterior+CostoNuevo);

 //Zcompras.sql.Clear; // otra vez, mucho trabajo
 // Zcompras.Close;  // para nada
 Zcompras.SQL.Text:= ' update compras set CostoAc = :costoac WHERE Clave = :clave';
 Zcompras.ParamByName('costoac').AsFloat:= costoac;
 Zcompras.ParamByName('clave').AsFloat:= clave;
 Zcompras.ExecSQL;

 // Zcompras.Next;  // sobra
 // end;
end;
   end;
Revisalo, veras que hay mucho menos codigo y esta mas legible.
Ademas solo usas un query.
Saludos
Responder Con Cita