muneermohd9690 Ответов: 1

Ограничить выбор полей на основе критериев в ms access


у меня есть таблица сотрудников, в которой есть поле с именем department.я хочу, чтобы пользователи получили сообщение о том, что больше никаких сотрудников не может быть назначено в этот отдел, потому что достигнут определенный предел.пользователи будут использовать формы в ms access для вставки details.is можно ли это сделать с помощью vba?

Что я уже пробовал:

я создал запрос, который вычисляет текущее количество сотрудников в отделе.лимит, скажем,в настоящее время составляет 5, более 5 сотрудников в отделе не допускаются.я попробовал критерии проверки на уровне таблицы, но там не повезло, так как выражение неверно.

Gerry Schmitz

Вы запускаете запрос из формы, прежде чем разрешить сотруднику "вставить".

muneermohd9690

как это можно сделать?при необходимости я могу поделиться с вами базой данных access.не могли бы вы проводить меня, пожалуйста.

Gerry Schmitz

Просто покажите код, где вы делаете "вставку" из формы.

muneermohd9690

Возможность Сравнить Базе
Явный Параметр
Частная msaved как логическое



Частный суб btnsearch_Click()

Конец Подводной Лодки

Частная Суб Command198_Click()
msaved = истина
MsgBox "добавлена новая запись"
Меня.Обновление
Конец Подводной Лодки

Частная Суб Command199_Click()
Меня.Отменить
Метод docmd.BrowseTo acBrowseToForm, "empdetailsform", , , acFormAdd
Конец Подводной Лодки


Частный суб browse_Click()
Тусклый diag как офис.Классов filedialog
Тусклый элемент как вариант
Set diag = приложение.FileDialog(msoFileDialogFilePicker)
диагональ.AllowMultiSelect = False
диагональ.Title = "Пожалуйста, выберите лист excel"
диагональ.Фильтры.Четкий
диагональ.Фильтры.Добавьте "электронную таблицу excel", "*.xls,*.xlsx"
Если диаг.Тогда Покажи
Для каждого элемента в diag.Выбранные элементы
Меня.именем = товар
Следующий
Конец, Если
Конец Подводной Лодки



Private Sub Form_BeforeUpdate(отмена как целое число)
Если msaved = False, то
отмена = истина
Меня.Отменить
отмена = ложь
Конец, Если

Конец Подводной Лодки

Private Sub Form_Current()
msaved = ложь

Конец Подводной Лодки

Частная суб import_Click()
Dim FSO как новый файловый объект
Если Nz(Me.filename, "") = "", то
MsgBox "Пожалуйста, выберите файл."
Выход Из Субмарины
Конец, Если

Если ФСО.FileExists(Nz(Me.filename, "")) Затем
importexcelsheet.importexcelspreadsheet Me.filename, "empdetails"
Еще
MsgBox "файл не найден."
Конец, Если
имя файла.Ценность = ""
Конец Подводной Лодки

1 Ответов

Рейтинг:
1

muneermohd9690

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

Возможность Сравнить Базе
Явный Параметр
Глобальный hrcount как целое число
Глобальный itcount как целое число

Публичная функция GetCount(department As String) как целое число

hrcount = DCount("[идентификатор сотрудника]", "empdetails", "department='HR'")
itcount = DCount("[идентификатор сотрудника]", "empdetails", "department='IT'")
Конечная Функция

в форме, где вы хотите ограничить выбор, обновление или добавление новой записи, вы используете приведенный ниже код в зависимости от ваших критериев для отдела.для меня максимальное количество разрешенных сотрудников составляет 7

Private Sub Combo309_BeforeUpdate(отмена как целое число)

Если Combo309.Value = "HR", то
Вызов GetCount("HR")
Если hrcount = 7, то
MsgBox "вы уже достигли предела, выберите другой отдел или будете назначены"
отмена = истина
Меня.Combo309.Отменить
Конец, Если
Конец, Если
Если Combo309.Value = "IT", то
Вызов GetCount("IT")
Если itcount = 10, то
MsgBox "вы уже достигли предела, выберите другой отдел или будете назначены"
отмена = истина
Меня.Combo309.Отменить
Конец, Если
Конец, Если
Конец Подводной Лодки