[identity profile] krboldfellow.livejournal.com posting in [community profile] useful_faq
Есть две базы в MS Access 2002 (по 4 десятка полей), отличающиеся друг от друга несколькими (7-10) полями. Стоит задача объединить две базы в одну базу MS Access 2002, сохранив поля и записи обеих баз.

Посоветуйте, каким инструментом это делать удобнее всего?

Спасибо

xpost

Date: 2008-09-22 03:30 pm (UTC)
From: [identity profile] human2human.livejournal.com
Вы хотите объединить две таблицы в одну или просто хотите чтобы в одном mdb-файле хранились 2 таблицы, а не в двух файлах?
Так или иначе, обе операции можно проделать в самом MS Access (в первом случае объединение по ключу, во втором - просто копия таблицы).

Date: 2008-09-22 03:37 pm (UTC)
From: [identity profile] human2human.livejournal.com
Хорошо. Вы запрос (Query) к таблице когда-нибудь выполняли - типа "select * from a,b where ..."? В базу данных Вы имеете права записи?

Date: 2008-09-22 03:44 pm (UTC)
From: [identity profile] human2human.livejournal.com
Очень хорошо. У Вас 2 таблицы. Одинаковое ли количество записей (строк) в этих таблицах? Каково количество записей (строк)? Есть ли уникальное ключевое поле в обеих таблицах? Какой размер первого и второго mdb-файлов?

Date: 2008-09-22 03:55 pm (UTC)
From: [identity profile] human2human.livejournal.com
1) Создайте резервную копию обеих баз (файлов) и спрячьте подальше
2) Создайте пустой файл-базу
3) Туда импортируйте обе таблицы (кликаем на окошке с базой и выбираем «импорт», там выбираем файл и таблицу из него)
4) Сохраните изменения

продолжение следует (дайте знать, как успехи)...

Date: 2008-09-22 04:07 pm (UTC)
From: [identity profile] human2human.livejournal.com
5) Идете в раздел Query, выбираете «Create query in design view», там выбираете обе таблицы и необходимые поля и _объединяете таблицы по ключевому полю_ (делаете линк между полями двух разных таблиц – драг-анд-дроп).
С типом объединения потом разберемся.
6) Идем в главное меню Query и там выбираем „Make-Table query”, попутно задавая имя таблицы. Запускаем. Что видим?

Date: 2008-09-22 04:25 pm (UTC)
From: [identity profile] human2human.livejournal.com
Сохраняем Query.
Сумма полей 2х таблиц больше 255? Если нет, то перед шагом 5) надо выполнить команду через главное меню "Tools->Database Utilities->Compact and repare Database". И повторяем 5) шаг

Date: 2008-09-22 04:35 pm (UTC)
From: [identity profile] marusidze.livejournal.com
Думаю под "ключевым полем", товарищ подразумевал поле с идентичным названием, но содержание этих полей в обоих базах данных будет отличаться. Например, ID code, если в одной БД: 1, 2, 3, а в другой ID code = а, b, c, то в результате - query will return no results. Или я чего-то не поняла? У меня точно такая же задача. Прямо сегодня! Пожалуйста продолжайте обсуждение, буду очень благодарна :)

Date: 2008-09-22 04:40 pm (UTC)
From: [identity profile] human2human.livejournal.com
я очень надеюсь что в ключевом поле в обеих таблицах у krboldfellow данные одного типа ;)

хотя при необходимости из "1" можно сделать "а" и наоборот :) вы хотите объединить таблицы по полям разных типов?

Date: 2008-09-22 04:52 pm (UTC)
From: [identity profile] human2human.livejournal.com
это все кардинально меняет и упрощает
вам нужно написать query типа ...

Date: 2008-09-22 05:00 pm (UTC)
From: [identity profile] human2human.livejournal.com
...

