BatchMode(True); // запретить все контролы,
// кроме кнопки Break
try
FBreak := False;
while not Query.EOF do
begin
// обработка данных
Application.ProcessMessages;
end;
finally
BatchMode(False); // разрешить все контролы
end;
Отслеживание прогресса вставки записей с последующей ее отменой
Я делаю импорт из файла dbf в SQL-server
вот кусок кода
procedure TAquitImport.dxBarButton1Click(Sender: TObject);
var
i: integer;
begin
Form2.Show;
DM.BANK_IMPORT.Close;
DM.DsDatabase1.Close;
DM.DsDatabase1.DatabaseName := AquitImport.FileListBox1.Directory;
DM.DsDatabase1.Open;
for i := 0 to (AquitImport.FileListBox1.Items.Count-1) do begin
if AquitImport.FileListBox1.Selected then
begin
DM.BANK_IMPORT.TableName := FileListBox1.Items.Strings;
DM.BANK_IMPORT.Open;
end;
end;
MainForm.PIniFile.ReadSection('field', SLIN);
DM.INSERT_BANK_TEMPORARY.SQL.LoadFromFile(MainForm.PIniFile.ReadString('common','sqlpath',''));
if (DM.DS_BANK_IMPORT.DataSet.RecordCount > 0) then
begin
DM.BANK_IMPORT.First;
while not (DM.BANK_IMPORT.Eof) do
begin
for i:=0 to DM.INSERT_BANK_TEMPORARY.Params.Count-1 do
begin
if MainForm.pIniFile.ReadString('field',DM.INSERT_BANK_TEMPORARY.Params.Name,'') <> '' then
begin
// DM.INSERT_BANK_TEMPORARY.Params.DataType := DM.BANK_IMPORT.FieldByName(MainForm.pIniFile.ReadString('field',DM.INSERT_BANK_TEMPORARY.Params.Name,'')).DataType;
// DM.INSERT_BANK_TEMPORARY.Params.SetAsVariant('');
if (DM.BANK_IMPORT.FieldByName(MainForm.pIniFile.ReadString('field',DM.INSERT_BANK_TEMPORARY.Params.Name,'')).AsVariant) <> NULL then
begin
DM.INSERT_BANK_TEMPORARY.Params.SetAsVariant(DM.BANK_IMPORT.FieldByName(MainForm.pIniFile.ReadString('field',DM.INSERT_BANK_TEMPORARY.Params.Name,'')).AsVariant);
end;
end;
end;
DM.INSERT_BANK_TEMPORARY.Execute;
Form2.cxProgressBar1.Position := Trunc(DM.BANK_IMPORT.RecNo/DM.BANK_IMPORT.RecordCount*100);
Form2.Refresh;
DM.BANK_IMPORT.Next;
end;
end;
Form2.Close;
Application.CreateForm(TBANKTEMPORARY, BANKTEMPORARY);
BANKTEMPORARY.ShowModal;
end;
Мне нужно чтобы форма 2 открывалась модально и в ней было видно прогресс вставки записей и я хочу еще поставить на форму кнопку для возможности отмены вставки... Без потоков не обойтись... Подскажите пожалуйста как мне все это воплотить в реальность... Спасибо...
Цитата:
Originally posted by Fantom's
Мне нужно чтобы форма 2 открывалась модально и в ней было видно прогресс вставки записей и я хочу еще поставить на форму кнопку для возможности отмены вставки...
Мне нужно чтобы форма 2 открывалась модально и в ней было видно прогресс вставки записей и я хочу еще поставить на форму кнопку для возможности отмены вставки...
Вот набросок кода, работающего без потоков.
Код:
Подразумевается, что кнопка "Break" на форме устанавливает FBreak := True;
Мне нужно перед запуском вставки открывать Форму на которой евсть прогресбар (показывает ход выполнения вставки) и кнопка которая останавливает вставку.
Может я чегото не понял? Можно поподробнее пожалуйста....
Цитата:
Originally posted by Fantom's
Проблема в том что пока выполняется вставка я ничего делать не могу (открыть форму) а когда открываю модально форму то пока ее не закрою вставка не начнется...
Проблема в том что пока выполняется вставка я ничего делать не могу (открыть форму) а когда открываю модально форму то пока ее не закрою вставка не начнется...
В том-то и дело, что форму не надо показывать модально. Я вообще обошелся одной формой. На рисунке показано, как выглядит форма до и во время импорта данных.
Подскажи пожалуйста а как мне прервать процесс вставки?
[Error] FAquitImport.pas(117): Undeclared identifier: 'BatchMode'
Цитата:
Originally posted by Fantom's
Ошибка
[Error] FAquitImport.pas(117): Undeclared identifier: 'BatchMode'
Ошибка
[Error] FAquitImport.pas(117): Undeclared identifier: 'BatchMode'
Ну, естественно. Это же моя процедура. Она делает все контролы запрещенными, и показывает ProgressBar, и наоборот. Результат ее работы видно на рисунке.
А для прерывания процесса обработки достаточно вставить внутрь цикла:
Код:
if FBreak then Break;
Привет! Я сделал выполнение вставки через поток: запустил поток (выполнение вставки) открыл модальную форму и возвращал в нее результат вставки (прогрессбар)... Но вот проблема я хочу в конце вставки закрить модальную форму из потока вроде получается но пока я не подвигаю мишкой форма не закрывается... Что делать?