Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 347
И снова здравствуйте!
Есть форма, которая берёт данные из запроса, через VBA прикреплена ещё одна таблица, в которой берутся дополнительные данные Как в случае ошибки кода, сделать чтобы запускалась нужная форма, а не стандартная форма с запуском VBA конструктора.
По конкретике примерно так:
If
Set rs32 = CurrentDb.OpenRecordset("select * from [Крточка учета подчиненная] where Код=" & Me.Код)
если данная строка выдаёт ошибку то,
Then

           DoCmd.Close
          oshibka = "Не указано или корректно указано оконечное устройство, в закладке ""ТХО"""
                DoCmd.OpenForm "Ф_Ошибка"
            Exit Sub
            Else
                 End If


Так вот проблема как объяснить машине вот это "ЕСЛИ"
24 май 19, 07:20    [21892627]     Ответить | Цитировать Сообщить модератору
 Re: Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
ROI
Member

Откуда: г. Тюмень
Сообщений: 1789
Wawan2005
И снова здравствуйте!
Есть форма, которая берёт данные из запроса, через VBA прикреплена ещё одна таблица, в которой берутся дополнительные данные Как в случае ошибки кода, сделать чтобы запускалась нужная форма, а не стандартная форма с запуском VBA конструктора.
По конкретике примерно так:
If

Set rs32 = CurrentDb.OpenRecordset("select * from [Крточка учета подчиненная] where Код=" & Me.Код)

если данная строка выдаёт ошибку то,
Then


           DoCmd.Close
          oshibka = "Не указано или корректно указано оконечное устройство, в закладке ""ТХО"""
                DoCmd.OpenForm "Ф_Ошибка"
            Exit Sub
            Else
                 End If



Так вот проблема как объяснить машине вот это "ЕСЛИ"

Для начала установить в форме обработчик ошибок.
24 май 19, 07:25    [21892628]     Ответить | Цитировать Сообщить модератору
 Re: Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 347
Wawan2005
    oshibka = "Не указано или корректно указано оконечное устройство, в закладке ""ТХО"""


ошибка
    oshibka = "Не указано или НЕ корректно указано оконечное устройство, в закладке ""ТХО"""
24 май 19, 07:28    [21892630]     Ответить | Цитировать Сообщить модератору
 Re: Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 347
ROI
Для начала установить в форме обработчик ошибок.


Я догадываюсь, КАК?
24 май 19, 07:29    [21892632]     Ответить | Цитировать Сообщить модератору
 Re: Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 347
ROI,

Вот нашёл, но не пойму, что к чему
Private Sub Form_Error(DataErr As Integer, Response As Integer)
Select Case  Me.ActiveControl.Name
Case "RS"
MsgBox "Правильно введите номер расчетного счета!"
Case "CodeBank"
MsgBox "Правильно введите код банка"
Case "Company"
MsgBox "Название организации введено неверно"
End Select
Response = acDataErrContinue
End Sub

откуда берётся "Me.ActiveControl.Name"
и откуда берётся "RS","CodeBank","Company"
как мне свои данные подцепить???
24 май 19, 08:01    [21892644]     Ответить | Цитировать Сообщить модератору
 Re: Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
ROI
Member

Откуда: г. Тюмень
Сообщений: 1789
Wawan2005,

тынц
https://www.sql.ru/forum/1283697/obrabotka-oshibok-pri-vyzove-procedury-iz-procedury?hl=????????? ??????
еще
https://www.sql.ru/forum/afsearch.aspx?s=????? ?? ????? ????????? ??????&submit=?????&bid=4
24 май 19, 08:25    [21892651]     Ответить | Цитировать Сообщить модератору
 Re: Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 347
ROI,

Ну прочитал, вот вроде нормальный обработчик, втыкаю -- не работает -(
Sub BubbleWithFinal()

    On Error GoTo ErrorHandler

ExitHere:
    On Error Resume Next

    'сюда помещаем код, который отрабатывает в любом случае, обычно закрытие рекордсетов и разрушение переменных

           DoCmd.Close
          oshibka = "Не указано или не корректно указано оконечное устройство, в закладке ""ТХО"""
                DoCmd.OpenForm "Ф_Ошибка"
            Exit Sub


Dim err_num As Long, err_descr As String, err_ln As String
    If Len(err_descr) > 0 Then GoTo ErrorRaise
    Exit Sub
    Resume '>> remove in release
ErrorHandler:
    err_num = Err.Number: err_descr = Err.Description: err_ln = Erl
    Debug.Assert Not (STOP_AT_ERROR And IS_DEV) '>> remove in release
    Resume ExitHere
ErrorRaise: On Error GoTo 0
    Err.Raise err_num, "BubbleWithFinal of Module1", err_descr & vbCrLf & "in BubbleWithFinal of Module1 at " & err_ln
End Sub
24 май 19, 08:59    [21892677]     Ответить | Цитировать Сообщить модератору
 Re: Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
ROI
Member

Откуда: г. Тюмень
Сообщений: 1789
Wawan2005,

я слегка ошалел от вашего "перехватчика"
я пользуюсь стандартным способом, в 90 случаях хватает.

Private Sub MySub()

On Error Goto HandleError

'ваш код
'ваш код
'ваш код

ExitProc:
    Exit Sub
    
HandleError:
    MsgBox vbCrLf & Err.Description & _
            vbCrLf & vbCrLf & "  Имя формы = " & Me.Name & _
            vbCrLf & vbCrLf & "  Имя процедуры = 'MySub'", _
            vbCritical, "Ошибка " & Err.Number
    Resume ExitProc

End Sub
24 май 19, 09:32    [21892722]     Ответить | Цитировать Сообщить модератору
 Re: Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 347
ROI,

Сделал так:
Private Sub MySub()

On Error GoTo HandleError

          DoCmd.Close
          oshibka = "Не определёно, удалённый ли объект."
                DoCmd.OpenForm "Ф_Ошибка"

ExitProc:
    Exit Sub
    
HandleError:
    MsgBox vbCrLf & Err.Description & _
            vbCrLf & vbCrLf & "  Имя формы = " & Me.Name & _
            vbCrLf & vbCrLf & "  Имя процедуры = 'MySub'", _
            vbCritical, "Ошибка " & Err.Number
    Resume ExitProc

End Sub

как ругался на строчку
Set rs32 = CurrentDb.OpenRecordset("select * from [Крточка учета подчиненная] where Код=" & Me.Код)

так и ругается, ничего не изменилось
24 май 19, 10:24    [21892809]     Ответить | Цитировать Сообщить модератору
 Re: Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
ROI
Member

Откуда: г. Тюмень
Сообщений: 1789
Wawan2005,

А чего говорит?
24 май 19, 10:40    [21892843]     Ответить | Цитировать Сообщить модератору
 Re: Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 347
ROI,

К сообщению приложен файл. Размер - 31Kb
24 май 19, 10:50    [21892864]     Ответить | Цитировать Сообщить модератору
 Re: Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 347
ROI,

К сообщению приложен файл. Размер - 90Kb
24 май 19, 10:50    [21892866]     Ответить | Цитировать Сообщить модератору
 Re: Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 347
Wawan2005,

Сама ошибка мне известна, он так ругается когда не ввели оконечное устройство или
оно не правильно записано, то есть в определённой таблице есть эталонные значения
оконечных устройств, и если ни с одним не совпадает то тогда выскакивает системная
ошибка, а я хочу чтобы выскакивала форма (или отчёт) в которой бы указывалось ,
что "Шарик ты балбес, введи правильно оконечное устройство!" -)
24 май 19, 10:53    [21892873]     Ответить | Цитировать Сообщить модератору
 Re: Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 347
Wawan2005,

Чтобы в конструктор ВБА не выкидывало, а то девчата теряются, и начинают творить неадекватности.-(
24 май 19, 10:55    [21892877]     Ответить | Цитировать Сообщить модератору
 Re: Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
ROI
Member

Откуда: г. Тюмень
Сообщений: 1789
Wawan2005,

попробуй так
Set rs32 = CurrentDb.OpenRecordset("select * from [Крточка учета подчиненная] where Код = '" & Me.Код.Value & "'")
24 май 19, 10:55    [21892879]     Ответить | Цитировать Сообщить модератору
 Re: Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
ROI
Member

Откуда: г. Тюмень
Сообщений: 1789
Set rs32 = CurrentDb.OpenRecordset("select * from [Крточка учета подчиненная] where Код = '" & Me.Код.Value & "'")
24 май 19, 10:56    [21892885]     Ответить | Цитировать Сообщить модератору
 Re: Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 347
Или может какую то проверку сделать, что если
Данные_Литерка.П_Лист_Прог_УОО

не соответствует ни одному значению
Оборудование ОВО.Наименование

то
           DoCmd.Close
          oshibka = "Не указано или не корректно указано оконечное устройство, в закладке ""ТХО"""
                DoCmd.OpenForm "Ф_Ошибка"
            Exit Sub

А если соответствует, то продолжай на здоровье.
Вот как то так.
24 май 19, 10:59    [21892892]     Ответить | Цитировать Сообщить модератору
 Re: Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 347
ROI
Set rs32 = CurrentDb.OpenRecordset("select * from [Крточка учета подчиненная] where Код = '" & Me.Код.Value & "'")

не, тоже самое

я не надолго отойду, спасибо за помощь, как приду так отпишусь.
24 май 19, 11:01    [21892897]     Ответить | Цитировать Сообщить модератору
 Re: Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
ROI
Member

Откуда: г. Тюмень
Сообщений: 1789
Wawan2005
ROI
Set rs32 = CurrentDb.OpenRecordset("select * from [Крточка учета подчиненная] where Код = '" & Me.Код.Value & "'")


не, тоже самое

я не надолго отойду, спасибо за помощь, как приду так отпишусь.

Dim rs32
set rs32 =
наверно должно быть
Dim rs32 As RecordSet
У вас ошибки в коде обработчик тут не причем.
24 май 19, 11:10    [21892913]     Ответить | Цитировать Сообщить модератору
 Re: Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
vmag
Member

Откуда: MP
Сообщений: 3269
Wawan2005,

Вобщето для само-себя понимания лучше писать так:
DoCmd.Close acForm, "Имя Формы"

ИМХО апосля этого оператора возможно уже ничо не сработает, ну разве что кроме того, что есть (если оно есть) в процедурах, связанных с закрытием формы... возможно
вот это
oshibka = "Не указано или не корректно указано оконечное устройство, в закладке ""ТХО"""
DoCmd.OpenForm "Ф_Ошибка"
нужно писать До DoCmd.Close, а не после...
24 май 19, 11:47    [21892970]     Ответить | Цитировать Сообщить модератору
 Re: Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 6263
Мне кажется что просто надо посчитать количество записей в RS и если COUNT=0 просто MSGBOXом сказать о неправильности критерия, вернуть курсор в нужное поле и выйти из процедуры,ELSE выполнять Ваш код.
Wawan2005
Wawan2005,
Чтобы в конструктор ВБА не выкидывало, а то девчата(понимаю-как юзеры) теряются, и начинают творить неадекватности.-(
Юзер,по моему, про существование "конструктор VBA",даже подозревать не должен
24 май 19, 13:14    [21893081]     Ответить | Цитировать Сообщить модератору
 Re: Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 6263
вдогонку:RS простейший-
проверьте имя таблицы( у Вас [Крточка учета подчиненная]),тип поля и его имя "код"
24 май 19, 13:23    [21893091]     Ответить | Цитировать Сообщить модератору
 Re: Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 553
Wawan2005,
обработчик ошибок обычно входит в процедуру где он эти ошибки отслеживает
+
sub sb()
on error goto handle
Set rs32 = CurrentDb.OpenRecordset("select * from [Крточка учета подчиненная] where Код=" & Me.Код)
'... тело процедуры
ex:
Exit sub
handle:
if err.number=3075 then
 DoCmd.Close
          oshibka = "Не указано или корректно указано оконечное устройство, в закладке ""ТХО"""
                DoCmd.OpenForm "Ф_Ошибка"
resume ex
end sub

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

+
и попробовать сделать- в процедурах в модуле обработки прописывается что-то типа этого
Err.Raise Err.Number, MistakeFunction, Err.Description  & " at " & Erl

и вылетаем в процедуру которая создала эту программу. а там уже может быть тот обработчик- именно он создан для того чтобы закрывать при ошибке какие то например программы (эксель, ворд) и пр. и делать в логе ошибок внешнем например файле запись
шикарный вплывающий обработчик ошибок сделал mrShin - часто им пользуюсь, переделав под себя
24 май 19, 14:12    [21893144]     Ответить | Цитировать Сообщить модератору
 Re: Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 6263
стесняюсь спросить: а какой тип у переменной rs32?
24 май 19, 14:49    [21893183]     Ответить | Цитировать Сообщить модератору
 Re: Как в случае ошибки кода, сделать чтобы запускалась нужная форма.  [new]
ROI
Member

Откуда: г. Тюмень
Сообщений: 1789
sdku
стесняюсь спросить: а какой тип у переменной rs32?

Variant
ROI
Dim rs32
set rs32 =
наверно должно быть
Dim rs32 As RecordSet
У вас ошибки в коде обработчик тут не причем.
24 май 19, 14:55    [21893189]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Microsoft Access Ответить