13 / 13 / 2
Регистрация: 31.03.2013
Сообщений: 107
1

VBA при удалении ключевого поля выдать MsgBox

03.04.2013, 11:11. Показов 1563. Ответов 5
Метки нет (Все метки)

Столкнулся с такой проблемой мне нужно удалять поля в таблицах, всё это прекрасно работает, но нужно ещё предусмотреть то, если пользователь пытается удалить ключевое поле, то чтоб место окна ошибки компилятора выдавало сообщение MsgBOx.
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Private Sub Del_Fil_Click() '--------------Обработчик удаления--------------------------------------////
If IsNull(Show_Tb) Then
MsgBox "не выбрана ТБ", vbOKOnly
Exit Sub
End If
If IsNull(Show_Fil) Then
MsgBox "Не выбрано поле", vbOKOnly
Exit Sub
End If
 
Dim Message, Ocno
Dim dbs As Database, tdf As TableDef, fld As Field
Set dbs = CurrentDb
Set tdf = dbs.TableDefs(Show_Tb.Value)
 
Message = "Удалить" + Show_Fil.Value + "?"
Ocno = MsgBox(Message, vbYesNo)
If Ocno = vbYes Then
tdf.Fields.Delete (Me.Show_Fil.Value)
If Err.Number = 3303 Then MsgBox "Нельзя удалить поле по ошибке 3303",vbOKOnly
 
tdf.Fields.Refresh
Show_Fil.RowSource = Show_Tb
End If
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2013, 11:11
Ответы с готовыми решениями:

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

Заполнение ключевого поля при передача запроса SQL
Вообщем проблема в следующем, есть таблица в базе SQL, в нее делается запись из html формы с...

Как при создании записи узнать номер ее ключевого поля
Здравствуйте, мне бы хотелось узнать, как после выполнения sql-запроса для создания новой записи в...

Получение значения ключевого поля GridView при событии RowEditing?
Стандартное редактирование строк компонента GridView мне не подходит. Поэтому пытаюсь обработать...

5
Эксперт MS Access
26753 / 14432 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
03.04.2013, 13:58 2
Если интересует именно первичный ключ и вы знаете имя поля, то проверить можно так
Visual Basic
1
If Instr(currentdb.TableDefs("ИмяТаблицы").Indexes("PrimaryKey").Fields, "ИмяПоля")>0 Then
Добавлено через 2 часа 2 минуты
Впрочем, ваc, кажется, интересует обход ошибки, а не именно примарикеу. В процедуре не хватает OnError
Visual Basic
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
Private Sub Del_Fil_Click() '--------------Обработчик удаления--------------------------------------////
  On error goto errend
  If IsNull(Show_Tb) Then
    MsgBox "не выбрана ТБ", vbOKOnly
    Exit Sub
  End If
  If IsNull(Show_Fil) Then
    MsgBox "Не выбрано поле", vbOKOnly
    Exit Sub
  End If
 
Dim Message, Ocno
Dim dbs As Database, tdf As TableDef, fld As Field
  Set dbs = CurrentDb
  Set tdf = dbs.TableDefs(Show_Tb.Value)
 
  Message = "Удалить" + Show_Fil.Value + "?"
  Ocno = MsgBox(Message, vbYesNo)
  If Ocno = vbYes Then
    tdf.Fields.Delete (Me.Show_Fil.Value)
    tdf.Fields.Refresh
    Show_Fil.RowSource = Show_Tb
  End If
NoErr:
Exit Sub
errend:
  Select Case Err.Number
    Case 3303 
       MsgBox "Нельзя удалить поле по ошибке 3303",vbOKOnly
    Case Else
       MsgBox Err.Number, Err.Descripton
  End Select
  Resume NoErr
End Sub
1
3540 / 1114 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
03.04.2013, 15:38 3
Цитата Сообщение от mobile Посмотреть сообщение
Если интересует именно первичный ключ и вы знаете имя поля, то проверить можно так
Visual Basic
1
If Instr(currentdb.TableDefs("ИмяТаблицы").Indexes("PrimaryKey").Fields, "ИмяПоля")>0 Then
Наверное, я чего-то недопонял.
Создал таблицу Tab с двумя полями Id_txt - счетчик, ключевое и txt - текстовое.
Проверяю поле Id_txt
Visual Basic
1
2
?Instr(currentdb.TableDefs("Tab").Indexes("PrimaryKey").Fields, "Id_txt")
 2
т.к. 2>0, то поле Id_txt - ключевое, что соответствует действительности.
Проверяю поле txt
Visual Basic
1
2
?Instr(currentdb.TableDefs("Tab").Indexes("PrimaryKey").Fields, "txt")
 5
т.К. 5>0, то поле txt - также ключевое, что не соответствует действительности.
1
Эксперт MS Access
26753 / 14432 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
03.04.2013, 16:14 4
Исправим
Visual Basic
1
2
?instr(currentdb.TableDefs("tab").Indexes("PrimaryKey").Fields, "+" & "txt")
0
Добавлено через 1 минуту
Visual Basic
1
2
?instr(currentdb.TableDefs("tab").Indexes("PrimaryKey").Fields, "+" & "Id_txt")
 1
Добавлено через 13 минут
Но правильнее будет просматривать коллекцию
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Public Function indf(tbl, fld)
    Dim i, db As DAO.Database
    Set db = CurrentDb
    indf = False
    With db.TableDefs(tbl).Indexes("PrimaryKey")
        For i = 0 To .Fields.Count - 1
            If .Fields(i).Name = fld Then
                indf = True
            End If
        Next
    End With
End Function
Visual Basic
1
2
?indf("tab","txt")
False
Добавлено через 7 минут
Нахождение имени ключевого поля с помощью Instr действительно может дать ложные совпадения. Проход по коллекции полей дает точный ответ
1
13 / 13 / 2
Регистрация: 31.03.2013
Сообщений: 107
03.04.2013, 20:44  [ТС] 5
mobile Не могли бы вы пояснить зачем необходима данная строка? (не могу точно уловить), мне кажется для обработки других кодов ошибок?
Visual Basic
1
2
Case Else
       MsgBox Err.Number, Err.Descripton
0
Эксперт MS Access
26753 / 14432 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
03.04.2013, 20:53 6
TopolM, ну это как бы на всякий случай. Мало ли, что может быть...
У меня в рабочих проектах в каждой (!!!) процедуре обязательно вставлен обработчик ошибок. Где есть, в том числе Case Else на всякий случай. И все сообщения об ошибках обязательно пишутся в лог. Если что-то случится, то всегда будет какой-то минимум "информации для размышления!" (с)
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2013, 20:53
Помогаю со студенческими работами здесь

Ошибка Record/Key delete при изменении ключевого поля (Paradox)
При изменении ключевого поля в таблице на основе Paradox 7 выскакивает ошибка Record/Key delete....

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

Как в форме при изменении ключевого поля обновить информацию по другим полям той же записи?
Форма выдает все поля записи. Если изменить ключевое поле, то должны выдаваться поля, ему...

Добавление скрытого поля при удалении элемента
Здравствуйте у меня такая проблема у меня стоит задача чтобы при удалении определенного элемента...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru