Как и @ Дэвид, я сначала не поверил ответу Андреаса.Поэтому я сам проверил это следующим образом.Я создал следующую функцию:
Function Watch(Val, Optional CalledFrom As String = "")
Debug.Print Val, CalledFrom
Watch = Val
End Function
Затем я создал таблицу с именем "Dummy" с одним полем с именем "ID".Я создал форму и использовал следующее в качестве RecordSource формы:
SELECT Watch([ID],"ShowInForm") AS ShowInForm,
Watch([ID],"HideFromForm") AS HideFromForm
FROM Dummy;
Я добавил один элемент управления textbox с ControlSource ShowInForm
.
Затем я открыл форму и получил этов ближайшем окне:
1 ShowInForm
1 ShowInForm
1 ShowInForm
Затем я вернулся к RecordSource, предварительно просмотрел его в представлении таблицы и получил следующее:
1 ShowInForm
1 HideFromForm
Я не уверен, почему «ShowInForm»выражение оценивается в форме три раза, но кажется довольно ясным, что неиспользуемое поле «HideFromForm» не оценивается.
Чтобы обратиться к комментарию @ HansUp, я вернулся и сохранил запросс именем "Qry":
SELECT Watch([ID],"ShowInForm") AS ShowInForm,
Watch([ID],"HideFromForm") AS HideFromForm
FROM Dummy;
Затем изменил форму RecordSource на:
Select ShowInForm FROM Qry
Это дало тот же результат, что и раньше, когда я открывал форму (т.е. 3 строки 1 ShowInForm
).Интересно, что когда я открыл RecordSource в виде таблицы, я получил это:
1 ShowInForm
1 ShowInForm
Другими словами, он оценил поле ShowInForm дважды .Предположительно, один раз в «Qry» и снова в запросе RecordSource.
Конечный результат все еще является подтверждением ответа @ Andreas.