Здесь:
• выражение – определяет поле, для которого производится подсчет значений. Данный аргумент может задаваться строковым выражением, определяющим поле в таблице или запросе, или представлять выражение, задающее выполнение вычислений над данными, содержащимися в поле. Допускается использовать в аргументе выражение имя поля в таблице или элемента управления в форме, константы, а также имя встроенной или определяемой пользователем функции. Не допускается в аргументе выражение других статистических функций по подмножеству или статистических функций SQL;
• набор – строковое выражение, которое определяет набор записей, образующих подмножество. Может представлять имя таблицы или запроса;
• условие – необязательное строковое выражение, ограничивающее диапазон данных, для которых подсчитывается число значений. Например, аргумент условие часто является эквивалентом предложения WHERE инструкции SQL, но без ключевого слова WHERE. Если аргумент условие опущен, DCount выполняет расчеты над полем, заданным в аргументе выражение, для всего набора записей. Любое поле, указанное в аргументе условие, должно принадлежать подмножеству, заданному аргументом набор; в противном случае функция DCount возвращает значение Null.
С помощью функции DCount подсчитывается количество записей в подмножестве, когда не требуется использовать конкретные значения. Хотя в аргументе выражение можно указать любые расчеты, DCount всегда возвращает число записей.
В нашем случае выражение – это имя поля "[Название фирмы]". (Вспомним: когда в тексте строки есть пробелы, она заключается в квадратные скобки. Кавычками полагается обрамлять текстовую строку.) Значением аргумента набор является форма Фирмы, а аргумента условие – "[Название фирмы] = Forms![Фирмы]![Haзвaниe фирмы]". Последнее означает, что здесь сравнивается содержимое поля текущей записи с содержимым поля открытой формы (в правой части выражения Forms – класс форм, [Фирмы] – имя какой-либо фирмы из этого класса, [Название фирмы] – конкретное поле формы). Восклицательные знаки указывают на то, что следующие за ними элементы определяются пользователем. В данном случае речь идет о ссылке на открытую форму и на поле в ней.
Логическая конструкция If…Then…Else
Так как функция Dcount возвращает значение переменной answer (0 или 1), то и логическая проверка выполняется относительно этой переменной. Утверждение, подлежащее тестированию, – answer = 1. Если оно верно (дубликат действительно обнаружен), то логическое выражение принимает значение True (Истина). Затем сразу после проверяемого утверждения выполняется ряд операторов:
1. Исполняется команда MsgBox Prompt, и в результате на экране появляется сообщение «Значение уже содержится в файле и повторно не вводится».
2. Запускается макрос, который стирает значения всех полей текущей записи, кроме поля Код фирмы: в нем сохраняется текущее значение кода. Макрос имеет рабочий номер 32. (В выборе этой цифры нет какого-либо специального умысла, и макрос можно назвать как угодно.) Чтобы запустить его из программы VBA, задайте команду DoCmd.RunMacro «Макрос32».
Если проверяемое утверждение неверно (answer не равно 1), значит, дубликат не обнаружен. Логическое выражение принимает значение False (Ложь), и после инструкции Else выполняется ряд операторов:
1. Запускается макрос, запоминающий запись (макрос2);
2. Запускается макрос, реализующий переход к новой записи (макрос1). В обоих случаях аналогично предыдущему используется команда макрос1 DoCmd.RunMacro" Макрос№";
3. С помощью команды MsgBox Prompt выдается сообщение «Запись введена».
4. Вычисляется новое значение кода записи. Оно равно максимальному значению, увеличенному на единицу. Для вычисления используется функция Dmax , которая возвращает максимальное значение кода в указанном наборе (подмножестве) записей. Вот ее синтаксис: