powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
25 сообщений из 102, страница 3 из 5
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39710410
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
function TfmCargoOutgoing.DoChangeOwnerContractCargoSub(AOldContractCargoSubId,
  ANewContractCargoSubId: integer): integer;
var
  CardCount: integer;
  q: TBISMySQLQuery;
  ChangedCount: integer; // кол-во измененных карточек
//  f: TForm;
//  i: integer;
//  pb: TProgressBar;
begin
  ChangedCount := 0;

  q := TBISMySQLQuery.Create;
  try
    // 1. Определить количество карточек для переноса
    q.From('cargo_card', 'cc');
    q.Select('COUNT(*) AS cnt');
    q.Where('object_type= ?', 'placement');
    q.AndWhere('get_weight_brutto_remains(cc.id) > 0', '');
    q.AndWhere('cc.contract_cargo_sub_id=?', AOldContractCargoSubId);
    q.Open;
    CardCount := q.Q.FieldByName('cnt').AsInteger;
    if Assigned(fP) then
      fP.Max3 := CardCount;

    // 2. Перенести все карточки в новый подтип груза по договору
    q.From('cargo_card', 'cc');
    q.Select('cc.id');
    q.Where('object_type= ?', 'placement');
    q.AndWhere('get_weight_brutto_remains(cc.id) > 0', '');
    q.AndWhere('cc.contract_cargo_sub_id=?', AOldContractCargoSubId);
    q.Open;

//      f := TForm.Create(nil);
//  f.SetBounds(0, 0, 300, 70);
//  f.Position := poScreenCenter;
//  pb := TProgressBar.Create(f);
//  pb.Align := alClient;
//  pb.Parent := f;
//  pb.Min := 0;
//  pb.Max := CardCount;
//  pb.Step := 1;
//  f.Show();
//  for i := pb.Min to pb.Max do begin
////    pb.StepIt;
//    pb.Position := i;
//    sleep (100);
//  end;


    while not q.Q.Eof do
      begin
        if DoChangeOwnerCargoCard(q.Q.FieldByName('id').AsInteger, ANewContractCargoSubId) <> 0 then
          begin
            inc(ChangedCount);
//            pb.StepIt;

            if Assigned(fP) then
              fP.Position3 := ChangedCount;
//            ShowMessage(IntToStr(ChangedCount));
          end;
        q.Q.Next;
      end;

//    f.Free;
  finally
    q.Free;
    Result := ChangedCount;
  end;
end;
...
Рейтинг: 0 / 0
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39710411
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad,

не надо сразу сломя голову искать черную кошку...
...
Рейтинг: 0 / 0
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39710412
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Котовасияsvnvlad,

не надо сразу сломя голову искать черную кошку...
В смысле? Я вижу, что код нестабилен. Вчера не работало, сегодня работает. Что будет завтра - неизвестно.
...
Рейтинг: 0 / 0
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39710413
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предполагаю, что зависание сервера (вернее связи с сервером) мешает работе VCL.
...
Рейтинг: 0 / 0
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39710414
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladПредполагаю, что зависание сервера (вернее связи с сервером) мешает работе VCL.
Это п....ц, дорогая редакция.
...
Рейтинг: 0 / 0
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39710416
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxвыбросить код slow-by-slow и написать sp-процедуру предлагали?
Что такое slow-by-slow и sp-процедура?
...
Рейтинг: 0 / 0
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39710417
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad,

это ты плохому от 79850 набрался. Сам он по себе человек хороший, но воспринимать сообщения технического плана от него не нужно, у него интересные взгляды на "внутреннюю реализацию", но они не вполне соответствуют официальным, а широта взглядов по отношению к у уже реализованным техническим системам чревата учащением случаев принятия не всегда верных решений...
...
Рейтинг: 0 / 0
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39710778
MinGW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krapotkinя писал статью , где ваш случай подробно описан
Простите, но у него как раз нет потоков. :) Он собрался их прикручивать, но они там как бы совсем не нужны.
schiГде-то я читал (не найду сейчас), что ProgressBar
Уже демонстрировали в теме - само перерисовывается, без дополнительных телодвижений.
...
Рейтинг: 0 / 0
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39710838
Фотография roschinspb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladКотовасияsvnvlad,

не надо сразу сломя голову искать черную кошку...
В смысле? Я вижу, что код нестабилен. Вчера не работало, сегодня работает. Что будет завтра - неизвестно. Прикручивание изолентой многопоточности стабильности не добавит. Сколько не встречал таких поделий, а результат такой, что случайно в одном из трех случаев приложение вылетает из системы... так что советую обновить резюме и отгулять накопившийся отпуск перед тем, как делать релиз
...
Рейтинг: 0 / 0
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39710935
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roschinspbsvnvladпропущено...

