У вас нет большого выбора здесь.
Вы, конечно, не можете удалить такие записи, поскольку, как вы указали, такие исторические данные, таким образом, будут повреждены.
ЕстьНесколько предложений, которые я могу придумать.
Прежде всего, добавьте столбец «активный» персонал на дисплей поля со списком.Затем, если пользователь меняет или выбирает из поля со списком, вы можете предотвратить (или предупредить), что они выбирают несуществующего сотрудника.Это будет отображать неактивных сотрудников, но теоретически позволит пользователям выбирать неактивных сотрудников - вы можете этого не хотеть.(но вы можете предупредить или запретить в элементе управления перед обновлением, если хотите предотвратить это).
Другой способ - динамическая загрузка поля со списком на основе текущей записи.Другими словами, если форма находится, скажем, в «режиме добавления» или поле со списком пустое, вы загружаете поле со списком с оператором выбора, который включает только StaffActive = True.
Выше может работатьдовольно хорошо, если вы ограничите свою «основную» форму одной записью (я склонен это делать).Я обычно представляю форму поиска, и ТОГДА всегда запускаю основную форму в ОДНОЙ записи.
Таким образом, в событии загрузки форм вы можете проверить, установлен ли идентификатор столбца персонала, и если он не активен, затем вы загружаете поле со списком со всеми сотрудниками.
Если в столбце есть активный член, то в форме при загрузке вы устанавливаете sql поля со списком только для активных членов.
Этот подход сложен, если вы разрешаете навигацию по записям.В этом случае вы должны поместить тестирование в текущее событие и таким образом установить sql поля со списком.Надеюсь, таблица со списком сотрудников будет «маленькой».
Третий способ заполнить поле со списком - использовать обратные вызовы.Это малоизвестный подход, и снова с текущим событием вы можете проверить, является ли идентификатор неактивным, и, таким образом, установить vatriable (вероятно, глобальный), который позволяет коду обратного вызова включать неактивный персонал.
Однако, если вы сохранили «id» в этом столбце записи о персонале, которая больше не существует, вы ничего не сможете сделать.(Возможно, я бы попытался повторно ввести удаленный персонал с правильными идентификаторами).
Таким образом, неясно, удалена ли запись персонала, или у вас есть какой-то «активный» флаг.Если у вас есть активный флаг, то вы можете «проверить», является ли «идентификатор персонала» из поля со списком неактивным персоналом, а затем вставить правильный sql в источник данных поля со списком, который включает неактивный персонал.
Полагаю, по соображениям производительности и некоторого уменьшения «мерцания», я бы, возможно, установил / отследил, что отображает текущее поле со списком, и ТОЛЬКО обновил бы поле со списком, если требуются члены статуса (неактивные).