#user-interface #delphi-10.2-tokyo
Вопрос:
Мне нужно перенести массовые записи в другую таблицу, у меня есть такой код, как:
sSql := 'INSERT INTO User (FieldName1, FieldName2) values (:Nr, :Strng)';
adoquery1.Parameters.Clear();
adoquery1.SQL.text:= sSql;
adoquery1.Parameters.ParseSQL( sSql, True );
adoquery1.Parameters.ParamByName('Nr').DataType := ftInteger
adoquery1.Parameters.ParamByName('Strng').DataType := ftString;
i2 := Datamodule1.qryBackup.RecordCount - 1;
ProgressBar1.Max := i2;
for i := 1 to i2 do
begin
adoquery1.Parameters.ParamByName('Nr').Value := i;
adoquery1.Parameters.ParamByName('Strng').Value := sUserName(i);
adoquery1.ExecSQL;
intNumberInsertedRows := intNumberInsertedRows 1;
ProgressBar1.Position := intNumberInsertedRows;
end;
Код выполняется нормально, но панель прогресса не отвечает в соответствии с тем, что я ожидаю. Каков наиболее эффективный метод для этого?
Комментарии:
1. Вы можете
Update()
использовать панель прогресса (или форму) на каждой итерации цикла для запуска перерисовки пользовательского интерфейса. Но на самом деле, если вам нужен отзывчивый пользовательский интерфейс, вам следует вместо этого перенести операции блокировки (например, логику БД) в рабочий поток и при необходимости асинхронно публиковать обновления статуса в пользовательском интерфейсе.