Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как проверить наличие PrimaryKey? / 5 сообщений из 5, страница 1 из 1
07.11.2016, 12:57
    #39342534
GVOV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить наличие PrimaryKey?
Удаляю программно ключ с существующей таблицы:

Код: vbnet
1.
   dbs.Execute "alter table Таблица1 DROP CONSTRAINT PrimaryKey"



Но сложность в том что в случае отсутствия ключа в этой таблице выдаёт ошибку 3755 (мол ключа не существует)

Вопрос. Можно ли проверить перед выполнением команды удаления ключа его существование, если да то как?

Как вариант перехватываю ошибку и выполняю со следующей строчки. Проблема обходиться, но хотелось бы без обходного пути если есть более правильный.
...
Рейтинг: 0 / 0
07.11.2016, 23:45
    #39343018
guest_rusimport
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить наличие PrimaryKey?
GVOV,
http://www.techrepublic.com/blog/microsoft-office/how-to-list-the-primary-key-columns-in-an-access-table/
на всякий случай для истории

Код: vbnet
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.
39.
40.
41.
42.
43.
Function ListPK(tbl As String) As String
    'List primary keys for passed table.
    'Must reference ADOX library:
    'Microsoft ADO Ext. 2.8 for DDL and Security.

    Dim cat As New ADOX.Catalog
    Dim tblADOX As New ADOX.Table
    Dim idxADOX As New ADOX.Index
    Dim colADOX As New ADOX.Column
    cat.ActiveConnection = CurrentProject.AccessConnection
    On Error GoTo errHandler
    For Each tblADOX In cat.Tables
       If tblADOX.Name = tbl Then
          If tblADOX.Indexes.Count <> 0 Then
             For Each idxADOX In tblADOX.Indexes
                With idxADOX
                   If .PrimaryKey Then
                      For Each colADOX In .Columns
                         ListPK = colADOX.Name & ", " & ListPK
                      Next
                   End If
                End With
             Next
          End If
       End If
    Next
    If ListPK = "" Then 
       ListPK = "No primary key"
    Else
       ListPK = Left(ListPK, Len(ListPK) - 2)
    End If
    Set cat = Nothing  Set tblADOX = Nothing
    Set idxADOX = Nothing
    Set colADOX = Nothing
    Exit Function

    errHandler:  MsgBox Err.Number & ": " & Err.Description, vbOKOnly, _
    "Error"
    Set cat = Nothing
    Set tblADOX = Nothing
    Set idxADOX = Nothing
    Set colADOX = Nothing
End Function


...
Рейтинг: 0 / 0
08.11.2016, 00:01
    #39343021
GVOV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить наличие PrimaryKey?
guest_rusimport,

Спасибо. Процесс понятен. В моём случае намного продуктивнее отловить через код ошибки и пропустить строку с удалением ключа, так как удалять надо только в случае наличия такового.
...
Рейтинг: 0 / 0
08.11.2016, 08:51
    #39343105
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить наличие PrimaryKey?
Поставьте перед удалением
Код: vbnet
1.
On Error Resume Next


и ничего не надо будет отлавливать
...
Рейтинг: 0 / 0
08.11.2016, 13:03
    #39343396
GVOV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить наличие PrimaryKey?
MrShin,

Я ж об этом и говорил
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как проверить наличие PrimaryKey? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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