mbhusty
@mbhusty

Как при выборе из выпадающего списка подставлять значение в Access?

Есть таблица Сотрудники с полями ФИО и Должность.
На форме есть выпадающий список (РуководительФИО) и поле (РуководительДолжность)
Как сделать при выборе ФИО авто подстановку соответствующей должности?

Нашел много примеров, но не могу разобраться в синтаксисе.

Вот что набросал
Private Sub РуководительФИО_AfterUpdate()
[РуководительФИО].Value = DLookup("[РуководительДолжность]", "[Сотрудники]", _
"[ФИО]='" & [Должность] & "'")
End Sub
  • Вопрос задан
  • 7383 просмотра
Пригласить эксперта
Ответы на вопрос 1
@art_karetnikov
Лучший мой проект: Мобильный банк Сбербанка РФ.
Доброго. Коллега, ну все ж просто. Смотрите, искать по фамилии не очень разумно, искать надо по Id.

Значит, что делаем. Делаем источником данных для комбика запрос. Я буду писать как привык, а вы сообразите под ваши реалии переделать. Однако рекомендую таблицы делать с префиксом tbl_ и юзать именно английские названия - пригодится.

Select Id_Staff, StaffName from tbl_Staff -- вот тут мы с вами получили Id сотрудника и его фамилию
Теперь комбик делаем с двумя колонками, вот так: 0;3 - тогда id сотрудника будет скрыто и ничем не отличаться от привычного комбика - кроме того, что значения в нем будут ограничены списком.

Едем дальше. У вас должна быть связь между таблицами, я это делаю промежуточной таблицей tbl_StaffPosition.
Есть у вас такая таблица? Задавая вопрос, очень неплохо прилагать к нему структуру хотя бы в виде скрина.

В ней три Id -
Id_StaffPosition - первичный ключ
Id_Staff - ссылка на сотрудника
Id_Position - ссылка на должность.
DataPositionStart -- начало работы в должности, недопустим Null
DataPositionFinish -- окончание работы в должности, допустим Null
IsWorker -- признак, что он работает сейчас. И этот признак у вас должен быть уникальным индексом с Id_Position вместе, исходя из: один сотрудник не может занимать сразу две должности.

Далее вы делаете запрос вида:

select p.PositionName from tbl_Position p -- вот это название должности
join tbl_StaffPosition sp on p.Id_Position = sp.Id_Position -- это линк с таблицей должностей.
where sp.Id_Staff = cmbStaff.Column(0) -- значение из комбобокса.

А уже результат подставляете в ваш текстбокс.

Если не сделаете отдельную таблицу со временем в должности - наступите на грабли. Грабли такие:

сейчас он шеф транспортного отдела, а завтра его перевели в старшие дворники. Если у вас его должность будет тупо обновлена в таблице - то все ранее подписанные документы будут от старшего дворника.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы