Макрокоманда «ПоискЗаписи» — Служба поддержки Майкрософт
Access для Microsoft 365 Access 2021 Access 2019 Access 2016 Access 2013 Access 2010 Access 2007 Еще…Меньше
С помощью макрокоманды ПоискЗаписи можно найти определенную запись в таблице, запросе, форме или отчете классической базы данных Access.
Настройка
Макрокоманда ПоискЗаписи имеет следующие аргументы:
Аргумент макрокоманды |
Описание |
||||||||||
Тип объекта |
Выберите или введите тип объекта базы данных, в котором будет выполняться поиск. |
||||||||||
Имя объекта |
Введите или выберите объект, содержащий искомую запись. Раскрывающийся список содержит все объекты базы данных с типом, заданным в аргументе Тип объекта. |
||||||||||
Запись |
Укажите начало и направление поиска.
|
||||||||||
Условие отбора |
Введите условия поиска, используя синтаксис предложения WHERE инструкции SQL, только без слова WHERE. Например: Description = «Beverages» Чтобы создать условие, содержащее значение из текстового поля в форме, следует написать выражение, объединяющее первую часть условия с именем текстового поля, содержащего значение, по которому будет проводиться поиск. Например, в следующем условии будет выполняться поиск в поле Description по значению текстового поля txtDescription в форме frmCategories. Обратите внимание на знак равенства (=) в начале выражения и на одинарные кавычки (‘) по обеим сторонам ссылки на текстовое поле: =»Description = ‘» & Forms![frmCategories]![txtDescription] & «‘» |
Примечания
- org/ListItem»>
-
Значение аргумента «Запись». Дополнительные сведения об аргументе Запись см. в таблице в разделе «Настройка».
-
Порядок сортировки записей. Например, если аргумент Запись имеет значение Первая, изменение порядка сортировки записей может отразиться на том, какая запись будет найдена.
-
Если условие, заданное в аргументе Условие отбора, не выполняется, это не считается ошибкой, а фокус остается на текущей записи.
При поиске последующей или предыдущей записи поиск не продолжается, когда достигается конец данных. Если больше нет записей, соответствующих условию отбора, это не считается ошибкой, а фокус остается на текущей записи. Чтобы подтвердить обнаружение совпадения, можно ввести условие для следующей команды и сделать его таким же, как значение аргумента Условие отбора.
org/ListItem»>
-
Макрокоманда аналогична ПоискЗаписи макрокоманде НайтиЗапись, но у ПоискЗаписи более широкие возможности поиска. Макроманда НайтиЗапись в основном используется для поиска строк, и ее функции аналогичны возможностям диалогового окна Найти. В макрокоманде ПоискЗаписи используются условия, которые больше напоминают фильтр или запрос SQL. Вот некоторые возможности макрокоманды ПоискЗаписи:
Если более чем одна запись соответствует условию, заданному в аргументе Условие отбора, на результат поиска могут оказать влияние следующие факторы:
Объект, заданный в аргументе Имя объекта, должен быть открыт до выполнения команды. В противном случае произойдет ошибка.
Для запуска макрокоманды ПоискЗаписи в модуле VBA используйте метод SearchForRecord объекта DoCmd.
Description = «Напитки» and CategoryID = 11
-
Можно ссылаться на поля, которые существуют в источнике записей формы или отчета, но не отображаются в них. В предыдущем примере поля Description и CategoryID необязательно должны выводиться в форме или отчете.
Можно использовать логические операторы, такие как <, >, AND, OR и BETWEEN. Макрокоманда НайтиЗапись ищет только строки, равные искомой строке, начинающиеся с нее или содержащие ее.
Пример
Следующий макрос открывает таблицу Categories с помощью команды ОткрытьТаблицу. Затем с помощью команды ПоискЗаписи ищется первая запись таблицы, в поле Description которой содержится значение «Напитки».
Макрокоманда |
Аргументы |
ОткрытьТаблицу |
Имя таблицы: Categories Режим: Таблица Режим данных: Изменение |
ПоискЗаписи |
Тип объекта: Таблица Имя объекта: Categories Запись: Первая Условие отбора: Description = «Напитки» |
404 Cтраница не найдена
Мы используем файлы cookies для улучшения работы сайта МГТУ и большего удобства его использования. Более подробную информацию об использовании файлов cookies можно найти здесь. Продолжая пользоваться сайтом, вы подтверждаете, что были проинформированы об использовании файлов cookies сайтом ФГБОУ ВО «МГТУ» и согласны с нашими правилами обработки персональных данных.
Размер:
AAA
Изображения Вкл. Выкл.
Обычная версия сайта
К сожалению запрашиваемая страница не найдена.
Но вы можете воспользоваться поиском или картой сайта ниже
|
|
vba — Могу ли я сделать некоторые поля в форме доступа условными?
Задавать вопрос
спросил
Изменено 2 года, 10 месяцев назад
Просмотрено 446 раз
Я создаю базу данных, и у меня есть таблица, в которой я собираю сведения о том, принимал ли пациент или принимает в настоящее время определенные лекарства. У меня есть список из 17 лекарств, которые нам небезразличны, и для каждого из них есть флажок «да/нет». Если пациент принимает или когда-либо принимал одно из этих лекарств, мы хотим собрать 9дополнительные поля.
Я хочу создать форму, в которой перечислены только лекарства и флажки. Когда пользователь устанавливает флажок, я хочу, чтобы дополнительные поля отображались для их заполнения.
Большинство пациентов принимали только 2-5 таких препаратов, поэтому я не хочу загромождать форму ненужными пустыми полями.
Есть ли способ сделать это без VBA? Если нет, кто-нибудь даст мне пример того, как должен выглядеть код VBA?
Большое спасибо! Мы собираем эти данные в рамках постоянного реестра, отслеживающего долгосрочную безопасность конкретного исследуемого препарата. Обычно мы собираем эти данные по-другому, когда пациент находится в клинике, однако в условиях пандемии нам необходимо делать это по телефону, и эта база данных будет иметь решающее значение для обеспечения непрерывного сбора этих жизненно важных данных!!
Спасибо, Allen
- vba
- формы
- ms-access
- условные операторы
1
Что вы можете сделать, так это полагаться на тот факт, что поля Да/Нет хранятся как 0 (Ложь) и не-0 (Истина). Затем у вас может быть небольшой фрагмент кода VBA за формой, который добавляет все поля Да/Нет, чтобы определить, отображать ли дополнительные текстовые поля или нет:
Sub sCheckMedication() При ошибке Перейти к E_Handle Если (Я!Лекарство1 + Я!Лекарство2 + Я!Лекарство3) <> 0 Тогда Me!txtMedicationNotes.Visible = Истина Еще Me!txtMedicationNotes.Visible = False Конец, если sВыход: При ошибке Возобновить Далее Выйти из подпрограммы E_Handle: MsgBox Err.Description & vbCrLf & vbclf & "sCheckMedication", vbOKOnly + vbCritical Возобновить sВыход Конец сабвуфера
Затем вы должны вызвать эту процедуру в событии Current формы (для защиты при первой загрузке формы, а также при переходе между записями), а также в событии Click CheckBox:
Private Sub chkMedication1_Click() ПозвонитьПроверитьМедицина Конец сабвуфера
С уважением,
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
vba — Условное форматирование мигает при запросе подчиненной формы
Задавать вопрос
спросил
Изменено 11 месяцев назад
Просмотрено 284 раза
У меня есть внешний интерфейс Access, связанный с SQL Server для базы данных. У меня есть основная форма, содержащая подчиненную форму, установленную как Datasheet
, чтобы отображать записи в сетке для пользователя с условным форматированием. Набор записей не обновляется, поэтому у меня есть отдельная форма, которая изменяет данные. Как только эта форма изменила данные, мне нужно вызвать Requery
, чтобы обновить данные.
Проблема в том, что когда эта строка попадает в VBA, условное форматирование подчиненной формы на мгновение отключается, а затем снова включается, что вызывает эффект «мерцания» для конечного пользователя, где они могут временно видеть числа данных а не цветовое кодирование по мере необходимости.
Я попытался обновить запись в таблице, но так как она не обновляется, это не вариант. Я также пытался установить Application.Echo False
перед выполнением, но безрезультатно. Кажется, это не имеет значения.
Как предотвратить это?
Строка кода ниже:
Private Sub saveData_Click() Dim x как целое число Call frmSaveData(x) '// Вызывает подпрограмму для сохранения данных Me. subFormData.Form.Requery '// Вызывает запрос подчиненной формы для обновления и форматирования "мерцания" Конец сабвуфера
- vba
- мс-доступ
- мс-доступ-2016
2
Выключение рисование следует сделать:
Private Sub saveData_Click() Dim x как целое число 'Один или оба. Тест. Я.Живопись = Ложь Я!subFormData.Form.Painting = False Call frmSaveData(x) '// Вызывает подпрограмму для сохранения данных Me.subFormData.Form.Requery '// Вызывает запрос подчиненной формы для обновления и форматирования "мерцания" Я!subFormData.Form.Painting = Истина Я.Живопись = Истина Конец сабвуфера
Создание на основе ответа @Gustav:
Отключите рисование и (пока вы не используете сквозной запрос в качестве источника записи) запрашивайте источник записи, а не форму. Если у вашего запроса есть триггер, это может не сработать, так как это событие не сработает; но в остальном эти две вещи были очень важны для улучшения UX для меня.
Некоторые общие примечания к коду:
- Вам не нужно использовать
Вызов
в VBA. Код будет работать нормально и без него. Однако оставить код как есть не повредит. - Используйте
Long
вместоInteger
на современных машинах. Производительность может улучшиться, и вы избежите проблем с переполнением. Это особенно важно, если вы используете SQL Server в качестве серверной части, поскольку тип SQL ServerInteger
на самом деле является типомLong
в соответствии с VBA. - Непонятно, что делает
x
; Я предполагаю, что это было абстрагировано, чтобы сделать ответ общим. Это (маловероятно), но возможно, что бы ни присваивало значение, мерцает форма. Выключение покраска должна помочь и в этом случае.
Попробуйте это:
Частная подпрограмма saveData_Click() Dim x as Long 'Один или оба. Тест. Я.Живопись = Ложь Я!subFormData.Form.