|
|
|
| по ходу то, что я написал(по поводу прерывания запросов к Ораклу) - вдруг перестало работать :)) потому что "на сервере что-то пошло не так" (с) админы
я понял, что надо найти способ правильно их прерывать
вот нашел вроде бы хороший пример работі с многопотоковостью
http://www.sql.ru/forum/actualthread.aspx?bid=22&tid=316367&pg=1&hl=createthread
еще много читал всего
а теперь всего два вопроса:
1. корректно ли будет использовать поток, а потом убивать его? :)) не произойдет ли что либо с системой клиента в этом случае?
2. как передавать данные между потоками? вот выполнился запрос, если я его результат буду передавать в эксель или куда там в т.н. родительский поток - передастся ли он корректно?:))
ну и все свелось по ходу к тому, что необходимо писать свой DLL или АктивХ, который бы:
1. мог выполнять запрос к Ораклу
2. мог корректно обрубать (это возможно через Oracle Call Interface (OCI)), кажись
то шо робити, га?
столько технологий, столько инструментов - и все равно нет идеального....
люди, шошь вы делаете то, а? | |
|
| |
|
|
|
| очепятки в сабже
следует читать асинхронные | |
|
| |
|
|
|
| вот еще мысли
http://www.sql.ru/forum/actualthread.aspx?tid=728551&pg=3
буду пробовать | |
|
| |
|
|
|
| а если попробовать выполнить что-то с ошибкой чтобы в той же oraсессии %)),
чтобы коннекшн вернул ошибку, то запрос обрубится?
Raise | |
|
| |
|
|
|
|
| посмотрю что это
http://download.oracle.com/docs/cd/B28359_01/win.111/b28378/intro.htm
oo40 | |
|
| |
|
|
|
| короче разобрался так же как и TOAD
приложение теперь не залипает :))
оо4о не буду использовать
просто делаю цикл, с проверкой состояния запущено
пока оракл не раздуплится
пользователь видит вполне логичную картинку :))
тем более его предупреждали до того как!
а потом все корректно отрабатывает
как то так в общем
Private Sub btnCancel_Click()
On Error GoTo err123
If Err = 0 Then
If MsgBoxC("Прерывание может занять несколько минут" & vbNewLine & _
"Вы действительно хотите прервать выполнение запроса к серверу?" _
, vbYesNo, "Подтвердите") = vbNo Then Exit Sub
End If
isCancel = 1
frmState.state = 1
timer_Stop
If Not obj Is Nothing Then
Me.capInfo.caption = "Прерываем..."
SetStatus "Выполняется прерывание запроса на сервере..."
'-- кнопку лочим
Me.btnCancel.Locked = True
'-- цикл, если все еще запущен, оборвем коннекшн и будем ждать
Me.txtTimeOf = Format(TimeValue("00:00:00"), "hh:nn:ss")
StartTime = Time()
While obj.state = adStateExecuting '-- пока сервер не отпустит
Me.txtTimeOf = Format(Abs(Time() - StartTime), "hh:nn:ss")
Sleep 1: VBA.DoEvents
Wend
If obj.state = adStateOpen Or adStateFetching Then
obj.Cancel
obj.Close
End If
Set obj = Nothing
End If
Me.Hide
VBA.DoEvents
Exit Sub
err123:
MsgBoxC Error, vbCritical, "Прерывание запроса"
Exit Sub
End Sub
|
| |
|
| |
|
|
|
|
|
|
| ыыыы а девацца некуда
позади москва | |
|
| |