powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как при ошибке определить ее тип?
20 сообщений из 20, страница 1 из 1
Как при ошибке определить ее тип?
    #32379559
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня в таблице составной ключ из 2-х полей.
Как при вводе записей юзером определить , что он ввел уже существующий внешний ключ (ключ состоит из абонентского номера и названия города).
Т.е как опеределить тип ошибки дублирования ключа?
...
Рейтинг: 0 / 0
Как при ошибке определить ее тип?
    #32379566
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А какие типы могут быть? Если ввел сочетание, которое уже есть, то ошибка во всем сочетании.
...
Рейтинг: 0 / 0
Как при ошибке определить ее тип?
    #32379630
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из хелпа:
В данном примере демонстрируется замена стандартного сообщения об ошибке на специальное сообщение. При обнаружении Microsoft Access повторяющегося значения в ключевом поле (код ошибки 3022) данная процедура обработки события выводит сообщение об ошибке, содержащее информацию, специфическую для выполняющегося приложения.
Для проверки работы данного примера следует добавить процедуру обработки события в форму с базовой таблицей, каждая запись которой содержит сведения о сотруднике, а также уникальный код сотрудника в качестве ключа.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Sub Form_Error(DataErr As Integer, Response As Integer)
	Const conDuplicateKey =  3022 
	Dim strMsg As String

	If DataErr = conDuplicateKey Then
		Response = acDataErrContinue
		strMsg =  "Каждая запись должна содержать уникальный "  _
			&  "код сотрудника. Проверьте введенные данные." 
		MsgBox strMsg
	End If
End Sub
...
Рейтинг: 0 / 0
Как при ошибке определить ее тип?
    #32379753
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ВС

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

2 Alexander G
Ты меня понял. Спасибо.

Я остолоп забыл указать, что добавляю запись ч/з DAO.

Как пресечь именно эту ошибку дублирование ключа ч/з DAO?
...
Рейтинг: 0 / 0
Как при ошибке определить ее тип?
    #32380153
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пресечь или отловить?

Отловить (Table1, поле aa - ключевое)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Public Sub lalala()
On Error GoTo LErr
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset( "Table1" )
rst.AddNew
rst![aa] =  1 
rst.Update
Exit Sub
LErr:
If Err =  3022  Then
MsgBox  "Что ж ты, гад, делаешь!?" 
End If
End Sub
...
Рейтинг: 0 / 0
Как при ошибке определить ее тип?
    #32380205
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо , разобрался!
На форуме подсказали , что нужно использовать err.
Твой пример на "отловить".
Если например юзер вообще не фига не введет в поле тогда код_ошибки 3058. Если надо и ее отловить , тогда.

Public Sub lalala()
On Error GoTo LErr
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Table1")
rst.AddNew
rst![aa] = 1
rst.Update
Exit Sub
LErr:

select case err.Number
case 3022
MsgBox "Что ж ты, гад, делаешь!?Это уже есть!"
case 3058
MsgBox "Ну ты бы ввел хоть что нибудь!"
End select

End Sub
...
Рейтинг: 0 / 0
Как при ошибке определить ее тип?
    #32381063
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот черт! Крышняк едет уже от агентства брачных объявлений.

Пишу в событии формы Form_Error перехват ошибки и фиг не перехватывает, вылезает стандартное сообщение Access "Изменения не были успешно внесены из за повторяющихся значений в индексоах ... трали вали ..."

Форма имеет в качестве источника запрос. Юзер на этой форме должен редактировать записи. И мне надо поймать его на вводе уже существующего значения ключа. Да вот что то закопался.

вот код (хорошие ребята посоветовали)

Private Sub Form_Error(DataErr As Integer, Response As Integer)
If DataErr = 3022 Then
Response = acDataErrContinue
MsgBox "Такой абонентский номер уже существует ..."
End If

В форме использую список для перехода к нужной записи.

После обновления списка вот что работает.

Me.RecordsetClone.FindFirst "[id1] = " & Me![listfio]
Me.Bookmark = Me.RecordsetClone.Bookmark

Кстати индекс составной абонентский номер / название города. Ну это думаю не важно.

Помогите, почему не могу отловить ошибку 3022 дубляжа индекса?

Или спать пора уже ?
...
Рейтинг: 0 / 0
Как при ошибке определить ее тип?
    #32381415
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
В списке свойств формы, в строке OnError, написано ли [Event Procedure]?
...
Рейтинг: 0 / 0
Как при ошибке определить ее тип?
    #32381462
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ВС

Да.
...
Рейтинг: 0 / 0
Как при ошибке определить ее тип?
    #32381464
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А если поставить BreakPoint, программа до нее дойдет?
...
Рейтинг: 0 / 0
Как при ошибке определить ее тип?
    #32381717
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НЕТ.
...
Рейтинг: 0 / 0
Как при ошибке определить ее тип?
    #32381728
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А ошибка вызывается действиями юзера на экране или какой-то строкой программы?
...
Рейтинг: 0 / 0
Как при ошибке определить ее тип?
    #32381740
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот эта строка дает ошибку
Me.Bookmark = Me.RecordsetClone.Bookmark

код в событии form_load при этом не срабатывает.
Может он и не должен срабатывать?
...
Рейтинг: 0 / 0
Как при ошибке определить ее тип?
    #32381746
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тьфу ты , в событии form_error
...
Рейтинг: 0 / 0
Как при ошибке определить ее тип?
    #32381800
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл ВС.
...
Рейтинг: 0 / 0
Как при ошибке определить ее тип?
    #32381851
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Если ошибку дает строка, то надо пользоваться On Error GoTo, а не Form_Error.
...
Рейтинг: 0 / 0
Как при ошибке определить ее тип?
    #32381881
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уже пробовал.
Вот .
Private Sub listfio_AfterUpdate()
On Error GoTo fuck

Me.RecordsetClone.FindFirst "[id1] = " & Me![listfio]
Me.Bookmark = Me.RecordsetClone.Bookmark


exit_listfio_AfterUpdate:
Exit Sub

fuck:
If Err.Number = 3022 Then MsgBox "Double Key ! "

End sub
...
Рейтинг: 0 / 0
Как при ошибке определить ее тип?
    #32381945
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
И что?
...
Рейтинг: 0 / 0
Как при ошибке определить ее тип?
    #32382523
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ВС

Решил по другому "защититься" от действий юзера.

В форме поля абонентского номера и названия города сделал enable=false.
Рядом сделал кнопку " изменить ... " по которой на экране появляется диалоговое окно, где можно указать другой номер и название города. После делаю проверку на поиск дублирования ключа и если есть дублирование предупреждаю юзера. В любом случае он не может ввести существующий уже ключ. Как думаете, тоже вроде выход.
...
Рейтинг: 0 / 0
Как при ошибке определить ее тип?
    #32382687
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Тоже выход.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как при ошибке определить ее тип?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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