Две вещи для повышения эффективности (хотя только один из них когда-либо будет применяться к конкретному случаю, подобному этому):
определяет тип возвращаемого значения для вашей функции, т. Е. Public Function getFooF4()
должно быть Public Function getFooF4() As Long
(или любым другим подходящим типом данных. Без явного типа данных он возвращает вариант. В действительности, никогда не существует функция VBA, у которой когда-либо не должно быть декларации возвращаемого типа - если она возвращает вариант (что вполне разумно, особенно если в некоторых случаях нужно возвращать Null), определите его с помощью As Variant
. Когда это какой-то другой тип данных явно определить его.
объявляет параметр в вашем SQL, чтобы оптимизатор запросов мог использовать эту информацию при расчете плана запроса. Это не относится к случаю, когда ваше предложение WHERE использует функцию для предоставления критерия, но если вы использовали ссылку на поле в элементе управления, вы бы заменили это:
.
select foo.f1, foo.f2, foo.f3
from foo
where foo.f4 = Forms!MyForm!MyControl
... с этим:
PARAMETERS [Forms]![MyForm]![MyControl] Long;
select foo.f1, foo.f2, foo.f3
from foo
where foo.f4 = Forms!MyForm!MyControl
Теперь, в любом из этих случаев, поскольку функция / параметр находится в предложении WHERE, ее необходимо разрешить только один раз, поэтому даже если функция неэффективна (как здесь, при инициализации переменной базы данных). и открытие набора записей), на самом деле это не будет иметь большого значения.
Еще одна вещь, которую стоит рассмотреть, - это заменить функцию простым DLookup (), который предназначен именно для этой цели. Кроме того, поскольку значение приходит из таблицы, вы можете присоединить его к таблице из одной строки:
select foo.f1, foo.f2, foo.f3
from foo INNER JOIN Bar ON foo.f4 = Bar.MyF4
Это было бы максимально оптимизировано оптимизатором запросов, поскольку в нем вообще нет неизвестных - оптимизатор запросов будет знать все, что ему нужно знать о типах данных и статистике таблиц, и сможет выбрать наиболее эффективный метод поиска из возможных.