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.