我正在使用以下过程从SqlLite中使用TSQLConnection导出数据:
Campos := TStringList.Create;
SQLiteConnection.Execute('SELECT * FROM tabela', nil, results);
if not results.IsEmpty then
begin
results.GetFieldNames(Campos);
XLApp1 := createoleobject('excel.application');
XLApp1.Workbooks.Add(xlWBatWorkSheet);
Sheet := XLApp1.Workbooks[1].WorkSheets[1];
linha := 1;
begin
pBar.Max := results.RecordCount;
for coluna := 0 to results.FieldCount - 1 do
Sheet.Cells[1, coluna + 1] := Campos[coluna];
while ( not results.Eof ) do
begin
linha := linha + 1;
for coluna := 0 to results.FieldCount - 1 do
Sheet.Cells[linha, coluna + 1] := results.FieldByName(campos[coluna]).AsString;
results.next;
pBar.Position := pBar.Position + 1;
Application.ProcessMessages;
end;
end;
);
它能正常工作。但是完成任务需要太长时间了。在拥有SSD的i7笔记本上,导出一个包含40,000个记录和45个字段的表格需要35分钟。
因此我的问题是:是否有可能更快一些?
Application.ProcessMessages
。大多数人认为它可以神奇地加速程序运行,但实际上会拖慢程序的运行速度。因此,永远不应该使用它。 - Jerry Dodge