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

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


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

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

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

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

А использовать DAO/ADOX не так уж и страшно - в цикле по исходной таблице бежишь по семейству Propertes и присваиваешь все найденный Property новой таблице (заранее созданной запросом на создание таблицы, например)
Так же поступаешь с ReLations - циклом по всем связям в которых совпадают имена таблиц.
...
Рейтинг: 0 / 0
19.05.2003, 11:55
    #32162818
incold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос объектов БД
Перенсти данные вместе со структурой можно с помощью Query
SELECT Tab1.* INTO Tab_new FROM Tab1;
при этом создается новая таблица Tab_new идентичная по структуре Tab1 и в нее переносятся все данные
...
Рейтинг: 0 / 0
19.05.2003, 13:45
    #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
19.05.2003, 13:57
    #32163003
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос объектов БД
>dim strPath as string ' Путь к db3

c 10-33 я тебе пытаюсь объяснить - КОПИРУЙ ИЗ ДАННЫХ
На фига ты делаешь "dim strPath as string ' Путь к db3 "
должно быть "dim strPath as string ' Путь к db2 -ТАМ ГДЕ ДАННЫЕ"
...
Рейтинг: 0 / 0
19.05.2003, 14:06
    #32163012
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос объектов БД
Блин, поторопился, не договорил...
Надо запускать копирование из твоей db2. Т.е. от туда где данные.
...
Рейтинг: 0 / 0
19.05.2003, 14:53
    #32163086
AlTis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос объектов БД
В том то и дело, что процедура запускается из db1.
Я не знаю как запустить процедуру, находящиюся в db2 из db1... :(
...
Рейтинг: 0 / 0
19.05.2003, 15:35
    #32163155
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос объектов БД
Ну, тогда просто копируй базу с данными и уже из этой копии удаляй не нужное .
...
Рейтинг: 0 / 0
19.05.2003, 17:01
    #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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Перенос объектов БД / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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