En principio yo lo veo de otra forma:
Código Delphi
[-]
if qrPan.BookmarkValid(marca) then qrPan.FreeBookmark(marca);
marca := qrPan.GetBookMark;
while not qrPan.eof do
begin
qrPan.next;
end;
if qrPan.BookmarkValid(marca) then
begin
qrPan.GoBookmark(marca);
qrPan.FreeBookmark(marca);
end;
marca := nil;
Es decir, lo normal es obtener la marca, mover el dataset y por último, preguntar si el BookMark es válido:
- si lo es, voy a ese Bookmark y despues lo libero
- si no lo es, es que ha habido algún problema, no sé si es conveniente llamar a FreeBookmark, puesto que en este caso, no es un puntero de marca Válido.
Por otra parte habría que mirar la implementación o ayuda sobre este tema en MySql.
Ten en cuenta que si cierras la consulta y despues la vuelves a abrir, los punteros no serán válidos, quizás sea convienente guardar la clave primaria de ese registro y usar un Locate, en lugar de usar un Bookmark.
Saludos