Запрос через форму со значением из текстового поля в качестве критерия

#sql #ms-access

#sql #ms-access

Вопрос:

Ситуация: метаданные о биологических образцах собираются в таблице Access.
Образцы поступают от пациентов-людей, а данные о пациентах собираются в отдельную таблицу.
Чтобы ограничить объем личной медицинской информации, которая у нас есть, база данных пациентов должна обновляться новыми пациентами только тогда, когда мы фактически получаем от них образцы.

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

Запрос выглядит так прямо сейчас:

 SELECT Patients.[Patient id]
FROM Patients
WHERE (((Patients.[Patient id])=[Forms]![Specimen entry]![patient id]));
  

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

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

Ответ №1:

Запрос выглядит корректно, но убедитесь, что предложение WHERE сравнивает числа с числами или строки со строками (а не число со строкой). Также убедитесь, что имена формы и текстового поля указаны правильно. Быстрый тест с использованием вашего запроса сработал для меня.

В зависимости от того, как вы планируете представлять информацию, вы также можете динамически создавать запрос в VBA, а затем передавать информацию в форму.

Для поиска я бы рекомендовал некоторую комбинацию access, dynamic, query и vba.

альтернативный вариант

Если вы хотите узнать, существует ли в таблице только один пациент, может быть проще использовать функцию dlookup:

 If IsNull(DLookup("[Patient ID]", "Patients", "[Patient ID]='" amp; Me.Patient_ID amp; "'")) Then MsgBox "does not exist"
  

Это проверит, существует ли пациент (возвращает число) или не существует (возвращает NULL).

https://support.office.com/en-us/article/DLookup-Function-8896cb03-e31f-45d1-86db-bed10dca5937