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

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



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

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

Как вариант перехватываю ошибку и выполняю со следующей строчки. Проблема обходиться, но хотелось бы без обходного пути если есть более правильный.
...
Рейтинг: 0 / 0
Как проверить наличие PrimaryKey?
    #39343018
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Как проверить наличие PrimaryKey?
    #39343021
GVOV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimport,

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


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

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


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