Расширяя ответ @ Ravaut123, я бы предложил следующий код:
Убедитесь, что ваш запрос не подключен к какому-либо другому визуальному компоненту, и для него не установлены никакие события, которые запускаются в строках строк, потому что это приведет к обновлению при каждом изменении активной записи, замедляя процесс.
Вы можете отключить визуальные элементы управления, используя disablecontrols
, но не события и невизуальные элементы управления.
...
SQLatable:= 'SELECT SingleField FROM atable ORDER BY indexedfield ASC';
AQuery:= TAdoQuery.Create(Form1);
AQuery.Connection:= ....
AQuery.SQL.Text:= SQLatable;
Использование запроса гарантирует, что вы выбираете только 1 поле, в том порядке, в котором вы хотите, это уменьшает сетевой трафик. Таблица выбирает все поля, вызывая гораздо больше накладных расходов.
function TForm1.LoadingAllIntoStringList(AQuery: TAdoQuery): TStringList;
var
Field1: TField;
begin
Result:= nil;
try
if not(AQuery.Active) then begin
AQuery.Open;
end else begin
AQuery.First;
end;
AQuery.DisableControls;
AQuery.Filtered:= false; //Filter in the SQL `where` clause
AQuery.FetchAll; //Preload all data into memory
Result:= TStringlist.Create;
except
{ignore error, will return nil}
end;
try
Result.Sorted:= false; //Make sure you don't enable sorting
Result.Capacity:= AQuery.RecordCount; //Preallocate the needed space
Field1:= AQuery.FieldByName('SingleField'); //Never use `fieldbyname` in a loop!
while not AQuery.EOF do begin
Result.Add(Field1.AsString);
AQuery.Next;
end; {while}
AQuery.EnableControls;
except
FreeAndNil(Result);
end;
Если вы хотите загрузить данные в список строк, чтобы выполнить некоторую обработку, попробуйте вместо этого сделать это в операторе SQL. БД может использовать индексы и другие оптимизации, которые не может использовать список строк.
Если вы хотите сохранить эти данные в файл CSV, рассмотрите возможность использования встроенной функции БД для этого.
например MySQL имеет:
SELECT X FROM table1 INTO OUTFILE 'c:/filename_of_csv_file.txt'
Который создаст для вас файл CSV.
Многие БД имеют функции симуляции.