Еще один способ сделать это, который, кажется, никто не упомянул, - это привязать ваш график к одному сохраненному QueryDef, а затем во время выполнения переписать QueryDef. Теперь я не рекомендую изменять сохраненные QueryDef для большинства контекстов, потому что это вызывает раздувание внешнего интерфейса и обычно даже не требуется (большинство контекстов, где вы используете сохраненный QueryDef, могут быть отфильтрованы тем или иным способом в контексте, в котором они используются, например, как источник записей формы, вы просто передаете один аргумент в DoCmd.OpenForm).
Графики отличаются, потому что SQL, управляющий графиками, не может быть изменен во время выполнения.
Некоторые предложили параметры, но при открытии формы с графиком, использующей строку SQL с параметрами, появятся диалоговые окна параметров по умолчанию. Один из способов избежать этого - использовать диалоговую форму для сбора критериев, а затем установить ссылки на элементы управления в диалоговой форме в качестве параметров, например ::
.
PARAMETERS [Forms]![MyForm]![ID] Long;
Если вы используете ссылки на формы, крайне важно, чтобы вы это делали, потому что начиная с Access 2002, служба Jet Expression не всегда правильно обрабатывает их, когда элементы управления имеют значение Null. Определение их в качестве параметров устраняет эту проблему (которой не было до Access XP).
Одна ситуация, в которой вы должны переписать QueryDef для графа, это если вы хотите позволить пользователю выбирать N в операторе TOP N SQL. Другими словами, если вы хотите, чтобы они могли выбирать TOP 5, TOP 10 или TOP 20, вам придется изменить сохраненный QueryDef, поскольку N не может быть параметризован.