Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: будете смеяться, но я никогда этого не делал
 
 автор: Силblч   (14.03.2011 в 11:14)   личное сообщение
 
 


как корректно обрубить Oracle.ADODB open recordset?

открыл в асинхронном режиме. ок.
запустил формочку, которая отсчитывает время исмотрит за состоянием рекордсета с кнопочкой Прервать. ок.

Если пользователь нажал Прервать, а вот здесь заруба :)
делаю Cancel рекордсета - приложение "уходит в себя" примерно на время выполнения запроса
стал делать еще и кенсел коннекшина - та же хрень :)

я так понимаю - это проблема стандартная, да? :)
подскажите, а то опять найду решение сам.... ну пожалуйста-препожалуйста

не хочется писать процедуру, которая будет выдергивать сетевой шнур

  Ответить  
 
 автор: час   (14.03.2011 в 12:12)   личное сообщение
 
 

  Ответить  
 
 автор: Дядя Федор   (14.03.2011 в 12:40)   личное сообщение
 
 

"Книгу не читал. Но осуждаю" (Это я к тому. что оракула видел издалека и давно)
Но кажется там че-то с курсором надо делать.
А close не катит?

  Ответить  
 
 автор: Силblч   (14.03.2011 в 12:49)   личное сообщение
 
 

с курсорами все нормально :) adUseClient
клоз не катит

  Ответить  
 
 автор: Силblч   (14.03.2011 в 13:07)   личное сообщение
 
 

close прокатил, но только для локального раздупляжа приложения :)
а сервер продолжал колбасить запрос :( не спортивно єто

  Ответить  
 
 автор: Силblч   (14.03.2011 в 12:49)   личное сообщение
 
 

ты мне глазки не строй - ищи решение!

  Ответить  
 
 автор: Дядя Федор   (14.03.2011 в 13:21)   личное сообщение
 
 

  Ответить  
 
 автор: Силblч   (14.03.2011 в 15:12)   личное сообщение
 
 

ты тоже

  Ответить  
 
 автор: osmor   (14.03.2011 в 14:59)   личное сообщение
 
 

Про рекордсет не знаю, пробовал лет 5 назад, получил такой же результат и забил.
Я тебе там личное сообщение кинул, не откажи

  Ответить  
 
 автор: Силblч   (14.03.2011 в 15:12)   личное сообщение
 
 

атветинг

  Ответить  
 
 автор: Силblч   (17.03.2011 в 15:17)   личное сообщение
 
 

возможно ответ здесь
http://download.oracle.com/docs/cd/B10501_01/win.920/a95895/o4o00024.htm
потому что
http://download.oracle.com/docs/cd/B10501_01/win.920/a95895/o4o00020.htm
In non-blocking mode, control is returned to the application immediately even if the execution is not complete. This allows the application to execute other tasks which are not dependent on the results of the last execution.

теперь осталось выяснить что это за зверь ОО4О

  Ответить  
 
 автор: Силblч   (18.03.2011 в 10:50)   личное сообщение
 
 

короче вот что получилось
проверял, на сервере выполнение запроса прерывается, задача переходит в статус inactive и подчищается серверным джобом, каким то

запускаю так

        Set zs = CreateObject("ADODB.Recordset")
        zs.CursorLocation = adUseClient
        zs.Open fsql, conn, adOpenStatic, , adAsyncExecute Or adAsyncFetch
        If adoTray(zs, Me.Name) = 1 Then zs.Cancel' если был кэнсел, то кэнселим и этот запрос. почему то так все сработало :)


кусок функции adoTray

    DoCmd.OpenForm ftnam, , , , , acDialog, fMain
    If IsFormLoaded(ftnam) Then
        Set ff = Forms(ftnam)
        If ff.isCancel = 1 Then
            adoTray = 1
            SetStatus "Выполняется прерывание запроса на сервере..."
            If Not o Is Nothing Then
                If o.State = adStateOpen Then o.Close 'в принципе такой ситуации может и не быть, но на всякий случай :)
            End If
            Set o = Nothing 'обрубаем запрос на корю
'дальше, самое главное, обрубаем сессию. причем сперва - кэнсел, потом клозе.
            If Not conn Is Nothing Then
                If conn.State = adStateOpen Then conn.Cancel: conn.Close
            End If
            Set conn = Nothing
            If conn2dbasync(Nz(Forms("frm1")("txt1"), Environ("USERNAME")), _
                           Nz(Forms("frm1")("txt2"), "")) = 0 Then
                    MsgBox "Не удалось подключиться к серверу(реплике) " & vbCrLf & _
                    conn.Errors.Item(0).Description & vbCrLf & iDevelop
                    Exit Function
            End If
            SetStatus "Выполнение прервано пользователем..."
        End If '--cancel pending
        Set ff = Nothing
        DoCmd.Close acForm, ftnam
    End If


может я и рано отчитался о проделанной работе, но пока вроде отрабатывает нормально
отдам пользователям на растерзание, если сервак не завалят, то я продолжу разработки :)

  Ответить  
 
 автор: час   (18.03.2011 в 12:10)   личное сообщение
 
 

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList