Ограничение раскрывающегося спискаИсточник: Sgml
К сожалению, в Access'е не предусмотрена возможность формирования набора строк раскрывающегося списка с ограничением, накладываемым значением какого-либо другого поля записи. Такой список можно создать самостоятельно ценой лишних поля в источнике данных формы, элемента управления типа Text Box и пары строк кода в обработчике события Got Focus раскрывающегося списка: Private Sub MyCombo_GotFocus() Me.MyCombo.RowSource = "SELECT ID, Должность FROM Должности WHERE Фирма = " & Me!Фирма Me.MyCombo.Requery End Sub В источнике данных формы должны присутствовать и кодовое (из первичной таблицы - Сотрудники.Должность ) и текстовое (из присоединенного справочника - Должности.Должность ) представления поля Должность . Предполагается, что поле Фирма присутствует в обеих таблицах: именно по нему и происходит ограничение значений в списке. ALTER PROCEDURE СписокДолжностей (@Сотрудник Int = NULL) AS SELECT Сотрудники.*, Должности.Должность FROM Сотрудники LEFT OUTER JOIN Должности ON Сотрудники.Должность = Должности.ID WHERE (Сотрудники.ID = @Сотрудник) OR (@Сотрудник IS NULL) Здесь параметр @Сотрудник нужен для правильной работы этой процедуры как команды синхронизации (данный пример подразумевает работу с ADP в Access 2000/2002). В самой форме, кроме раскрывающегося списка, должен быть Text Box, связанный с полем Должности.Должность . Его нужно расположить поверх списка но так, чтобы кнопка раскрывания всё таки была видна. Первоначально источник строк списка должен быть пустым, что, кстати, благоприятно сказывается на скорости открытия формы. Разумеется, в режиме таблицы это работать не будет. Пример для Access'97 можно взять здесь. Пара замечаний: 1. Тот самый Text Box на форме должен быть заблокирован. Иначе фамилию в справочнике сотрудников можно случайно изменить. 2. При выборе другой фирмы надо очищать поле сотрудника. Это препятствует попаданию сотрудников в "чужие" фирмы. |