Итак, сначала я перешел на очень большое количество других источников, пытаясь найти решение или объяснение моей ошибки, но я ничего не нашел что мне очень помогает.Проблема с DoCmd.OpenReport со сложным предложением Where (проблема с синтаксисом)
Я изучаю все это самостоятельно, поэтому мне определенно не хватает некоторых знаний о фундаменте, и он догнал меня. В основном форма, с которой у меня возникают проблемы, позволяет пользователю создавать три разных отчета, основанных на тех критериях, которые им нужны. Существуют три разных комбинированных блока: cboCompany, cboProject, cboEmployee. Я использую команду Nz для изменения нулевых значений до нуля, а затем используйте If Statements, чтобы определить, какой отчет использовать в зависимости от того, что пользователь выбирает. Я надеюсь, что с тех пор это происходит. Его легче показать, чем объяснить. Тем не менее, эта часть работает нормально.
Проблема, которую я получаю, - это когда я хочу сделать предварительный просмотр печати для отчета, который генерирует пользователь. Мне нужно, чтобы предложение where принимало значения, которые пользователь выбирает для использования в предварительном просмотре печати. Я не могу получить синтаксис для предложения where, чтобы на самом деле это сделать.
Вот как я называю свои переменные. Функция Nz, как я понимаю, требует, чтобы переменные были вариантами, из-за этого я не совсем уверен, как написать синтаксис для предложения where. Я знаю, что целые числа, строки и даты имеют различный синтаксис, но я не знаю, какой вариант был бы.
Dim Company As Variant
Dim Project As Variant
Dim Employee As Variant
Dim EndDate As String
Dim StartDate As String
Company = Nz(cboCompany, 0)
Project = Nz(cboProject, 0)
Employee = Nz(cboEmployee, 0)
StartDate = txtStartDate.Value
EndDate = txtEndDate.Value
Так что следующая часть, как я написал один из вариантов отчета с моей лучшей догадкой синтаксиса для ИНЕК. Это не работает. Если бы вы могли помочь мне указать мне в правильном направлении, я бы очень признателен.
ElseIf Company <> 0 And Project <> 0 And Employee <> 0 Then
DoCmd.OpenReport "ProjectReport_Employee_R", acViewPreview, "", "[cboCompany]= " & Company & " And [cboEmployee]= " & Employee & " And [cboProject]= " & Project & " And [txtStartDate]= #" & StartDate & "# And [txtEndDate]= #" & EndDate & "#", acWindowNormal
Если я не объяснить вещи достаточно хорошо, или вам нужно больше кода, чтобы помочь, пожалуйста, дайте мне знать, и спасибо заранее.
*** Редактировать: Чтобы дать более полную картину, это код по всей форме.
Private Sub cboCompany_AfterUpdate() Me.cboProject.Requery End Sub
Private Sub cmdSubmit_Click()
'Open Report With Filter Criteria
Dim Company As Variant
Dim Project As Variant
Dim Employee As Variant
Company = Nz(cboCompany, 0)
Project = Nz(cboProject, 0)
Employee = Nz(cboEmployee, 0)
If Company = 0 Then
MsgBox ("Please Select At Least A Company To Generate A Report")
cboCompany.Value = Null
cboProject.Value = Null
cboEmployee.Value = Null
ElseIf Company <> 0 And Project = 0 And Employee = 0 Then
DoCmd.BrowseTo acBrowseToReport, "ProjectReport_Company_R", "Main_F.NavigationSubform>ProjectReport_F.Child31"
ElseIf Company <> 0 And Project <> 0 And Employee = 0 Then
DoCmd.BrowseTo acBrowseToReport, "ProjectReport_Project_R", "Main_F.NavigationSubform>ProjectReport_F.Child31"
ElseIf Company <> 0 And Project <> 0 And Employee <> 0 Then
DoCmd.BrowseTo acBrowseToReport, "ProjectReport_Employee_R", "Main_F.NavigationSubform>ProjectReport_F.Child31"
ElseIf Company <> 0 And Project = 0 And Employee <> 0 Then
MsgBox ("Please Select A Project")
End If
End Sub
Private Sub Form_Current() Me.cboCompany. SetFocus Конец Sub
Pri Vate Sub Form_Load()
«Установка значения даты Dim EndDate As String Dim StartDate As String StartDate = Формат (DateSerial (год (дата), месяц (DateAdd ("м", -1, дата)), 16), "Short Date") EndDate = Формат (DateSerial (год (дата), месяц (дата), 15), "Short Date")
txtStartDate.Value = StartDate
txtEndDate.Value = EndDate
«установить форму сообщения на Open Child31 DoCmd .BrowseTo acBrowseToForm, "ProjectReport_Message_F", "Main_F.NavigationSubform> ProjectReport_F.Child31 "
Конец Sub '---------------------------------------- -------------------- 'Print_Click ' '----------------------- ------------------------------------- Private Sub Command39_Click() Об ошибке GoTo Command39_Click_Err
Dim Company As Variant
Dim Project As Variant
Dim Employee As Variant
Dim EndDate As String
Dim StartDate As String
Company = Nz(cboCompany, 0)
Project = Nz(cboProject, 0)
Employee = Nz(cboEmployee, 0)
StartDate = txtStartDate.Value
EndDate = txtEndDate.Value
If Company <> 0 And Project = 0 And Employee = 0 Then
DoCmd.OpenReport "ProjectReport_Company_R", acViewPreview, "", "", acNormal
ElseIf Company <> 0 And Project <> 0 And Employee = 0 Then
DoCmd.OpenReport "ProjectReport_Project_R", acViewPreview, "", "", acNormal
ElseIf Company <> 0 And Project <> 0 And Employee <> 0 Then
DoCmd.OpenReport "ProjectReport_Employee_R", acViewPreview, "", "[cboCompany]= " & Company & " And [cboEmployee]= " & Employee & " And [cboProject]= " & Project & " And [txtStartDate]= '" & StartDate & "' And [txtEndDate]= '" & EndDate & "'", acWindowNormal
End If
Command39_Click_Exit: Exit Sub
Command39_Click_Err: MsgBox Er ROR $ Резюме Command39_Click_Exit
End Sub
Каковы ваши поля Variant в базе данных? Это определит, как вы должны их обрабатывать. – JoelC
Когда я говорю, что он не работает, он не получает ошибку, но параметры не вводятся. Так, например, пользователь войдет в компанию, проект и сотрудника, и отчет будет генерироваться просто в подзаголовке, но когда я нажму кнопку печати, привязанную к DoCmd.OpenReport, сделанную из этой информации, передается, поэтому я пытаясь включить его в предложение where, но пока я не могу правильно получить синтаксис – user3802731
, также компания, проект и сотрудник будут целыми числами.Startdate и Enddate - это, конечно, поля даты. Если это поможет. Опять же, я не уверен, как доступ работает за сценой, поэтому я не знаю, определяю ли я их как целые числа или что-то еще. – user3802731