Я хотел бы знать, есть ли способ установить параметры в запросе Access 2007 с помощью VBA. Я новичок в использовании VBA в Access, и мне было поручено добавить немного функциональности в существующее приложение.Передача параметра в открытое событие отчета в запрос параметра (Access 2007)
Проблема, с которой я сталкиваюсь, заключается в том, что тот же отчет можно вызвать в двух разных местах приложения. Первый - на кнопке команды в форме ввода данных, другой - на кнопке коммутатора. Сам отчет основан на запросе параметра, который требует от пользователя ввода идентификатора поставщика.
Пользователь не хотел бы вводить идентификатор поставщика в форме ввода данных (поскольку форма уже отображает идентификатор поставщика), но из коммутатора им будет предложено ввести идентификатор поставщика.
Где я застрял - как вызвать запрос отчета (в открывшемся событии отчета) и передать идентификатор ProviderID из формы в качестве параметра. Я пытался какое-то время, и я не могу заставить что-то работать правильно. Вот мой код до сих пор, но я явно тупик.
Private Sub Report_Open (Отмена As Integer)
Dim intSupplierCode As Integer
'Check to see if the data entry form is open
If CurrentProject.AllForms("frmExample").IsLoaded = True Then
'Retrieve the SupplierID from the data entry form
intSupplierCode = Forms![frmExample]![SupplierID]
'Call the parameter query passing the SupplierID????
DoCmd.OpenQuery "qryParams"
Else
'Execute the parameter query as normal
DoCmd.OpenQuery "qryParams"?????
End If
End Sub
Я попытался Me.SupplierID = intSupplierCode, и хотя он собирает, это бомбы, когда я запускаю его. И вот мой код SQL для запроса параметра:
ПАРАМЕТРЫ [Ввод поставщика] Длинный; ВЫБОР Поставщиков.Покупщик, Поставщики.КомпанияИмя, Поставщики.Контактное имя, Поставщики.ContactTitle ОТ Поставщиков ГДЕ (((Поставщики.Поставщик) = [Вход Поставщика]));
Я знаю, что есть способы обойти эту проблему (и, вероятно, простой способ), но, как я уже сказал, мой недостаток опыта использования Access и VBA затрудняет работу. Если бы кто-нибудь из вас мог помочь, это было бы здорово!
Я думаю, что вы рекомендуете никогда не ссылаться на форму критериев в OnOpen, завышенную. Я делаю это все время. В тех немногих случаях, когда я также хочу предоставить некоторый метод обхода формы критериев, я использовать OpenArgs в A2003 и более поздних версиях, а также предоставить WhereCondition и проверить свойство отчета .Filter в OnOpen, чтобы пропустить открытие формы. –
Спасибо, Альберт. Ваш совет был замечательный, но в конце мне сказали, чтобы я пошел с решение, о котором я упомянул в своем комментарии Дэвиду. В любом случае, после работы над этим билетом какое-то время он дошел до того момента, когда время заставить его работать так, как должно быть, было бы слишком большим для билета. просто надо сложить и переделать, так как это ужасный беспорядок ... В любом случае, еще раз спасибо за совет. Как я уже упоминал в своем ответе Дэвиду, я здесь новый, поэтому я тоже не могу проголосовать. – JPM
Я, честно говоря, не большой поклонник «рефакторирования всего вашего приложения, так что это было так, как я думаю, это должно быть» ответы. Это может быть хорошим комментарием по передовым методам, но на самом деле он вообще не отвечает на вопрос. – Hill