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

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

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


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

C_НОВЫМ_ГОДОМ!!!
...
Рейтинг: 0 / 0
Копия ручками.
    #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
Копия ручками.
    #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
Копия ручками.
    #32082672
AGU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем большое спасибо, кстати через трансфер работает быстрее. Намного быстрее.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Копия ручками.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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