Part #1:
Du bist da ziemlich am mischen. Also RecNo/RecCount, FindFirst/FindNext (<- gefilterte Menge). Ersetze mal FindFirst/FindNext durch einfaches First/Next. Bei TZQuery kannst Du aber auch gleich RecNo setzten, wenn du sowieso RecCount verwendest.
Delphi-Quellcode:
for i := 1 to RecCount do begin
zQuery.RecNo := i;
Part #2:
Haltepunt stzen und Variable ColumnIndex auswerten. Scheinen ja gleich zwei dyn. Arrays zu sein, ob die die beide auf entsprechende Länge initialisiert sind oder ColumnIndex eben >= 0 ist. (Colums schreien bei mir nach Index-Start bei 0, was bei -1 dann auf jeden Fall ein üngültiger Index für das Array wäre)
if FBuffer.Columns[FColumnOffsets[ColumnIndex - 1]] = 0 then