Страница 1 из 1
Как перенести данные из одной базы в другую
Добавлено: 18 апр 2005, 12:20
Freeman8901
Люди добрые подскажите есть две БД в формате аксцесса структура таблиц одинаковая. Как можно перенести данные из одной БД в другую при чем нужно устанавливать фильтр по первой базе или хотя бы просто перенести данные из одной в другую.
Добавлено: 18 апр 2005, 15:27
AiK
Freeman8901, вообще-то можно использовать для этих целей MS Data Transformation Service (MS DTS). Особенно если мероприятие одноразовое. Даже если оно поторяющееся, то "трансформацию" можно сохранять для повторного использования. MS DTS идёт в _полном_ разливе офиса (как и MS SQL Sevrer Desktop Edition), так и с сервером.
Если охота экзотики, то просто делаешь кучу запросов (выборки) к одной БД и кучу запросов (вставки) к другой БД.
Добавлено: 18 апр 2005, 20:59
YurikGL
Вообще-то, если не ошибаюсь, как-то в одной сессии можно было подцепляться сразу к двум базам, делать выбоку из обоих и вставлять с помощью insert into из одной базы в другую... Но не уверен, что в ADO+Access.
Однако, из личного опыта, быстрее всего переносить данные ручками через буфер, как бы дико это не звучало. Пошаговый insert дольше работает. Проверено многократно...
Проверялось, в основном на экспорте из екселя (ворда, блокнота) в Access
Добавлено: 18 апр 2005, 22:55
RoKon
Вообще-то, если не ошибаюсь, как-то в одной сессии можно было подцепляться сразу к двум базам, делать выбоку из обоих и вставлять с помощью insert into из одной базы в другую... Но не уверен, что в ADO+Access.
Именно так и можно. Как внешние данные подцепляешь, т.е. по ссылке получается, и копируешь из одной таблицы в другую запросами, и так все поочереди.
Добавлено: 19 апр 2005, 07:03
Freeman8901
а как можно переключаться между базами (извените за глупый вопрос раньше я писал проги на досовских языках, а щас пытаюсь на дельфях)
Добавлено: 21 апр 2005, 21:19
RoKon
переключаться где? в 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
Добавлено: 22 апр 2005, 07:16
Freeman8901
RoKon, подскажите пожалуйста где это необходимо написать в каком модуле
Добавлено: 22 апр 2005, 22:59
RoKon
Вообщето мои примеры больше ориентированы на раюоту чисто в сиквел менеджере каком-нить, типа QueryAnalysera.
Пример того что было описано еще выше на Аксесе выложил
http://www.rksoft.nm.ru/others/dbAccess.rar
А так конечно все зависит от того где тебе нужно это перключение. Может его и не нужно вовсе, а можно просто работать одновременно с двумя бд.
Добавлено: 25 апр 2005, 03:52
Naeel Maqsudov
Не спорьте.
Все делов том, что тема находится не на месте.
Во-первых тема переезжает из 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
Добавлено: 25 апр 2005, 03:55
Naeel Maqsudov
Короче, если мы достучались до движка MSJet Engine, то мы можем работать с любой базой (включая ODBC), а точнее со всеми базами одновременно. Используйте одно подключение и таскайте данные откуда угодно и куда угодно.