Домашняя страница Undo Do Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как связать несколько колонок в таблице с другой таблицей? - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Мир MS Excel » Вопросы и решения » Excel и другие приложения » Access » Как связать несколько колонок в таблице с другой таблицей?
Как связать несколько колонок в таблице с другой таблицей?
user0 Дата: Вторник, 20.12.2016, 14:13 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
Доброго времени,

Есть таблица Travel, заполнять которую планируется через форму где выбирается человек из списка, находятся все связаные с ним поездки и добавляются новые.

Подскажите, пожалуйста, несколько моментов:
1) Как связать две колонки (LocationID_from и LocationID_to) в Travel c таблицей Location? Подбовал связать one-to-many сделать из Location в Travel (вроде логично для меня выглядело это :) но аксес не дает такое сделать). Подозреваю что надо many-to-many, но не могу осилить как правильно это оформить, не двумя же одинаковыми таблицами LocationFrom и LocationTo.

1.1) как сделать (LocationID_from и LocationID_to) выпадающими списками на основании Location.Location (который нельзя было бы модифицировать из Travel)?



2) В форме Travel subform отображаются только те записи из Travel, у которых есть значение в колонке ScheduleID (13 записей). Соответственно в основной форме Travel Arrangement при выборе определенных людей не отображатся их поездки, если не указан ScheduleID. Как сделать чтобы отображались все 24 записи?

ps. по второму вопросу, не уверен, стоит ли создавать новую тему, если надо то намекните, удалю здесь, и создам новую..
К сообщению приложен файл: Travel.zip (33.9 Kb)


Сообщение отредактировал user0 - Вторник, 20.12.2016, 16:30
 
Ответить
СообщениеДоброго времени,

Есть таблица Travel, заполнять которую планируется через форму где выбирается человек из списка, находятся все связаные с ним поездки и добавляются новые.

Подскажите, пожалуйста, несколько моментов:
1) Как связать две колонки (LocationID_from и LocationID_to) в Travel c таблицей Location? Подбовал связать one-to-many сделать из Location в Travel (вроде логично для меня выглядело это :) но аксес не дает такое сделать). Подозреваю что надо many-to-many, но не могу осилить как правильно это оформить, не двумя же одинаковыми таблицами LocationFrom и LocationTo.

1.1) как сделать (LocationID_from и LocationID_to) выпадающими списками на основании Location.Location (который нельзя было бы модифицировать из Travel)?



2) В форме Travel subform отображаются только те записи из Travel, у которых есть значение в колонке ScheduleID (13 записей). Соответственно в основной форме Travel Arrangement при выборе определенных людей не отображатся их поездки, если не указан ScheduleID. Как сделать чтобы отображались все 24 записи?

ps. по второму вопросу, не уверен, стоит ли создавать новую тему, если надо то намекните, удалю здесь, и создам новую..

Автор - user0
Дата добавления - 20.12.2016 в 14:13
Pelena Дата: Вторник, 20.12.2016, 14:40 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19181
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
Здравствуйте.
Если таблица Location нужна только для создания полей со списками, то необязательно связывать её с Travel. Если же всё-таки нужно связать, то связываем ключевое поле LocationID с полями LocationID_from и LocationID_to
При создании второй связи Access ругнётся, что типа связь уже существует, но Вы будьте настойчивы и на схеме появится второй экземпляр таблицы Location с нужной связью.

По второму вопросу - надо изменить параметры объединения
К сообщению приложен файл: 6009343.zip (35.1 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЗдравствуйте.
Если таблица Location нужна только для создания полей со списками, то необязательно связывать её с Travel. Если же всё-таки нужно связать, то связываем ключевое поле LocationID с полями LocationID_from и LocationID_to
При создании второй связи Access ругнётся, что типа связь уже существует, но Вы будьте настойчивы и на схеме появится второй экземпляр таблицы Location с нужной связью.

По второму вопросу - надо изменить параметры объединения

Автор - Pelena
Дата добавления - 20.12.2016 в 14:40
user0 Дата: Вторник, 20.12.2016, 16:38 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
Спасибо, то что нужно.

А я-то думал, зачем там есть возможность дубликаты добавлять. Как все просто оказывается.. )
 
Ответить
СообщениеСпасибо, то что нужно.

