Hola.
Como dice
Chris, creo que el problema esta donde tomás el Bookmark,
el alcance de la variable donde se almacena o si es modificada en algún punto, ya que el echo de cerrar la consulta no afecta a la variable TBookmarkStr.
Te pongo un ejemplo simple por si te sirve de ayuda:
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
var
BM: TBookmarkStr;
begin
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('SELECT * FROM COUNTRY');
IBQuery1.Open;
IBQuery1.MoveBy(4); BM:= DBGrid1.DataSource.DataSet.Bookmark;
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('UPDATE COUNTRY');
IBQuery1.SQL.Add('SET CURRENCY = :MONEDA');
IBQuery1.SQL.Add('WHERE COUNTRY = :PAIS');
IBQuery1.ParamByName('PAIS').AsString:= 'Japan';
IBQuery1.ParamByName('MONEDA').AsString:= 'Yin';
IBQuery1.ExecSQL;
IBQuery1.Close;
IBQuery1.SQL.Text:= 'SELECT * FROM COUNTRY';
IBQuery1.Open;
DBGrid1.DataSource.DataSet.Bookmark := BM;
end;
Un saludo.