Como he dicho creo que el código anterior se podría simplificar con algo así:
Código Delphi
[-]i := 0;
while not DataModule1.IBQListado.Eof do
begin
for j := 0 to DataModule1.IBQListado.FieldCount - 1 do
fr.StringGrid1.Cells[j, i + 1] := DataModule1.IBQListado.Fields[j].Value;
DataModule1.IBQListado.Next;
Inc(i);
end;
fr.StringGrid1.RowCount := DataModule1.IBQListado.RecordCount + 1;
fr.StringGrid1.ColCount := DataModule1.IBQListado.FieldCount;
for i := 0 to DataModule1.IBQListado.FieldCount - 1 do
fr.StringGrid1.Cells[i, 0] := DataModule1.IBQListado.Fields[i].FieldName;
Y eliminas la matriz.
Si aun así te sigue dando problemas de "range check error", debes ejecutarlo paso a paso y evaluar dónde está el error.