Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Копия ручками. / 7 сообщений из 7, страница 1 из 1
19.12.2002, 14:09
    #32081851
AGU
AGU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копия ручками.
В модуле одного tem.mdb нужно сделать tem2.mdb ручками не используя DAO чтоб в нем была та же структура, связи, таблицы, формы ... что и в родительском файле, но данных в таблице быть не должно. (ибо данных очень много, а они нужны совсем не все).
...
Рейтинг: 0 / 0
19.12.2002, 16:27
    #32082009
Julius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копия ручками.
1. Создать новую базу данных
2. Кликнуть в окне правой кнопкой и выбрать "Импорт"
3. Выбелить все объекты
4. Нажать в окне "Импорт" на кнопку "Параметры"
5. Выбрать опцию "Только структура"
6. Выбрать опцию "Меню и панели"
7. Нажать кнопку OK

Получится точно такая же, но пустая база :)
...
Рейтинг: 0 / 0
19.12.2002, 16:43
    #32082023
AGU
AGU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копия ручками.
Я наверно не так выразился, меня интересует как раз как это программно сделать.
...
Рейтинг: 0 / 0
19.12.2002, 16:50
    #32082028
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копия ручками.
Общая идея будет похоже та, что тебе надо пробежаться по всем таблицам в них по полям запомнить все их параметры и создавать заново!

Код: plaintext
MsgBox Application.CurrentData.AllTables.Item( 0 ).Properties.Item( 0 ).Name


Дальше сам, ручками

C_НОВЫМ_ГОДОМ!!!
...
Рейтинг: 0 / 0
19.12.2002, 18:28
    #32082108
-=Alexey=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копия ручками.
Я бы сказал общая идея будет использовать Docmd.TransferDatabase. Вот пример использования, переносятся все объекты БД писал давно, в Access97 работало. Когда-то это было на моем сайте пока его не закрыли во-второй раз, сейчас взял код из всемирного веб архива.

Код: 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.
44.
Dim dbsSource As Database, objDBObject As Object   
Dim i As Byte   
Set dbsSource = OpenDatabase(FilePath)  
For i =  1  To  7                                                                  'Начало копирования объектов  
    For Each objDBObject In dbsSource.Containers(i).Documents  
        If GetObjType(i) = 16 Then Exit For                       'Неизвестный объект   
        If i =  7  Then                                                            'Пошел табличный контейнер  
            If objDBObject.AllPermissions = dbsSource.Containers(i).AllPermissions Then  
                                                                                       'Отсеиваем системные таблицы    
                                                                                       'анализируюя параметры доступа   
                If objDBObject.Properties.count > 12 Then     'Это запрос   
                    DoCmd.TransferDatabase acImport,  "Microsoft Access" , FilePath, _  
                    GetObjType(i +  1 ), objDBObject.Name, objDBObject.Name  
                Else                                                                  'Это таблица   
                    DoCmd.TransferDatabase acImport, "Microsoft Access", FilePath, _  
                    GetObjType(i), objDBObject.Name, objDBObject.Name  
                End If   
            End If   
        Else                                                                          'Не таблица  
            DoCmd.TransferDatabase acImport,  "Microsoft Access" , FilePath, _  
            GetObjType(i), objDBObject.Name, objDBObject.Name  
        End If  
    Next objDBObject  
Next i  
Set dbsSource = Nothing  
  
Public Function GetObjType(n As Byte) As Long  
    Select Case n  
        Case  1   
            GetObjType =  2           'acForm  
        Case 2  
            GetObjType = 5          'acModule  
        Case  4   
            GetObjType =  3           'acReport  
        Case 5  
            GetObjType = 4          'acMacro  
        Case  7   
            GetObjType =  0           'acTable  
        Case 8  
            GetObjType = 1          'acQuery  
        Case Else  
            GetObjType =  16          'Неизвестный объект  
    End Select  
End Function

комментарии:
Повторяющийся трижды фрагмент копирования объектов, можно оформить в виде отдельной процедуры, в примере отого не сделанно чтобы не усложнять понимание кода.

По средством dbsSource.Containers(i).Documents программа получает доступ ко всем(!) объектам базы данных, но системные таблицы нам не нужны (а если бы и были нужны таким способом их не скопировать), они автоматически создадутся после CreateDatabase и будут автоматически корректироваться по мере копирования новых объектов.

Как показывает практика при лобовом копировании запросы и таблицы "сваливаются в одну кучу", для предотвращения этого необходимо программно разделять таблицы и запросы, в примере это выполняется на различии количества свойств (можно выбрать любой другой параметр)
...
Рейтинг: 0 / 0
19.12.2002, 18:45
    #32082121
-=Alexey=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копия ручками.
забыл сказать что в методе TransferDatabase есть параметр structureonly.

Use True (–1) to import or export only the structure of a database table. Use False (0) to import or export the structure of the table and its data.
...
Рейтинг: 0 / 0
21.12.2002, 11:55
    #32082672
AGU
AGU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копия ручками.
Всем большое спасибо, кстати через трансфер работает быстрее. Намного быстрее.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Копия ручками. / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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