С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
2 / 2 / 1
Регистрация: 27.07.2015
Сообщений: 34

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

25.05.2016, 09:38. Показов 1751. Ответов 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
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru