Как перенести данные из одной базы в другую

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Freeman8901
Сообщения: 18
Зарегистрирован: 11 апр 2005, 14:46
Откуда: Драхелас

Люди добрые подскажите есть две БД в формате аксцесса структура таблиц одинаковая. Как можно перенести данные из одной БД в другую при чем нужно устанавливать фильтр по первой базе или хотя бы просто перенести данные из одной в другую.
Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

Freeman8901, вообще-то можно использовать для этих целей MS Data Transformation Service (MS DTS). Особенно если мероприятие одноразовое. Даже если оно поторяющееся, то "трансформацию" можно сохранять для повторного использования. MS DTS идёт в _полном_ разливе офиса (как и MS SQL Sevrer Desktop Edition), так и с сервером.

Если охота экзотики, то просто делаешь кучу запросов (выборки) к одной БД и кучу запросов (вставки) к другой БД.
Даже самый дурацкий замысел можно воплотить мастерски
YurikGL
Сообщения: 142
Зарегистрирован: 16 фев 2005, 21:54
Откуда: Уфа
Контактная информация:

Вообще-то, если не ошибаюсь, как-то в одной сессии можно было подцепляться сразу к двум базам, делать выбоку из обоих и вставлять с помощью insert into из одной базы в другую... Но не уверен, что в ADO+Access.
Однако, из личного опыта, быстрее всего переносить данные ручками через буфер, как бы дико это не звучало. Пошаговый insert дольше работает. Проверено многократно...
Проверялось, в основном на экспорте из екселя (ворда, блокнота) в Access
RoKon
Сообщения: 82
Зарегистрирован: 27 мар 2005, 12:24
Откуда: Saransk City
Контактная информация:

Вообще-то, если не ошибаюсь, как-то в одной сессии можно было подцепляться сразу к двум базам, делать выбоку из обоих и вставлять с помощью insert into из одной базы в другую... Но не уверен, что в ADO+Access.
Именно так и можно. Как внешние данные подцепляешь, т.е. по ссылке получается, и копируешь из одной таблицы в другую запросами, и так все поочереди.
The trurh is out there...
Freeman8901
Сообщения: 18
Зарегистрирован: 11 апр 2005, 14:46
Откуда: Драхелас

а как можно переключаться между базами (извените за глупый вопрос раньше я писал проги на досовских языках, а щас пытаюсь на дельфях)
RoKon
Сообщения: 82
Зарегистрирован: 27 мар 2005, 12:24
Откуда: Saransk City
Контактная информация:

переключаться где? в SQL можно так

Код: Выделить всё

 insert into Base1..tablename
select * from Base2..tablename
или так

Код: Выделить всё

use Base1
select * from tablename

use Base2
select * from tablename
анологично этому

Код: Выделить всё

select * from Base1..tablename

select * from Base2..tablename
The trurh is out there...
Freeman8901
Сообщения: 18
Зарегистрирован: 11 апр 2005, 14:46
Откуда: Драхелас

RoKon, подскажите пожалуйста где это необходимо написать в каком модуле
RoKon
Сообщения: 82
Зарегистрирован: 27 мар 2005, 12:24
Откуда: Saransk City
Контактная информация:

Вообщето мои примеры больше ориентированы на раюоту чисто в сиквел менеджере каком-нить, типа QueryAnalysera.
Пример того что было описано еще выше на Аксесе выложил http://www.rksoft.nm.ru/others/dbAccess.rar
А так конечно все зависит от того где тебе нужно это перключение. Может его и не нужно вовсе, а можно просто работать одновременно с двумя бд.
The trurh is out there...
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Не спорьте.
Все делов том, что тема находится не на месте.
Во-первых тема переезжает из Delphi в Access

Во-вторых исходная задача решается так
В MSJetSQL (который используется в Access) есть предложение IN которое позволяет использовать другую базу (нетекущую) для выполнения запроса

Чтобы из текуще базы экспорировать данные используется конструкция

SELECT field1[, field2[, ...]] INTO newtable [IN externaldatabase]
FROM source

или

INSERT INTO target [IN externaldatabase] [(field1[, field2[, ...]])]
SELECT [source.]field1[, field2[, ...]
FROM tableexpression

(первый вариант создает новую таблицу или пересоздает ее, а второй только добавляет данные)


А чтобы в текущую базу затащить данные можно
также сделать INSERT INTO, но уже SELECT написать так, чтобы он тянул данные извне, (т.е. поставить IN после FROM)

См. справку!!!!
C:\WINNT\Help\JETSQL35.HLP и вообще JET*.HLP
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Короче, если мы достучались до движка MSJet Engine, то мы можем работать с любой базой (включая ODBC), а точнее со всеми базами одновременно. Используйте одно подключение и таскайте данные откуда угодно и куда угодно.
Ответить