В смысле? Я вижу, что код нестабилен. Вчера не работало, сегодня работает. Что будет завтра - неизвестно. Прикручивание изолентой многопоточности стабильности не добавит. Сколько не встречал таких поделий, а результат такой, что случайно в одном из трех случаев приложение вылетает из системы... так что советую обновить резюме и отгулять накопившийся отпуск перед тем, как делать релиз многопоточность докручивал пару раз в Д7
но там, где действительно показалось нужным

1. для проверки, кто блокирует в Оракле
2. Для выполнения списка длительных Оракле-процедур с возможностью прерывания

Работает уже лет 10-12
...
Рейтинг: 0 / 0
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39711048
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MinGWkrapotkinя писал статью , где ваш случай подробно описан
Простите, но у него как раз нет потоков. :) Он собрался их прикручивать, но они там как бы совсем не нужны.
schiГде-то я читал (не найду сейчас), что ProgressBar
Уже демонстрировали в теме - само перерисовывается, без дополнительных телодвижений.
Сегодня опять не перерисовывается. Так что нужны они.
...
Рейтинг: 0 / 0
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39711049
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Котовасияsvnvlad,

это ты плохому от 79850 набрался.
Кто это? Там нет такого пользователя. Заинтриговали.
...
Рейтинг: 0 / 0
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39711051
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roschinspbsvnvladпропущено...

В смысле? Я вижу, что код нестабилен. Вчера не работало, сегодня работает. Что будет завтра - неизвестно. Прикручивание изолентой многопоточности стабильности не добавит. Сколько не встречал таких поделий, а результат такой, что случайно в одном из трех случаев приложение вылетает из системы... так что советую обновить резюме и отгулять накопившийся отпуск перед тем, как делать релиз
Вы просто не умеете их готовить.)
У меня в программе код автообновления программы написан на Thread-е. Очень четко и стабильно работает. ("Вы можете продолжать работать во время обновления").
...
Рейтинг: 0 / 0
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39711054
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MinGWОн собрался их прикручивать, но они там как бы совсем не нужны.
Уже демонстрировали в теме - само перерисовывается, без дополнительных телодвижений.
Есть другая программа, закидывает файлы на сервер обновлений. Там тоже прогрессбар морозится, это не единичный случай. Просто руки не доходят переписать на поток.
...
Рейтинг: 0 / 0
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39711055
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krapotkinтут вроде в правилах нет ограничений на ссылки
я писал статью , где ваш случай подробно описан
Спасибо, толково.
...
Рейтинг: 0 / 0
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39711068
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно ли в Thread-е обращаться на чтение полей из сложных подклассов?
Например, читать из диалогового окна параметры без синхронизации?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
TChangeOwnerThread = class(TThread)
  private
    FfmDlg: TMyDialogWindow;
    ...
    procedure Execute; override;
  public
    constructor Create(AMode: TcoMode; const ACargoCardId: Integer; ATermProc: TNotifyEvent);
    destructor Destroy; override;
  end;

...
constructor TChangeOwnerThread.Create(AMode: TcoMode; const ACargoCardId: Integer; ATermProc: TNotifyEvent);
begin
  inherited Create(true);
  FreeOnTerminate := true;
  OnTerminate := ATermProc;

  FMode := AMode;
  Fcargo_card_id := ACargoCardId;

  FfmDlg := TfmMyDialog.Create(nil);
  if FfmDlg.ShowModal = mrOk then
    ...
end;

destructor TChangeOwnerThread.Destroy;
begin
  FfmDlg.Free;
  inherited;
end;

procedure TChangeOwnerThread.DoChangeCardOwner;
begin
  ...
  ADQuery1.ParamByName('old_card_id').AsInteger := FfmDlg.OldCardId;
  ADQuery1.ParamByName('new_card_id').AsInteger := FfmDlg.NewCardId;  
  ADQuery1.ExecSql;
end;
...
Рейтинг: 0 / 0
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39711072
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladМожно ли в Thread-е обращаться на чтение полей из сложных подклассов?
В чем проблема передать их в конструктор потока?
...
Рейтинг: 0 / 0
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39711302
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmansvnvladМожно ли в Thread-е обращаться на чтение полей из сложных подклассов?
В чем проблема передать их в конструктор потока?
Ну там несколько разных режимов. В зависимости от режима вызывается своя функция с разными параметрами.
Код: pascal
1.
2.
3.
4.
5.
// Процедуры смены собственника по уровням
    procedure DoChangeOwnerConsignment(AOldConsignmentId, ANewConsignmentId: integer);
    function DoChangeOwnerContractCargoConsignment(AOldContractCargoConsignmentId, ANewContractCargoConsignmentId: integer): integer;
    function DoChangeOwnerContractCargoSub(AOldContractCargoSubId, ANewContractCargoSubId: integer): integer;
    function DoChangeOwnerCargoCard(AOldCargoCardId, ANewContractCargoSubId: integer): integer; // возвращает id новой карточки


Какую функцию вызывать, определяется ответом в диалоговом окне. Причем каждая вышестоящая по тексту функция вызывает в цикле нижестоящую, та в свою очередь еще раз нижестоящую, и уже она вызывает DoChangeOwnerCargoCard (иерархия).
Я подумал, что все это сделать в потоке проще, чем извне потока определять или на каждую делать свой класс потока.
Может быть сделать 4 конструктора с разными параметрами?
...
Рейтинг: 0 / 0
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39711312
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad...
Уже демонстрировали в теме - само перерисовывается, без дополнительных телодвижений.
Сегодня опять не перерисовывается. Так что нужны они.[/quot]
Прямо вот этот вот код 21689633 перестал работать? Врешь поди.
...
Рейтинг: 0 / 0
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39711402
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladВ зависимости от режима вызывается своя функция с разными параметрами.
Одна функция с тремя параметрами: тип операции, две id.
...
Рейтинг: 0 / 0
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39711507
Фотография roschinspb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad...пошаговый прогресс не отображается...
svnvlad...Все заработало нормально. В коде НИЧЕГО не менял...
svnvlad...сегодня оказалось, что работает...
svnvlad...Сегодня опять не перерисовывается...
svnvlad...Вы просто не умеете их готовить.)
У меня в программе код автообновления программы написан на Thread-е. Очень четко и стабильно работает. ("Вы можете продолжать работать во время обновления").

Просто у меня нет волшебного календаря, в котором отмечено в какой день какие функции отваливаются.
...
Рейтинг: 0 / 0
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39712182
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Котовасияsvnvlad...
Уже демонстрировали в теме - само перерисовывается, без дополнительных телодвижений.
Сегодня опять не перерисовывается. Так что нужны они.
Прямо вот этот вот код 21689633 перестал работать? Врешь поди.[/quot]
Сдался вам вот это код. Я же говорю, все зависит от скорости связи интернет-канала. Когда он быстрый, прогресс обновляется, когда медленный - морозится, и отображается полностью заполненным только в конце работы SQL-запросов.
...
Рейтинг: 0 / 0
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39712183
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roschinspbsvnvlad...пошаговый прогресс не отображается...
svnvlad...Все заработало нормально. В коде НИЧЕГО не менял...
svnvlad...сегодня оказалось, что работает...
svnvlad...Сегодня опять не перерисовывается...
svnvlad...Вы просто не умеете их готовить.)
У меня в программе код автообновления программы написан на Thread-е. Очень четко и стабильно работает. ("Вы можете продолжать работать во время обновления").

Просто у меня нет волшебного календаря, в котором отмечено в какой день какие функции отваливаются.
В те дни, когда связь тормозит, прогресс-бары замораживаются.
...
Рейтинг: 0 / 0
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39712185
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, актуальная тема: на основной форме имеется 7 DbGrid-ов, часть из которых связаны по типу Master-Detail. Через каждые 90 секунд форма обновляется, чтобы отобразить изменения, если они, возможно, сделаны другим сетевым пользователем. Во время процесса обновления сеток (перечитывания таблиц), отображаются песочные часики, и программа перестает реагировать на любые действия пользователя. И здесь как повезет. В локалке все это происходит достаточно быстро и незаметно. Удаленному же пользователю, который коннектится через интернет, работать не столь комфортно, иногда период заморозки составляет до 10 секунд при плохом соединении.
Так вот - можно ли как-то сделать сам процесс перечитывания данных из базы в Thread-е, а уже их отображение - в основном потоке? Думаю, это бы значительно улучшило дружественность программы к пользователям.
...
Рейтинг: 0 / 0
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
    #39712186
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmansvnvladВ зависимости от режима вызывается своя функция с разными параметрами.
Одна функция с тремя параметрами: тип операции, две id.
Там, если заметили id то разные. У одной это id карты, у другой - id подтипа груза, у третьей - id номенклатуры, у четвертой - id партии.
...
Рейтинг: 0 / 0
25 сообщений из 102, страница 3 из 5
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]