SELECT * INTO new_table FROM
(
SELECT Table1.Pole1, Table1.Pole2, Table1.Pole3, ''
FROM Table1
UNION ALL
SELECT Table2.Pole1, Table2.Pole2, Table2.Pole3, Table2.Pole5
FROM Table2
);

и запустить

обязательное условие - количество выбираемых полей из обеих таблиц должно быть одинаковым, если поля выпадают, то заменяем на '' например.
ну и последовательность полей должна сохраниться

Date: 2008-09-22 05:07 pm (UTC)
From: [identity profile] human2human.livejournal.com
Это обходится просто. Пример:

Date: 2008-09-22 05:12 pm (UTC)
From: [identity profile] human2human.livejournal.com
Структура таблицы T1:
Pole1,Pole2,Pole3,Pole4

Структура таблицы T2:
Pole1,Pole5,Pole6,Pole7

В обеих таблицах есть Pole1, в первой нет Pole5,Pole6,Pole7, во второй нет Pole2,Pole3,Pole4.

Пишем:


SELECT * INTO new_table FROM
(
SELECT T1.Pole1, T1.Pole2, T1.Pole3, T1.Pole4, '', '', ''
FROM Table1
UNION ALL
SELECT T2.Pole1, '', '', '', T2.Pole5, T2.Pole6, T2.Pole7
FROM Table2
);


Идею уловили?

Date: 2008-09-22 07:31 pm (UTC)
From: [identity profile] marusidze.livejournal.com
Идею уловили, прожевали и проглотили. Именно то что надо. Спасибо ещё раз!

Date: 2008-09-22 07:36 pm (UTC)
From: [identity profile] human2human.livejournal.com
Еще раз пожалуйста!

Date: 2008-09-22 09:59 pm (UTC)
From: [identity profile] human2human.livejournal.com
На здоровье ! :)

Date: 2008-09-22 07:10 pm (UTC)
From: [identity profile] marusidze.livejournal.com
Даже если одного типа. Например ID = 1 в одной БЗ = Мама. Мыла. Раму. В другой ДБ под тем же самым ID = 1, в тех же самых полях: Папа.Читал. Газету. И когда query, соединённая по ID выдаст не обе записи, а только первую. Или вообще ничего. А как сделать так, что бы обе записи были в таблице?

Date: 2008-09-22 07:20 pm (UTC)
From: [identity profile] human2human.livejournal.com
В таблице 1 у Вас:

ID = "1", Pole1 = "Мама. Мыла. Раму"

В таблице 2 у Вас:

ID = "1", Pole1 = "Папа.Читал. Газету"


Какой результат Вам нужен?

Date: 2008-09-22 07:29 pm (UTC)
From: [identity profile] marusidze.livejournal.com
Вы уже ответили выше. У меня идентичная задача, как и у хозяина поста. Надо и Маму и Папу в таблице, хоть у них и ID совпадает. Но вы уже написали как это сделать. Премоного благодарна!!

Date: 2008-09-22 07:35 pm (UTC)
From: [identity profile] human2human.livejournal.com
Пожалуйста!

Date: 2008-09-22 05:22 pm (UTC)
From: [identity profile] human2human.livejournal.com
marusidze, Вам помогло?

Date: 2008-09-22 07:12 pm (UTC)
From: [identity profile] marusidze.livejournal.com
По крайней мере не помешало :) Спасибо! Сейчас буду читать вдумчиво и работать над собой.

Date: 2008-09-22 04:34 pm (UTC)
From: [identity profile] human2human.livejournal.com
Существует еще некая "MS Access Join Two Tables Software" (http://www.soft32.com/download_189974.html) - можно скачать триал - никогда не пробовал, за результат не ручаюсь

Date: 2008-09-22 05:07 pm (UTC)
From: [identity profile] human2human.livejournal.com
В свете последних новостей эта программка нам не подойдет - нам-то нужно соединить 2 таблицы (в итоге нужно получить таблицу с 1307 + 572 = 1879 записями) - а не объединить