時間がなくても同様の問題を抱えている可能性がある人のために、トップに投稿された(申し訳ありません)回答。
ルール 1 は、いつものように、できる限りループから抜け出すことです。
2、TField var := ADODataSet.FieldByname() をループの外に移動します。 3、ADODataSet.DisableControls(); および ADODataSet.EnableControls(); ループ4の周りで、各行のstringGrid.Rows [r].BeginUpdate()およびEndUpdate()(コントロール全体では実行できません)これらのそれぞれが数秒削られましたが、「目よりも速く」になりました見える」に変更することで
loop
stringGrid.RowCount := stringGrid.RowCount + 1;
end loop
stringGrid.RowCount := ADODataSet.RecordCount;ループの前に置く
+1、そして助けてくれたすべての人に心から感謝します。
(ここで、TChart の描画を最適化するために何ができるかを見ていきますが、これも遅いです ;-)
テーブルに約 3,600 行あるため、文字列グリッドに入力するのに 45 秒かかります。私は何を間違っていますか?
ADODataSet := TADODataSet.Create(Nil);
ADODataSet.Connection := AdoConnection;
ADODataSet.CommandText := 'SELECT * FROM 測定値';
ADODataSet.CommandType := cmdText;
ADODataSet.Open();
while not ADODataSet.eof do
始める
TestRunDataStringGrid.RowCount := TestRunDataStringGrid.RowCount + 1;
MeasurementDateTime := UnixToDateTime(ADODataSet.FieldByname('time_stamp').AsInteger);
DoSQlCommandWithResultSet('SELECT * FROM start_time_stamp', AdoConnection, resultSet);
startDateTime := UnixToDateTime(StrToInt64(resultSet.Strings[0]));
経過時間:=測定日時 - 日時の開始;
TestRunDataStringGrid.Cells[0、Pred(TestRunDataStringGrid.RowCount)] := FormatDateTime('hh:mm:ss'、経過時間);
TestRunDataStringGrid.Cells[1, Pred(TestRunDataStringGrid.RowCount)] := FloatToStrWithPrecision(ADODataSet.FieldByname('inputTemperature').AsFloat);
TestRunDataStringGrid.Cells[2, Pred(TestRunDataStringGrid.RowCount)] := FloatToStrWithPrecision(ADODataSet.FieldByname('outputTemperature').AsFloat);
TestRunDataStringGrid.Cells[3, Pred(TestRunDataStringGrid.RowCount)] := FloatToStrWithPrecision(ADODataSet.FieldByname('flowRate').AsFloat);
TestRunDataStringGrid.Cells[4, Pred(TestRunDataStringGrid.RowCount)] := FloatToStrWithPrecision(ADODataSet.FieldByname('waterPressure').AsFloat * convert);
TestRunDataStringGrid.Cells[5, Pred(TestRunDataStringGrid.RowCount)] := FloatToStrWithPrecision(ADODataSet.FieldByname('waterLevel').AsFloat);
TestRunDataStringGrid.Cells[6, Pred(TestRunDataStringGrid.RowCount)] := FloatToStrWithPrecision(ADODataSet.FieldByname('cod').AsFloat);
ADODataSet.Next;
終わり;
ADODataSet.Close();
ADODataSet.Free();
アップデート:
Function DoSQlCommandWithResultSet(const command : String; AdoConnection : TADOConnection; resultSet : TStringList): Boolean;
変数
i : 整数。
AdoQuery : TADOQuery;
始める
結果:=真;
resultSet.Clear();
AdoQuery := TADOQuery.Create(nil);
試す
AdoQuery.Connection:= AdoConnection;
AdoQuery.SQL.Add(コマンド);
AdoQuery.Open();
私:= 0;
while not AdoQuery.eof do
始める
resultSet.Add(ADOQuery.Fields[i].Value);
私 := 私 + 1;
AdoQuery.Next;
終わり;
最後に
AdoQuery.Close();
AdoQuery.Free();
終わり;
終わり;