| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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, спасибо, общая идея понятна. Не совсем понял как выполнить 2-й пункт. Например, есть таблицы "Авторы" и "Журналы", у них общие поля "Авторы.ИД" (счётчик) и "Журналы.ИДАвтора". Допустим, в таблице "Авторы" есть 5 записей. Теперь нужно проставить Номера во временной таблице в поле ИД, начиная с 6-ки. Это делать вручную? Для выполнения 3-го пункта предполагаю использовать запрос на добавление, это правильно? Также прошу пояснить 4-й пункт: какую таблицу проверять, временную или существующую, или сравнивать записи между временной и существующей? И я ещё не дошёл |
| Автор: Karam_S 20.1.2010, 17:44 |
| Итак во временной таблице создаю поле идАвтора. Прошу пояснить с помощью какого запроса можно заполнить значения этого поля, начиная, например, с "6"? Также прошу пояснить с помощью какой опции можно сравнить содержимое определённых полей между временной и существующей таблицами? |
| Автор: Akina 20.1.2010, 18:06 | ||
Если потом на эту таблицу натравить Аксессовский мастер анализа таблиц - он тебе посоветует, что сделать, и сделает то, на что ты дашь добро... |
| Автор: bopoha 22.1.2010, 12:28 | ||||||
Неужели? Анализатор атблиц посоветует индексы добавить и привести к 3-ей форме, если я не ошибаюсь.
См. запросы на обновления.
Опять же запрос, который вернет похожие записи. см. мастер запросов, там есть такой тип зпросов. |
| Автор: Akina 22.1.2010, 14:30 | ||
ТС больше и не требуется. |
| Автор: Karam_S 22.1.2010, 16:34 |
| Akina, bopoha, Спасибо за советы! На выходных буду пробовать, что получиться отпишу. |