powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Перенос объектов БД
17 сообщений из 17, страница 1 из 1
Перенос объектов БД
    #32162627
AlTis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток господа!
Существует следующая задача:
Есть БД Access написанная по файл-серверной технологии.
Требуется из клиентского интерфейса обратиться к прилинкованным таблицам и перенести некоторые из них в новую БД с сохранением структуры, причём вся содержащаяся в них информация должна перелиться вместе с ними. Help pls! (TransformObject не помогает, т.к. таблицы в новой БД так и остаются прилинкованными)
...
Рейтинг: 0 / 0
Перенос объектов БД
    #32162671
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А обычный импорт не помогает?
...
Рейтинг: 0 / 0
Перенос объектов БД
    #32162675
AlTis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При обычном импорте также импортируются только ссылки.
...
Рейтинг: 0 / 0
Перенос объектов БД
    #32162681
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2AlTis
>При обычном импорте также импортируются только ссылки.

Ты откуда импортируешь-то? От туда где ссылки. Импортируй из _данных_.
Или ты вместо импортирования - делаешь создать связь.
...
Рейтинг: 0 / 0
Перенос объектов БД
    #32162708
AlTis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Senin Viktor
>Ты откуда импортируешь-то? От туда где ссылки. Импортируй из _данных_.
Или ты вместо импортирования - делаешь создать связь.


Пользователь в клиентском интерфейсе нажимает кнопку "Сохранить текущее состояние". При этом необходимо програмно сохранить 5-6 таблиц ,находящихся на серверной части, в отдельный .mdb файл.
...
Рейтинг: 0 / 0
Перенос объектов БД
    #32162744
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2AlTis
>При этом необходимо програмно сохранить 5-6 таблиц ,находящихся на серверной части, в отдельный .mdb файл.

ты скорее всего свои клиентские прилинкованные таблицы и импортируешь в новую базу - импортируй таблицы из файла с данными.
Вариантов переноса тьма, можно было бы и запросом на создание таблиц, например, а не только импортом.
...
Рейтинг: 0 / 0
Перенос объектов БД
    #32162754
AlTis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Senin Viktor

Я перебрал все известные мне методы. Ничего не получается. При выполнении запроса на создание табл., изменяется структура табл., не переносится описание полей и т.д.
...
Рейтинг: 0 / 0
Перенос объектов БД
    #32162770
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так тебе данные надо перенести данные или структуру с описанием?
Если и то и другое то можно попробовать через :
- docmd.CopyObject
- Через DAO или ADOX. Используя коллекцию Fields, для просмотора свойств поля у исходной таблицы и установке этого свйоства у конечной.
...
Рейтинг: 0 / 0
Перенос объектов БД
    #32162779
AlTis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне необходимо перенести и данные и структуру (для того чтобы при нажатии кнопки "Загрузить данные на" определённую дату, таблицы из копии переливались в серверную часть БД). Я рассматривал предложенный тобою метод. Он мне не подходит из-за трудоёмкости, и невозможности перенести ВСЕ свойства полей. В сиквельном сервере проблем бы не было. Я бы выполнил скрипт на создание таблицы, и слил данные. В Access такого нет. Или я ошибаюсь?
docmd.CopyObject - опять же переносит только линки.... :(
...
Рейтинг: 0 / 0
Перенос объектов БД
    #32162792
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не легче ли тогда создать копию таблицы с данными и по-удалять не нужные таблицы? Тогда и связи сохраняться.

А как ты Docmd.CopyObject использовал, что он у тебя только линки переносит? У него один из параметров "sourceobjectname" - где надо было бы указать имя базы с данными, а не товю клиентскую базу. Только он тебе связи-то не перенесет.

А использовать DAO/ADOX не так уж и страшно - в цикле по исходной таблице бежишь по семейству Propertes и присваиваешь все найденный Property новой таблице (заранее созданной запросом на создание таблицы, например)
Так же поступаешь с ReLations - циклом по всем связям в которых совпадают имена таблиц.
...
Рейтинг: 0 / 0
Перенос объектов БД
    #32162818
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перенсти данные вместе со структурой можно с помощью Query
SELECT Tab1.* INTO Tab_new FROM Tab1;
при этом создается новая таблица Tab_new идентичная по структуре Tab1 и в нее переносятся все данные
...
Рейтинг: 0 / 0
Перенос объектов БД
    #32162984
AlTis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Senin Viktor

>А как ты Docmd.CopyObject использовал, что он у тебя только линки переносит? У него один из параметров "sourceobjectname" - где надо было бы указать имя базы с данными, а не товю клиентскую базу. Только он тебе связи-то не перенесет

есть 3 БД: db1 - клиент ,db2 - данные ,db3 - созданная БД

Находясь в db1 необходимо из db2 перенести таблицу в db3
Выполняю следующий код из db1:

dim strPath as string ' Путь к db3
DoCmd.CopyObject strPath, "Table1", acForm, "Table1"

... переносится только связь к таблице Table1

>А использовать DAO/ADOX не так уж и страшно - в цикле по исходной таблице бежишь по семейству Propertes и присваиваешь все найденный Property новой таблице (заранее созданной запросом на создание таблицы, например)

До некоторых свойств полей я так и не смог достучаться (например источник строк для поля со списком)

Подкиньте ещё идей, pls
...
Рейтинг: 0 / 0
Перенос объектов БД
    #32163003
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>dim strPath as string ' Путь к db3

c 10-33 я тебе пытаюсь объяснить - КОПИРУЙ ИЗ ДАННЫХ
На фига ты делаешь "dim strPath as string ' Путь к db3 "
должно быть "dim strPath as string ' Путь к db2 -ТАМ ГДЕ ДАННЫЕ"
...
Рейтинг: 0 / 0
Перенос объектов БД
    #32163012
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, поторопился, не договорил...
Надо запускать копирование из твоей db2. Т.е. от туда где данные.
...
Рейтинг: 0 / 0
Перенос объектов БД
    #32163086
AlTis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том то и дело, что процедура запускается из db1.
Я не знаю как запустить процедуру, находящиюся в db2 из db1... :(
...
Рейтинг: 0 / 0
Перенос объектов БД
    #32163155
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, тогда просто копируй базу с данными и уже из этой копии удаляй не нужное .
...
Рейтинг: 0 / 0
Перенос объектов БД
    #32163286
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для импорта/экспорта в 97 (как и во 2.0 :) можно пользовать
DoCmd.TransferDatabase
шняга для копирования есть на каком то из форумов (тип копирования экспорт/импорт, структура/данные задается параметрами)

Связи:
Работает (с точностью до неких изменений синтаксиса) даже в мса2.0 (потому и циклы явные, а не по семействам)

Код: 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.
Function aTransferRelations(dbsSource As Database, dbsIn As Database) As Integer
'тут можно и вывод в log file
Dim rlt As Relation 
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
    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
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Перенос объектов БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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