Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как отключить CONSTRAINTS в Аксессе? / 9 сообщений из 9, страница 1 из 1
25.09.2003, 11:03
    #32275090
Alexey Daryin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить CONSTRAINTS в Аксессе?
Други! Кто-нить знает как можно с помощью запроса отключить проверку CONSRAINTS (foreign keys, primary keys) в Аксессе. При загрузки пустой базы данными естессно возникает ошибка. Можно конечно загружать сначала главные таблицы, а потом подчиненные, но хочется просто отключить проверку и все, напр. как в MySQL 'set foreign_key_cheks=0'
...
Рейтинг: 0 / 0
25.09.2003, 11:23
    #32275138
Хам трамвайный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить CONSTRAINTS в Аксессе?
ну-ну
я потом посмотрю на тебя
когда ты эти ограничения
включишь и будешь
отлавливать ошибки
вставки
...
Рейтинг: 0 / 0
25.09.2003, 11:25
    #32275143
Alexey Daryin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить CONSTRAINTS в Аксессе?
Дело не в этом, данные перегоняются подобной базы на MSSQL, все ограничения целостности соблюдены, т.е. в данных я уверен
...
Рейтинг: 0 / 0
25.09.2003, 11:31
    #32275152
Хам трамвайный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить CONSTRAINTS в Аксессе?
одно из двух:
либо ты снимаешь ограничения
и вливаешь
либо оставляешь все как есть
и вливаешь последовательно
при первом способе
будет замороченнее
восстанавливать ограничения
...
Рейтинг: 0 / 0
25.09.2003, 11:34
    #32275159
Alexey Daryin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить CONSTRAINTS в Аксессе?
Я с этим полностью согласен и хочу отключить ограничения (и включить их после) наименее геморройным путем (запросом каким-нить). В Oracle же это можно с помощью alter table .. disable constraint .. cascade
...
Рейтинг: 0 / 0
25.09.2003, 12:08
    #32275227
Хам трамвайный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить CONSTRAINTS в Аксессе?
такого нет
...
Рейтинг: 0 / 0
25.09.2003, 13:29
    #32275355
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить CONSTRAINTS в Аксессе?
Удаляю:
Код: 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
25.09.2003, 13:33
    #32275366
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить CONSTRAINTS в Аксессе?
ДА, и вызов наподобие:
Код: 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
26.09.2003, 00:59
    #32276209
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить CONSTRAINTS в Аксессе?
Удалить constraint можно запросом
Код: plaintext
1.
ALTER TABLE table_name   DROP CONSTRAINT constraint_name

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

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


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