Если нужны все записи из набора данных, то конечно цикл необходим. Только не для DBGrid`а, а для DataSet`а, к которому эта сетка привязана.
Код:
while not dbgrid1.DataSource.DataSet.Eof do
begin
main.StringGrid1.Cells[0,dbgrid1.DataSource.DataSet.RecNo] :=
dbgrid1.DataSource.DataSet.Fields[0].AsString;
dbgrid1.DataSource.DataSet.Next;
end;
...что-то типа того