powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как отключить CONSTRAINTS в Аксессе?
9 сообщений из 9, страница 1 из 1
Как отключить CONSTRAINTS в Аксессе?
    #32275090
Alexey Daryin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Други! Кто-нить знает как можно с помощью запроса отключить проверку CONSRAINTS (foreign keys, primary keys) в Аксессе. При загрузки пустой базы данными естессно возникает ошибка. Можно конечно загружать сначала главные таблицы, а потом подчиненные, но хочется просто отключить проверку и все, напр. как в MySQL 'set foreign_key_cheks=0'
...
Рейтинг: 0 / 0
Как отключить CONSTRAINTS в Аксессе?
    #32275138
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну-ну
я потом посмотрю на тебя
когда ты эти ограничения
включишь и будешь
отлавливать ошибки
вставки
...
Рейтинг: 0 / 0
Как отключить CONSTRAINTS в Аксессе?
    #32275143
Alexey Daryin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело не в этом, данные перегоняются подобной базы на MSSQL, все ограничения целостности соблюдены, т.е. в данных я уверен
...
Рейтинг: 0 / 0
Как отключить CONSTRAINTS в Аксессе?
    #32275152
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
одно из двух:
либо ты снимаешь ограничения
и вливаешь
либо оставляешь все как есть
и вливаешь последовательно
при первом способе
будет замороченнее
восстанавливать ограничения
...
Рейтинг: 0 / 0
Как отключить CONSTRAINTS в Аксессе?
    #32275159
Alexey Daryin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я с этим полностью согласен и хочу отключить ограничения (и включить их после) наименее геморройным путем (запросом каким-нить). В Oracle же это можно с помощью alter table .. disable constraint .. cascade
...
Рейтинг: 0 / 0
Как отключить CONSTRAINTS в Аксессе?
    #32275227
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
такого нет
...
Рейтинг: 0 / 0
Как отключить CONSTRAINTS в Аксессе?
    #32275355
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удаляю:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Function aDeleteRelations(dbsSource As Database) As Integer
Dim rlt As Relation
Dim i As Long

Dim rName As String
'On Error Resume Next
    For i = dbsSource.Relations.Count -  1  To  0  Step - 1 
        rName = dbsSource.Relations(i).Name
        dbsSource.Relations.Delete rName
        dbsSource.Relations.Refresh
    Next i

End Function

вертаю после вставки (из копии со связями):
Код: plaintext
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 aTransferRelations(dbsSource As Database, dbsIn As Database) As Integer
'тут нужно предусмотреть перехват совпадения имен (связей)
'результат - от количества обновленных - все/не все/ни одной?
'log file
Dim rlt As Relation ', dbsIn As Database
Dim rltIn As Relation

Dim i As Long, k As Long
Dim aName As String, aForeignTable As String, aTable  As String
Dim anAttrib, aField As String, aForeignName As String
Dim aFstr As String
On Error Resume Next
    'Set dbsIn = CurrentDB()
    For k = 0 To dbsSource.Relations.Count - 1
        Set rlt = dbsSource.Relations(k)
        aName = rlt.Name
        aForeignTable = rlt.ForeignTable
        aTable = rlt.Table
        anAttrib = rlt.Attributes
        aFstr = ""
        Set rltIn = dbsIn.CreateRelation(aName, aTable, aForeignTable, anAttrib)
        For i = 0 To rlt.Fields.Count - 1
            'тут добавить поля связи
            aField = rlt.Fields(i).Name
            aForeignName = rlt.Fields(i).ForeignName
            aFstr = aFstr & aField &  "-"  & aForeignName &  ";" 
            rltIn.Fields.Append rltIn.CreateField(aField)
            rltIn.Fields(aField).ForeignName = aForeignName
        Next i
        dbsIn.Relations.Append rltIn
        If Err <>  0  Then
            Debug.Print rltIn.Name; ; Err.Description
            Debug.Print aTable &  "-" ; aForeignTable &  " "  & aFstr
            Err.Clear
        End If
         'просто передать все по указателю нельзя {* dbsIn.Relations.Append rlt *} - неверно
    Next k

    Set rlt = Nothing
    Set rltIn = Nothing
    'Set dbsIn = Nothing
    
    aTransferRelations = True
End Function

'Ошибки при установлении связей анализируешь по сообщениям дебаггера (где-то целостность не соблюдается и т.п.), затем (прочистив базку) повторяешь копирование связей.
...
Рейтинг: 0 / 0
Как отключить CONSTRAINTS в Аксессе?
    #32275366
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДА, и вызов наподобие:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Function tr_rel(FilePathSource As String, FilePathIn As String) As Integer
Dim dbsSource As Database, dbsIn As Database, result As Integer
    Set dbsSource = OpenDatabase(FilePathSource)
    Set dbsIn = OpenDatabase(FilePathIn)
    result = aDeleteRelations(dbsIn)
'...
    result = aTransferRelations(dbsSource, dbsIn)
    Set dbsSource = Nothing
    tr_rel = True
End Function

/это просто замена связей на связи по образцу.
...
Рейтинг: 0 / 0
Как отключить CONSTRAINTS в Аксессе?
    #32276209
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удалить constraint можно запросом
Код: plaintext
1.
ALTER TABLE table_name   DROP CONSTRAINT constraint_name

Создать:
Код: plaintext
1.
ALTER TABLE table_name
ADD CONSTRAINT constraint_name

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


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