Заполнение данных в нескольких каскадных раскрывающихся списках в Access 2007 - PullRequest
2 голосов
/ 24 апреля 2010

Мне было поручено разработать систему временного отслеживания клиентов в MS Access 2007 (шеешь!). Таблицы и отношения были успешно установлены. Но я сталкиваюсь с небольшой проблемой, пытаясь спроектировать форму ввода данных для одной таблицы ... Сначала немного пояснений.

Экран содержит 3 раскрывающихся списка (кроме других полей).

1-й выпадающий список

Первый выпадающий список (cboMarket) представляет Рынок , позволяющий пользователям выбирать между 2 вариантами:

  • внутренний
  • Международный

Поскольку первый выпадающий список содержит только 2 элемента, я не стал готовить для него таблицу. Я добавил их как предварительно определенные элементы списка.

2-й выпадающий список

Как только пользователь делает выбор, второй выпадающий список (cboLeadCategory) загружает список категорий потенциальных клиентов, а именно: ярмарки и выставки, агенты, реклама в прессе, онлайн-реклама и т. Д. Различные наборы ведущих категорий используются для 2 рынков. Следовательно, это поле зависит от 1-го.

Структура связанной таблицы с именем Lead_Cateogries для второго комбо:

ID Autonumber
Lead_Type TEXT <- actually a list that takes up Domestic or International
Lead_Category_Name TEXT

3-й выпадающий список

А исходя из выбора категории во 2-й, третья (cboLeadSource) должна отображать предварительно определенный набор источников отведений, принадлежащих к определенной категории.

Таблица с именем Lead_Sources и структурой:

ID Autonumber
Lead_Category NUMBER <- related to ID of Lead Categories table
Lead_Source TEXT

Когда я делаю выбор в 1-м раскрывающемся списке, вызывается событие AfterUpdate , которое указывает 2-му раскрывающемуся списку на загрузку содержимого:

Private Sub cboMarket_AfterUpdate()
    Me![cboLead_Category].Requery
End Sub

Источник строки 2-й комбинации содержит запрос:

SELECT Lead_Categories.ID, Lead_Categories.Lead_Category_Name
FROM Lead_Categories
WHERE Lead_Categories.Lead_Type=[cboMarket]
ORDER BY Lead_Categories.Lead_Category_Name;

Событие AfterUpdate второго комбо:

Private Sub cboLeadCategory_AfterUpdate()
    Me![cboLeadSource].Requery
End Sub

Источник строки 3-й комбинации содержит:

SELECT Leads_Sources.ID, Leads_Sources.Lead_Source
FROM Leads_Sources
WHERE [Lead_Sources].[Lead_Category]=[Lead_Categories].[ID]
ORDER BY Leads_Sources.Lead_Source;

Проблема

Когда я выбираю Тип рынка из cboMarket, вторая комбинированная категория cboLead загружает соответствующие Категории без заминки.

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

альтернативный текст http://img163.imageshack.us/img163/184/enterparamprompt.png

Когда я вводю что-либо в это приглашение (действительные или недействительные данные), я получаю еще одно приглашение:

альтернативный текст http://img52.imageshack.us/img52/8065/enterparamprompt2.png

Почему это происходит? Почему 3-ий ящик не загружает имена источников по желанию. Кто-нибудь может пролить свет на то, что я делаю неправильно?

Спасибо, м ^ е

=============================================== ====

UPDATE

Я обнаружил сбой в запросе для 3-го комбинированного списка. Он не совпадает со значением второго комбинированного списка. Я исправил это, и теперь запрос находится в:

SELECT Leads_Sources.ID, Leads_Sources.Lead_Source
FROM Leads_Sources
WHERE (((Leads_Sources.Lead_Category)=[cboLead_Category]))
ORDER BY Leads_Sources.Lead_Source;

Эти неприятные подсказки Enter Param УЖЕ !!! Тем не менее, третьи комбо до сих пор упорно отказывается загружать какое-либо значение. Есть идеи?

1 Ответ

0 голосов
/ 24 апреля 2010

Неважно. Нашел исправление. Свойство BoundColumn второго комбинированного списка не было установлено в правильный столбец. Следовательно, значения выбора в нем были неправильными, и 3-я комбинация не смогла правильно ссылаться на связанную таблицу (с правильным индексом).

Работа сделана:)

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

...