А я-то думал, зачем там есть возможность дубликаты добавлять. Как все просто оказывается.. )

Автор - user0
Дата добавления - 20.12.2016 в 16:38
user0 Дата: Среда, 21.12.2016, 15:32 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
Ковыряю форму дальше, и возникло еще несколько вопросов по данному примеру, подскажите, пожалуйста:

1) Я правильно понимаю, что если использовать таблицу Location для комбобоксов не связывая ее с Travel, то в Travel будут храниться не ID, а сами названия городов без возможности потом массово изменить значения что-либо в Location? Я к тому что, какие профиты у данного способа, зачем так делать, раз уж мы в аксесе и нам бесплатно дана возможность залинковать таблицы (от этого и размер БД выиграет).

2) Как добавить комбобокс к колонке flight в Travel subform, чтобы он брал значения из Schedule.Flight?
Делаю по аналогии с LocationID / LocationID_from, но если просто в Control Source добавить Flight, а Row Source в Schedule то в комбобоксе отображается только ScheduleID. Причем нельзя задать значения для пустых ячеек, только изменить заполненые.
 
Ответить
СообщениеКовыряю форму дальше, и возникло еще несколько вопросов по данному примеру, подскажите, пожалуйста:

1) Я правильно понимаю, что если использовать таблицу Location для комбобоксов не связывая ее с Travel, то в Travel будут храниться не ID, а сами названия городов без возможности потом массово изменить значения что-либо в Location? Я к тому что, какие профиты у данного способа, зачем так делать, раз уж мы в аксесе и нам бесплатно дана возможность залинковать таблицы (от этого и размер БД выиграет).

2) Как добавить комбобокс к колонке flight в Travel subform, чтобы он брал значения из Schedule.Flight?
Делаю по аналогии с LocationID / LocationID_from, но если просто в Control Source добавить Flight, а Row Source в Schedule то в комбобоксе отображается только ScheduleID. Причем нельзя задать значения для пустых ячеек, только изменить заполненые.

Автор - user0
Дата добавления - 21.12.2016 в 15:32
Pelena Дата: Среда, 21.12.2016, 15:54 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 19181
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
1) не правильно. Храниться будут ID. Посмотрите таблицу Travel
2) посмотрите, как сделано для LocationID_from в свойствах на вкладке Макет Число присоединенных столбцов 2, ширина столбца 0


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение1) не правильно. Храниться будут ID. Посмотрите таблицу Travel
2) посмотрите, как сделано для LocationID_from в свойствах на вкладке Макет Число присоединенных столбцов 2, ширина столбца 0

Автор - Pelena
Дата добавления - 21.12.2016 в 15:54
Матраскин Дата: Среда, 21.12.2016, 19:49 | Сообщение № 6
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
user0, я решил тоже что нить написать.

1) создавать 2 одинаковых таблицы - это что то не то, я бы предложил в Travel создать ключ LocationID, а поля LocationID_from и LocationID_to перенести в таблицу LocationID.
А не плодить лишнюю таблицу
1.1) отпадёт сам собой


в интернете опять кто-то не прав

Сообщение отредактировал Матраскин - Среда, 21.12.2016, 19:50
 
Ответить
Сообщениеuser0, я решил тоже что нить написать.

1) создавать 2 одинаковых таблицы - это что то не то, я бы предложил в Travel создать ключ LocationID, а поля LocationID_from и LocationID_to перенести в таблицу LocationID.
А не плодить лишнюю таблицу
1.1) отпадёт сам собой

Автор - Матраскин
Дата добавления - 21.12.2016 в 19:49
Pelena Дата: Среда, 21.12.2016, 19:56 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 19181
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
Цитата Матраскин, 21.12.2016 в 19:49, в сообщении № 6 ()
создавать 2 одинаковых таблицы

Таблица одна, просто на схеме данных появляется её фантом


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
Цитата Матраскин, 21.12.2016 в 19:49, в сообщении № 6 ()
создавать 2 одинаковых таблицы

Таблица одна, просто на схеме данных появляется её фантом

Автор - Pelena
Дата добавления - 21.12.2016 в 19:56
user0 Дата: Четверг, 22.12.2016, 06:25 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
Pelena
1) >не правильно. Храниться будут ID. Посмотрите таблицу Travel.
Так ведь Travel связана с Location.. Хм, удалил связь, все равно работает.

2) Да, так работает, спасибо.
По поводу невозможности записи в пустые ячейки (Can't enter data into blank field on "one" side of outer join) это я какую-то ересь делал, вроде не ту таблицу задавал в Control Source.

Матраскин
Ваше сообщение опять подтолкнуло к идее добавить 3ий лист Route, где создать все возможные пары для from-to, to-from (города берутся из Location), чтобы сразу отсеять невозможные поездки. Тогда в Travel действительно можно будет оставить только ссылку на 1 ключ из Route. Эта идея была связана с зависимым выпадающим списком (например в форме выбран в поле from один город, тогда в поле to можно будет выбрать только его пары), но пока до этого еще не дошло, если это вообще так делается ;)

Хотя теперь уже в Route опять же будут две колонки from и to (если конечно не записывать пары в одну колонку через дефис from-to).

Так, на всякий, чтобы не смущало - Schedule это просто дополнительная не обязательная информация о номере рейса, например если это перелет.

--

Подскажите, пожалуйста, еще по общей структуре.
Как правильней делать,
a) На каждую таблицу делать query (где например имя+фамилия в одном поле) и потом уже основе этих запросов строить формы.
b) Делать формы сразу на основе таблиц. Комбинировать поля во встроенных в форму запросах.
c) Можно ли в формах использовать и таблицы и запросы одновременно? Просто я попытался так сделать, но сказало что нельзя одновременно использовать таблицы и запросы на них основанные. Тут я просто криворук и надо учитывать все необходимые поля в запросе?


Сообщение отредактировал user0 - Четверг, 22.12.2016, 08:16
 
Ответить
СообщениеPelena
1) >не правильно. Храниться будут ID. Посмотрите таблицу Travel.
Так ведь Travel связана с Location.. Хм, удалил связь, все равно работает.

2) Да, так работает, спасибо.
По поводу невозможности записи в пустые ячейки (Can't enter data into blank field on "one" side of outer join) это я какую-то ересь делал, вроде не ту таблицу задавал в Control Source.

Матраскин
Ваше сообщение опять подтолкнуло к идее добавить 3ий лист Route, где создать все возможные пары для from-to, to-from (города берутся из Location), чтобы сразу отсеять невозможные поездки. Тогда в Travel действительно можно будет оставить только ссылку на 1 ключ из Route. Эта идея была связана с зависимым выпадающим списком (например в форме выбран в поле from один город, тогда в поле to можно будет выбрать только его пары), но пока до этого еще не дошло, если это вообще так делается ;)

Хотя теперь уже в Route опять же будут две колонки from и to (если конечно не записывать пары в одну колонку через дефис from-to).

Так, на всякий, чтобы не смущало - Schedule это просто дополнительная не обязательная информация о номере рейса, например если это перелет.

--

Подскажите, пожалуйста, еще по общей структуре.
Как правильней делать,
a) На каждую таблицу делать query (где например имя+фамилия в одном поле) и потом уже основе этих запросов строить формы.
b) Делать формы сразу на основе таблиц. Комбинировать поля во встроенных в форму запросах.
c) Можно ли в формах использовать и таблицы и запросы одновременно? Просто я попытался так сделать, но сказало что нельзя одновременно использовать таблицы и запросы на них основанные. Тут я просто криворук и надо учитывать все необходимые поля в запросе?

Автор - user0
Дата добавления - 22.12.2016 в 06:25
Матраскин Дата: Четверг, 22.12.2016, 15:28 | Сообщение № 9
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
Pelena, а можете рассказать, как работает этот "фантом"?

как я вижу : одна таблица свзязывается по Travel.LocationID_from к Location_1.LocationID, вторая Travel.LocationID_to к Location_2.LocationID. Но в Location_1. и в Location_2 одинаковые данные, и не ясно как одновременно ключ может подходить к 2ум разным полям. >(

user0, если не можете перетащить поля в таблицу Location, то можно сджоинить по 2ум полям сразу(составным ключом)

a,b,с) вы говорите о агрегационных таблицах, их делают в случае когда источник таблица крайне большая(долго работает ваш запрос) или надо сделать много вычислений(опять же, боремся с долгой работой запросов). но эту таблицу придётся всёравно пересчитывать в какой то момент времени(как решите). Я думаю у вас там всё просто и можно всё считать налету


в интернете опять кто-то не прав
 
Ответить
СообщениеPelena, а можете рассказать, как работает этот "фантом"?

как я вижу : одна таблица свзязывается по Travel.LocationID_from к Location_1.LocationID, вторая Travel.LocationID_to к Location_2.LocationID. Но в Location_1. и в Location_2 одинаковые данные, и не ясно как одновременно ключ может подходить к 2ум разным полям. >(

user0, если не можете перетащить поля в таблицу Location, то можно сджоинить по 2ум полям сразу(составным ключом)

a,b,с) вы говорите о агрегационных таблицах, их делают в случае когда источник таблица крайне большая(долго работает ваш запрос) или надо сделать много вычислений(опять же, боремся с долгой работой запросов). но эту таблицу придётся всёравно пересчитывать в какой то момент времени(как решите). Я думаю у вас там всё просто и можно всё считать налету

Автор - Матраскин
Дата добавления - 22.12.2016 в 15:28
Pelena Дата: Четверг, 22.12.2016, 16:03 | Сообщение № 10
Группа: Админы
Ранг: Местный житель
Сообщений: 19181
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
Цитата Матраскин, 22.12.2016 в 15:28, в сообщении № 9 ()
как работает этот "фантом"?

Это чисто визуальное представление, чтобы связать одно поле с двумя разными полями в другой таблице

Travel.LocationID_from - это, например, поле Откуда вылет
Travel.LocationID_to - это Куда вылет
Списки аэропортов для этих двух полей одинаковы, поэтому берутся из одной таблицы.


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
Цитата Матраскин, 22.12.2016 в 15:28, в сообщении № 9 ()
как работает этот "фантом"?

Это чисто визуальное представление, чтобы связать одно поле с двумя разными полями в другой таблице

Travel.LocationID_from - это, например, поле Откуда вылет
Travel.LocationID_to - это Куда вылет
Списки аэропортов для этих двух полей одинаковы, поэтому берутся из одной таблицы.

Автор - Pelena
Дата добавления - 22.12.2016 в 16:03
Матраскин Дата: Четверг, 22.12.2016, 18:12 | Сообщение № 11
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
Pelena, ааа... никакой связи нет, но она есть, я понял. Спасибо за пояснение.

сделал себе тестовый пример... и вообщем чтобы связать с локейшеном нашу таблицу тревел приходиться делать так. Эти сабселекты обычно выходят боком. Я бы перепроектировал архитектуру
[vba]
Код
Select l.id, l.name as nameFROM, q.nameTo from (SELECT t.id, l.name as nameTo, t.L_from_id From L l, T t where l.id = t.l_to_id) q, L l where l.id = q.L_from_id;
[/vba]
К сообщению приложен файл: New_Microsoft_A.zip (35.9 Kb)


в интернете опять кто-то не прав

Сообщение отредактировал Матраскин - Четверг, 22.12.2016, 19:04
 
Ответить
СообщениеPelena, ааа... никакой связи нет, но она есть, я понял. Спасибо за пояснение.

сделал себе тестовый пример... и вообщем чтобы связать с локейшеном нашу таблицу тревел приходиться делать так. Эти сабселекты обычно выходят боком. Я бы перепроектировал архитектуру
[vba]
Код
Select l.id, l.name as nameFROM, q.nameTo from (SELECT t.id, l.name as nameTo, t.L_from_id From L l, T t where l.id = t.l_to_id) q, L l where l.id = q.L_from_id;
[/vba]

Автор - Матраскин
Дата добавления - 22.12.2016 в 18:12
user0 Дата: Пятница, 23.12.2016, 05:00 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
даа.. чувствую что стоит обмазаться книжками по sql. А так хотелось обойтись графическим интерфейсом.
 
Ответить
Сообщениедаа.. чувствую что стоит обмазаться книжками по sql. А так хотелось обойтись графическим интерфейсом.

Автор - user0
Дата добавления - 23.12.2016 в 05:00
Мир MS Excel » Вопросы и решения » Excel и другие приложения » Access » Как связать несколько колонок в таблице с другой таблицей?
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!