Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Импорт из Exel с сохранением связей


Автор: Karam_S 16.1.2010, 14:47
Такая проблема уже поднималась http://forum.vingrad.ru/topic-29083.html, но не получила разрешения.
У меня следующая ситуация.

Есть таблица Exel, где собраны записи об опубликованных статьях в журналах за разные годы.
Столбцы: фамилия 1, фамилия 2, фамилия 3, название статьи, название журнала, год, номер, раздел, тема.
 
Создал базу Access, где данные распределил по 3-м таблицам:
Авторы, Журналы, Статьи.
Связал их как показано на прилагаемом рисунке.

Не знаю (и не нашёл ответа), как организовать умный импорт из Exel с сохранением связей данных.
Стандартный способ импорта копирует записи в одну таблицу.

Хотелось бы организовать импорт так, чтобы:
1. данные из столбцов "фамилия 1" скопировались в таблицу "Авторы"; "название статьи" - "Статьи"; "название журнала" - "Журналы"...
2. новые записи из таблиц Авторы, Журналы, Статьи были увязаны друг с другом по ключевым полям. 

Есть версия. Указанный импорт начать с того, чтобы явно задать в таблице Exel номерацию строк и использовать в качестве id, который копировать в каждую из таблиц.
Но в этом решении есть другая проблема - при подготовке множества таблиц Exel нужно будет следить, чтобы номера строк не совпадали.
В общем, прошу помощи. 

Автор: bopoha 16.1.2010, 15:14
Karam_S, я в свое время собаку съел с этими импортами.

Нам понадобиться временая таблица, которая будет содержать текстовые поля из Excel файла и кодовые поля, для значений из справочников.

Алгоритм:
1. Импортируется файл во временную таблицу.
2. По справочникам ищутся текстоввые значения и им проставляются соответсвующие id-и.
3. Не обработанные текстовые значения либо добавляются в справочники автоматически, либо отдаются на откуп пользователя.
4. Проверка дубликатов в сущесвующей бд и запрос у пользователя что с ними делать.
5. Копирвоание данных из верменной таблицы в постоянную.

Вот и все.

Автор: Karam_S 16.1.2010, 16:24
bopoha,
спасибо, общая идея понятна. smile 

Не совсем понял как выполнить 2-й пункт.
Например, есть таблицы "Авторы" и "Журналы", у них общие поля "Авторы.ИД" (счётчик) и "Журналы.ИДАвтора".
Допустим, в таблице "Авторы" есть 5 записей. 
Теперь нужно проставить Номера во временной таблице в поле ИД, начиная с 6-ки. Это делать вручную?

Для выполнения 3-го пункта предполагаю использовать запрос на добавление, это правильно?

Также прошу пояснить 4-й пункт: какую таблицу проверять, временную или существующую, или сравнивать записи между временной и существующей? 
И я ещё не дошёл  smile , какая есть для этого опция?

Автор: bopoha 18.1.2010, 19:02
Цитата(Karam_S @  16.1.2010,  16:24 Найти цитируемый пост)
Номера во временной таблице в поле ИД

уж лучше идАвтора назвать.

Цитата(Karam_S @  16.1.2010,  16:24 Найти цитируемый пост)
Это делать вручную?

Программно выполнить запрос.


Цитата(Karam_S @  16.1.2010,  16:24 Найти цитируемый пост)

Для выполнения 3-го пункта предполагаю использовать запрос на добавление, это правильно?

Смотрите по вашей ситуации. Очень часто приходят наименования с ошибками.

Цитата(Karam_S @  16.1.2010,  16:24 Найти цитируемый пост)
сравнивать записи между временной и существующей? 

Вот это.

Цитата(Karam_S @  16.1.2010,  16:24 Найти цитируемый пост)
И я ещё не дошёл  smile , какая есть для этого опция? 

Для чего?

Автор: Karam_S 20.1.2010, 17:44
Итак во временной таблице создаю поле идАвтора.
Прошу пояснить с помощью какого запроса можно заполнить значения этого поля, начиная, например, с "6"?
Также прошу пояснить с помощью какой опции можно сравнить содержимое определённых полей между временной и существующей таблицами?

Автор: Akina 20.1.2010, 18:06
Цитата(Karam_S @  16.1.2010,  15:47 Найти цитируемый пост)
Не знаю (и не нашёл ответа), как организовать умный импорт из Exel с сохранением связей данных.
Стандартный способ импорта копирует записи в одну таблицу.

Если потом на эту таблицу натравить Аксессовский мастер анализа таблиц - он тебе посоветует, что сделать, и сделает то, на что ты дашь добро...

Автор: bopoha 22.1.2010, 12:28
Цитата(Akina @  20.1.2010,  18:06 Найти цитируемый пост)
Если потом на эту таблицу натравить Аксессовский мастер анализа таблиц 

Неужели? Анализатор атблиц посоветует индексы добавить и привести к 3-ей форме, если я не ошибаюсь.


Цитата(Karam_S @  20.1.2010,  17:44 Найти цитируемый пост)
Прошу пояснить с помощью какого запроса можно заполнить значения этого поля, начиная, например, с "6"?

См. запросы на обновления.

Цитата(Karam_S @  20.1.2010,  17:44 Найти цитируемый пост)
Также прошу пояснить с помощью какой опции можно сравнить содержимое определённых полей между временной и существующей таблицами? 

Опять же запрос, который вернет похожие записи. см. мастер запросов, там есть такой тип зпросов.

Автор: Akina 22.1.2010, 14:30
Цитата(bopoha @  22.1.2010,  13:28 Найти цитируемый пост)
 Анализатор атблиц посоветует индексы добавить и привести к 3-ей форме, если я не ошибаюсь.

ТС больше и не требуется.

Автор: Karam_S 22.1.2010, 16:34
Akina, bopoha, 
Спасибо за советы! На выходных буду пробовать, что получиться отпишу.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)