0 / 0 / 0
Регистрация: 31.03.2016
Сообщений: 12
1

Обработать в программе зависание при выполнении SQL запросов

24.05.2016, 07:57. Показов 2628. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!

Есть в программе тяжелый SQL запрос, выполняющийся до нескольких десятков минут - в это время программа зависает и ждет окончания его выполнения (например если свернуть ее в этот момент - то развернуть уже не получится) ... можно ли, не используя потоки, добиться того что бы не было этого зависания? Не требуется полной работоспособности, достаточно просто отобразить сообщение "Выполняется запрос" или что то в таком духе и снять его по окончании выполнения запроса.

Delphi XE2. Компоненты использую TIB.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2016, 07:57
Ответы с готовыми решениями:

Стал конкретно тормозить sql server при выполнении запросов
Привет всем. Ситуация следующая: стоит Microsoft SQL Server 2008 R2 (SP1) - 10.50.2550.0 (Intel...

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

Зависание формы при выполнении цикла
Есть бот который выполняет get запросы каждые 30 секунд. Запрос находится в исключении, а...

Зависание интерфейса при выполнении запроса
Всем привет. Проблема в следующем. Есть кнопка, по ее нажатию отрабатывается запрос к базе...

6
Эксперт Pascal/Delphi
4912 / 2781 / 853
Регистрация: 04.10.2012
Сообщений: 10,120
24.05.2016, 08:14 2
Цитата Сообщение от ne_virus Посмотреть сообщение
можно ли, не используя потоки, добиться того что бы не было этого зависания?
Delphi
1
Application.ProcessMessages();
0
0 / 0 / 0
Регистрация: 31.03.2016
Сообщений: 12
24.05.2016, 08:20  [ТС] 3
Цитата Сообщение от droider Посмотреть сообщение
Application.ProcessMessages();
Об этом я знаю. Но в обработчике какого события можно это использовать? "BeforeOpen" датасета выполняется до самого запроса, "AfterOpen" уже после . Проблема остается.

Или я что то упускаю?
0
Хитрая блондиночка $)
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
24.05.2016, 08:41 4
Цитата Сообщение от ne_virus Посмотреть сообщение
можно ли, не используя потоки, добиться того что бы не было этого зависания?
Боюсь что нет.
1
82 / 82 / 39
Регистрация: 17.02.2016
Сообщений: 464
24.05.2016, 09:22 5
Лучший ответ Сообщение было отмечено ne_virus как решение

Решение

очень простое использование потоков
компоненты в архиве (кинуть в папку с сурсом)
использовать примерно так:
Delphi
1
2
3
4
  private
    { Private declarations }
    // Идентификаторы запущенных задач для их остановки
    Task1: Cardinal;
Delphi
1
2
3
4
5
6
7
8
9
      
Task1 := EnterWorkerThread;
      try
        // Эта часть кода выполняется уже во вторичном потоке
//вставляем суда ваш код
      finally
        Task1 := 0;
        LeaveWorkerThread;
      end;
остановка потока
Delphi
1
2
3
4
5
6
  if Task1 <> 0 then
  begin
    Memo.Lines.Add('Задача 1: попытка остановки');
    AbortWorkerThread(Task1);
    Task1 := 0;
  end;
Вложения
Тип файла: zip 1.zip (27.6 Кб, 35 просмотров)
3
0 / 0 / 0
Регистрация: 31.03.2016
Сообщений: 12
24.05.2016, 10:39  [ТС] 6
Всем спасибо. Жаль что без потоков все таки не обойтись...

Цитата Сообщение от HiredKiller Посмотреть сообщение
очень простое использование потоков ....
За это отдельная благодарность! Буду разбираться и пробовать.
0
82 / 82 / 39
Регистрация: 17.02.2016
Сообщений: 464
24.05.2016, 12:52 7
обращайтесь =)
все просто до безобразия
демку прикрепил
Вложения
Тип файла: zip Demo.zip (918.0 Кб, 53 просмотров)
1
24.05.2016, 12:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.05.2016, 12:52
Помогаю со студенческими работами здесь

Зависание формы при выполнении процедуры на MSSQL
Подключил к форме две кнопки, по нажатию которых обрабатывается своя процедура на сервере MSSQL....

Зависание окна при выполнении асинхронной операции
private void RenameTextBox_LostFocus(object sender, RoutedEventArgs e) { ...

Зависание программы при выполнении длительного цикла
В моей программе выполняется долго, очень долго цикл, так как много данных обрабатывается....

При выполнении кода, полное зависание программы
Private Sub Кнопка2_Click() Dim x As Integer, i As Integer Dim a As Double, W As Double a =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru