Доступ: Как реализовать присоединение контакта к поездке?

(Отношения таблиц)

Я разрабатываю базу данных туристического агентства, и у меня есть таблица контактов (людей), таблица поездок и таблица соединений people_has_trips. "Поездка" относится к таблице, идентичность которой в основном связана с отношениями "многие ко многим" с различными дополнительными элементами путешествия, такими как гостиница, рейс и т. Д. (У меня есть сомнения по поводу этой структуры, но это проблема для другого вопроса).

В любом случае, я нахожусь на ранних этапах разработки формы для поездки, которая почти полностью будет состоять из подчиненных форм, связанных с таблицами соединений. Проблема, которая доставляла мне наибольшие трудности, заключается в том, как добавить контакт в поездку. Я новичок в доступе, и до сих пор я заполнял такие таблицы, используя поля со списком с автозаполнением, но таблица контактов содержит более 100000 записей, и поэтому какая-то функция поиска была бы разумной.

Вот что у меня есть на данный момент. Эта подчиненная форма основана на таблице people_has_trips и в настоящее время ограничена отображением существующих записей. Я отключил все поля, чтобы не разрешать редактирование записей людей, но я несколько озадачен, как обрабатывать добавление других людей. При моих ограниченных знаниях Access мне показалось, что наиболее логичным решением было наличие кнопки для открытия формы, которая позволяла бы искать людей и, возможно, добавлять новых людей.

Теперь у меня есть полностью реализованная форма для ввода новых людей (показанная ниже), но у нее нет никаких реальных функций поиска, кроме встроенных фильтров Access. Итак, моя подчиненная форма в настоящее время открывает Люди и... больше ничего не делает. Откровенно говоря, я понятия не имею, что делать дальше. Должен ли я разработать вторую форму для поиска людей или встроить функцию поиска в основную форму "Люди", что, вероятно, мне все равно стоит сделать? Если да, то как? И после выполнения любого из этих действий, как мне затем заполнить people_has_trips? Единственный ответ, который я могу придумать, заключается в том, что пользователь нажимает кнопку, чтобы открыть Люди, находит человека, которого он хочет добавить, а затем вручную вводит первичный ключ в подчиненную форму, что, безусловно, не оптимально.

Вышеупомянутая форма для регистрации людей

Я готов поспорить, что решение - это команды VBA. Я недавно нашел время, чтобы изучить VBA, и мне это немного удобнее, но я просто не знаю, с чего начать с этой проблемы. Я уверен, что смогу адаптировать и применять идеи и код VBA других людей, но я не могу найти ветку по этой конкретной проблеме, чтобы сделать это! Я предполагаю, что причина, по которой я не могу найти никакой помощи по этой проблеме, заключается в том, что это настолько очевидно, что никто еще не задавал этот вопрос или мне не хватает навыков Google. В любом случае, я был бы счастлив столкнуться с проблемой в реализации решения. Спасибо всем за помощь!

1 ответ

Решение

Вам нужно сосредоточиться на своей основной проблеме и, насколько я понял, вы хотите выполнить поиск и добавить "пользователей / контакты" в форму "Люди в этой поездке".

Да, поля со списком могут занимать время загрузки 100 тыс. Строк, и это не совсем удобно для поиска.

В форме "Люди в этой поездке" вы можете:

иметь текстовое поле => для поиска
иметь поле со списком => показывать результат поиска
[Search] [Add] [Clear] кнопки

Теоретически,

  1. кнопка поиска выполняет поиск на вашем TContactstable и назначает результаты в поле со списком.
    что-то типа SELECT PersonId, FirstName, LastName From Prople WHERE firstName like @keyword OR lastNAme like @keyword ... other fields
  2. Пользователь выбирает конкретный результат из поля со списком.
  3. Кнопка Добавить затем выполняет операцию SQL, добавляя выбранного пользователя в вашу таблицу соединений и обновляя таблицу соединений.
    что-то типа:INSERT INTO people_has_trips (people_personId, trips_tripId) values (@selectedPersonId, @tripId); с последующим requery

Это всего лишь теория, вам нужно что-то попробовать и сузить до конкретной проблемы. В противном случае ваш вопрос может быть помечен как слишком общий.

Другие вопросы по тегам