WHILE NOT ZQuery1.EOF DO
begin
    ZQuery1.Edit; 
    ZQuery1.FieldByName('alguncampo').AsInteger:=0;    
    ZQuery1.Post
    ZQuery1..Next;
end;El código precendente nos dará el error y es correcto que lo haga, porque no situamos el puntero al comienzo del DataSet que sería con ZQuery1.First.
ZQuery1.First;
WHILE NOT ZQuery1.EOF DO
begin
    ZQuery1.Edit; 
    ZQuery1.FieldByName('alguncampo').AsInteger:=0;    
    ZQuery1.Post
    ZQuery1..Next;
end;Otra manera de resolver esto es mediante el uso de ExecuteDirect (y más rápido si se trata de un gran volumen), si tenemos un identificador único, mejor:
ZQuery1.First;
WHILE NOT ZQuery1.EOF DO
begin
  ZConnection1.ExecuteDirect('UPDATE tabla SET alguncampo=0 WHERE    identificaorunico='+ZQuery1.FieldByName('id').AsString'+' ;');
  ZQuery1..Next;
end;Se recomienda hacer esto cuando no podamos hacerlo mediante una sentencia SQL UPDATE, ya que puede ser lento dependiendo del volumen de datos.
