powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как останвить выполнение процедуры из функции, используемой в этой процедуре
6 сообщений из 31, страница 2 из 2
Как останвить выполнение процедуры из функции, используемой в этой процедуре
    #32769349
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 hummer
если сделано правильно - то галка у него вычислимая...

(с выражением лица)
...
Рейтинг: 0 / 0
Как останвить выполнение процедуры из функции, используемой в этой процедуре
    #32769436
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
плин.
С утра хотел написать, что порвать ф-ю в вашем случае - это порвать запрос. Запрос для этого должен выполняться ассинхронно. (см хелп), т.е. процесс который долже его стопнуть должен мочь крутиться параллельно ему и вызвать его .Cancel . По крайней мере у запроса дожен быть такой метод. Кроме ODBC запросов что-то ничего такое не вспоминается.


поытка трбюков:
__
1. В джет можно переделать ф-ю так, как это делается для подсчета самопальных сумматоров (типа номера строки) - а именно добавить статик переменную и опциональный параметр. Запрос при этом выполняться после ошибки не перестанет, но можно сделать, чтобы после первой ошибки следующие строки не возвращались. (поместив в Where вашу же ф-ю, но с неким значением опционалого параметра, т, чтобы после ошибки она возвращала FALSE), в (или до) открытии отчета можно еще раз вызвать ф-ю, так, чтобы вычислить ее статик переменную. Если она покажет, что в запросе возникала ошибка, отчет можно не открывать.

Но оптимально в вашем случае - взять (Select count(*) From ... Left Join ... ON ... = curs.дата Where curs.дата IS NULL) до запроса (или в запросе - что несколько хуже), и не мучаться.



_____________
2. Есть еще возможность вызвать ошибку в Запросе. Но, к сожалению, если в явном виде err.Rase сделать в ф-ии, она не перехватится обработчиком ошибок вызвавшей исполняемый запрос ф-ии а выдаст вам запрос об отладке. Есть трюк - вызвать ошибку в самом запросе. В случае Insert Into это легко - если заставить запрос вставлять данные не того типа, или большего размера:
'__TEMP_ОПЕРАТОР (id, MyFun) - целые
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Public Function tryErr(code)
    tryErr =  1 
    If code =  1000  Then
        'err.Raise 666 'не выталкивается из запроса в обработчик ф-ии
        tryErr = "Фих вам, а не барабан"
    End If
End Function

Public Function TestErrQry()
Dim sSQl As String
On Error Resume Next
    sSQl = "INSERt  INTO __TEMP_ОПЕРАТОР  ( id, MyFun ) SELECT tabl.id, tryErr([id])  AS MyFun FROM tabl ;"
    CurrentDb.Execute sSQl, dbFailOnError
    If err <>  0  Then
        MsgBox err.Description
    End If
    err.Clear
    sSQl = "INSERt  INTO __TEMP_ОПЕРАТОР  ( id, MyFun ) SELECT tabl.id, tryErr([id])  AS MyFun FROM tabl WHERE id<>1000;"
    CurrentDb.Execute sSQl, dbFailOnError
    If err <>  0  Then
        MsgBox err.Description
    Else
        MsgBox "Ok!"
    End If
End Function
...
Рейтинг: 0 / 0
Как останвить выполнение процедуры из функции, используемой в этой процедуре
    #32769727
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victosha2 Vsevolod V
на мой взгляд, вопрос ты задал плохой.

Ответ от Hummer-a и Ко получил почти полный
По существу им и воспользовался.

Выражая благодарность таким специальным образом, можно вообще "без советов" остаться...

Hummer2 Vsevolod V
Блин - ответ выполнить запрос с проверкой - это уже не конкретный ответ?:)
Тест запроса надо написать нашему умному парню?:)

А если пользователь галку забудет поставить?:)

Господа, вопрос поставлен в названии темы, а его раскрытие в первом мессаге. Дальше идет полет мысли "на отвлеченную тему". И такие мессаги типа "Ура, то что я сказал больше 2-х часов назад наконец-то осмыслено:)" (учитывая, что их несколько) мне совсем не нравятся.
Далее. На данный момент решение проблемы выглядит так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Sub aa()
call Yo(param)
if not me!fld_galka = true then
docmd.openform "provodki"
end if
end sub

function Yo(param as integer)
if param =  1  then
lalala
else
Forms!Forma!fld_Galka = true
end if
end function
...
Рейтинг: 0 / 0
Как останвить выполнение процедуры из функции, используемой в этой процедуре
    #32790077
Отвечая на поставленный изначально вопрос.

Так сделать можно, и очень даже просто, если пожертвовать возможностью локальной обработки ошибок в процедурах.

Вот работающий (если я правильно понял суть вопроса, конечно) пример:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
Sub start()
    
    On Error Resume Next
    
    Debug.Print "До вызова процедуры аа"
    
    call aa( 0 )
    
    Debug.Print "после вызова процедуры аа"
    
    Err.Clear

End Sub

Sub aa(param As Integer)

    'никаких On error здесь быть не должно

    Debug.Print "До вызова процедуры Yo"

    Call Yo(param)

    Debug.Print "После вызова процедуры Yo"

End Sub

Function Yo(param As Integer)
    
    'никаких On error здесь быть не должно
    
    If param =  1  Then
        Debug.Print "Не прерываем"
    Else
        Debug.Print "Прерываем"
        Err.Raise vbObjectError +  1 
    End If

End Function
...
Рейтинг: 0 / 0
Как останвить выполнение процедуры из функции, используемой в этой процедуре
    #32790108
Roma R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
function Yo(param as integer)
if param = 1 then
lalala
else
'ЗАВЕРШЕНИЕ ВЫПОЛНЕНИЯ aa()
END
end if
end function
...
Рейтинг: 0 / 0
Как останвить выполнение процедуры из функции, используемой в этой процедуре
    #32790193
AlTis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vsevolod V Victosha2 Vsevolod V
на мой взгляд, вопрос ты задал плохой.

Ответ от Hummer-a и Ко получил почти полный
По существу им и воспользовался.

Выражая благодарность таким специальным образом, можно вообще "без советов" остаться...

Hummer2 Vsevolod V
Блин - ответ выполнить запрос с проверкой - это уже не конкретный ответ?:)
Тест запроса надо написать нашему умному парню?:)

А если пользователь галку забудет поставить?:)

Господа, вопрос поставлен в названии темы, а его раскрытие в первом мессаге. Дальше идет полет мысли "на отвлеченную тему". И такие мессаги типа "Ура, то что я сказал больше 2-х часов назад наконец-то осмыслено:)" (учитывая, что их несколько) мне совсем не нравятся.
Далее. На данный момент решение проблемы выглядит так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Sub aa()
call Yo(param)
if not me!fld_galka = true then
docmd.openform "provodki"
end if
end sub

function Yo(param as integer)
if param =  1  then
lalala
else
Forms!Forma!fld_Galka = true
end if
end function


мда. Я думаю вы изобретаете велосипед.
Чем Ваша галочка отличается от

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Sub aa()

if not Yo(param) then
docmd.openform "provodki"
end if
end sub

function Yo(param as integer) as boolean
if param =  1  then
lalala
else
Yo= true
end if
end function
...
Рейтинг: 0 / 0
6 сообщений из 31, страница 2 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как останвить выполнение процедуры из функции, используемой в этой процедуре
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]