2 / 2 / 1
Регистрация: 27.07.2015
Сообщений: 34

Зависание программы после вызова хранимой процедуры на сервере

25.05.2016, 09:38. Показов 1807. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Столкнулся с проблемой следующего характера:
Вызываю хранимую процедуру на SQL сервере. Всё хорошо - работает. Но, в момент её вызова основная форма программы зависает. Т.е. пишет не отвечает, нет возможности её перемещать. Поэтому если пользователь будет её использовать, то может подумать что все зависло и закрыть её. Чтобы это не произошло решил сделать ProgressBar работающий по таймеру.

Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub Timer1_Timer()
If ProgressBar1.Value < ProgressBar1.Max Then
ProgressBar1.Value = ProgressBar1.Value + 1
DoEvents
Else
ProgressBar1.Value = 0
DoEvents
End If
End Sub
Запускаю таймер по клику на Command. Все крутится до момента вызова хранимой процедуры. Код ниже

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Command1_Click()
Timer1.Enabled = True
Dim rs As ADODB.Recordset
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
cmd.CommandTimeout = 20000000
cmd.ActiveConnection = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Server=Сервер;Database=MyBase;Trusted_Connection=Yes"
 cmd.CommandType = adCmdStoredProc
cmd.CommandText = "Хранимка"
 
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.CursorType = adOpenStatic
rs.LockType = adLockReadOnly
rs.Open cmd
Timer1.Enabled = False
End Sub
Про DoEvents я почитал и как понял, он больше подходит для циклов. Как мне поступить и сделать так, чтобы ProgressBar бегал, пока хранимка делается (минуты 2)? Заранее благодарю
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.05.2016, 09:38
Ответы с готовыми решениями:

После первого вызова хранимой процедуры показывает ошибку
База данных написана полностью на хранимых процедурах. И с вызовом всех процедур не возникает проблем, кроме как с одной. Структура таблиц:...

Синтаксис вызова хранимой процедуры?
Подскажите, как вызвать хранимую процедуру MS SQL из ASP-а?

Как оформить код для вызова хранимой процедуры, содержащей инструкцию UPDATE
добрый день хп работает, код без ошибок, но не вносятся изменения в базу и все тут..не подскажете где ошибка? ...

3
2 / 2 / 1
Регистрация: 27.07.2015
Сообщений: 34
26.05.2016, 14:44  [ТС]
Решил сделать потоками. Поток на ProgressBar работает, как надо.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private ThreadControl1 As clsThreading
Private ThreadControl2 As clsThreading
Private Sub Command1_Click()
Dim mThreadPriority As ThreadPriority
Dim mEnabled As Boolean
 Set ThreadControl1 = New clsThreading
' Set ThreadControl2 = New clsThreading
    ex = 1
    mThreadPriority = tpNormal
    mEnabled = True
   'Поток 1
    ThreadControl1.CreateNewThread AddressOf Forma2, mThreadPriority, mEnabled
   'Поток 2
    ThreadControl1.CreateNewThread AddressOf Forma1, mThreadPriority, mEnabled
end sub
в отдельном модуле функция
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Public Function Forma2()
Form1.ProgressBar1.Visible = True
 
Do
        If Form1.ProgressBar1.Value >= Form1.ProgressBar1.Max Then
        Form1.ProgressBar1.Value = 0
        Else
        Form1.ProgressBar1.Value = Form1.ProgressBar1.Value + 1
        End If
Loop
Form1.ProgressBar1.Visible = False
End Function
Вторым потоком хочу запустить выполнение хранимой процедуры. Так же создаю для нее поток. Но выпадает ошибка
Automation error CoInitialize has not be called на строчку
Visual Basic
1
Set cmd = New ADODB.Command
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Function Forma1()
Dim rs As ADODB.Recordset
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
cmd.CommandTimeout = 20000000
cmd.ActiveConnection = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Server=Сервер;Database=MyBase;Trusted_Connection=Yes"
 cmd.CommandType = adCmdStoredProc
cmd.CommandText = "Хранимка"
 
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.CursorType = adOpenStatic
rs.LockType = adLockReadOnly
rs.Open cmd
end Function
просто в форме и без потоков код работает нормально.
Помогите пожалуйста разобраться!
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,741
Записей в блоге: 14
26.05.2016, 14:56
Вам бы лучше обратиться в раздел по SQL-серверу
0
2 / 2 / 1
Регистрация: 27.07.2015
Сообщений: 34
27.05.2016, 11:53  [ТС]
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Проект создаю в Microsoft Visual Basic 6.0, сюда и решил написать..

Добавлено через 20 часов 22 минуты
Проблему с ошибкой решил добавлением библиотек
Visual Basic
1
2
Public Declare Function CoInitialize Lib "ole32" (pvReserved As Any) As Long
Public Declare Function CoUninitialize Lib "ole32" () As Long
И вызовом функций внутри потока, который вызывает хранимую процедуру на сервере.
Visual Basic
1
2
3
CoInitialize ByVal 0&
....
CoUninitialize
Хранимка выполняется - все хорошо.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.05.2016, 11:53
Помогаю со студенческими работами здесь

Одновременный запуск хранимой процедуры на сервере
Добрый день,подскажите пожалуйста как сделать так,чтобы процедура не запускалась на сервере повторно ,если она уже запущенна? т.е....

Зависание после вызова функций из dll
Доброго времени суток, форумчане. Поделитесь соображениями, почему при вызове некоторых функций из dll, программа завершается...

;1 после названия хранимой процедуры
Подскажите, зачем в ADODataSet при выборе хранимой процедуры после её имени delphi подставляет &quot;;1&quot;. Нигде не нашел.

Получить данные после выполнения хранимой процедуры в Perl.
Есть хранимая процедура (Сервер DB2) которая возвращает набор данных и есть такая необходимость получить результат этого запроса в Perl. ...

Вызов процедуры после вызова макроса
Подскажите, как исправить следующую ошибку. Вызываю процедуру Execute для обработки данных. В процедуре вызывается макрос, после него -...


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

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

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru