Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Отслеживание прогресса вставки записей с последующей ее отменой

5.3K
27 мая 2004 года
Fantom's
16 / / 05.04.2004
Всем привет! Помогите решить проблему...
Я делаю импорт из файла 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 открывалась модально и в ней было видно прогресс вставки записей и я хочу еще поставить на форму кнопку для возможности отмены вставки... Без потоков не обойтись... Подскажите пожалуйста как мне все это воплотить в реальность... Спасибо...
10
27 мая 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Fantom's

Мне нужно чтобы форма 2 открывалась модально и в ней было видно прогресс вставки записей и я хочу еще поставить на форму кнопку для возможности отмены вставки...


Вот набросок кода, работающего без потоков.

Код:
BatchMode(True);  // запретить все контролы,
                  // кроме кнопки Break
try
  FBreak := False;
  while not Query.EOF do
  begin
    // обработка данных
    Application.ProcessMessages;
  end;
finally
  BatchMode(False); // разрешить все контролы
end;

Подразумевается, что кнопка "Break" на форме устанавливает FBreak := True;
5.3K
27 мая 2004 года
Fantom's
16 / / 05.04.2004
Проблема в том что пока выполняется вставка я ничего делать не могу (открыть форму) а когда открываю модально форму то пока ее не закрою вставка не начнется...
Мне нужно перед запуском вставки открывать Форму на которой евсть прогресбар (показывает ход выполнения вставки) и кнопка которая останавливает вставку.
Может я чегото не понял? Можно поподробнее пожалуйста....
10
27 мая 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Fantom's
Проблема в том что пока выполняется вставка я ничего делать не могу (открыть форму) а когда открываю модально форму то пока ее не закрою вставка не начнется...


В том-то и дело, что форму не надо показывать модально. Я вообще обошелся одной формой. На рисунке показано, как выглядит форма до и во время импорта данных.

5.3K
27 мая 2004 года
Fantom's
16 / / 05.04.2004
Подскажи пожалуйста а как мне прервать процесс вставки?
5.3K
27 мая 2004 года
Fantom's
16 / / 05.04.2004
Ошибка
[Error] FAquitImport.pas(117): Undeclared identifier: 'BatchMode'
10
27 мая 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Fantom's
Ошибка
[Error] FAquitImport.pas(117): Undeclared identifier: 'BatchMode'


Ну, естественно. Это же моя процедура. Она делает все контролы запрещенными, и показывает ProgressBar, и наоборот. Результат ее работы видно на рисунке.

А для прерывания процесса обработки достаточно вставить внутрь цикла:

 
Код:
if FBreak then Break;
5.3K
28 мая 2004 года
Fantom's
16 / / 05.04.2004
Привет! Я сделал выполнение вставки через поток: запустил поток (выполнение вставки) открыл модальную форму и возвращал в нее результат вставки (прогрессбар)... Но вот проблема я хочу в конце вставки закрить модальную форму из потока вроде получается но пока я не подвигаю мишкой форма не закрывается... Что делать?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог