2014-12-16 6 views
0

Итак, сначала я перешел на очень большое количество других источников, пытаясь найти решение или объяснение моей ошибки, но я ничего не нашел что мне очень помогает.Проблема с 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

+0

Каковы ваши поля Variant в базе данных? Это определит, как вы должны их обрабатывать. – JoelC

+0

Когда я говорю, что он не работает, он не получает ошибку, но параметры не вводятся. Так, например, пользователь войдет в компанию, проект и сотрудника, и отчет будет генерироваться просто в подзаголовке, но когда я нажму кнопку печати, привязанную к DoCmd.OpenReport, сделанную из этой информации, передается, поэтому я пытаясь включить его в предложение where, но пока я не могу правильно получить синтаксис – user3802731

+0

, также компания, проект и сотрудник будут целыми числами.Startdate и Enddate - это, конечно, поля даты. Если это поможет. Опять же, я не уверен, как доступ работает за сценой, поэтому я не знаю, определяю ли я их как целые числа или что-то еще. – user3802731

ответ

1

Я думаю, вы можете использовать неправильные имена полей в фильтре.

Предположим, что в Report Design запись RecordSource вашего отчета - tblProject.

Когда вы сделаете это:

DoCmd.OpenReport "ProjectReport_Employee_R", , , "[cboCompany]= " & Company ... 

вы фактически открыв отчет с RecordSource из:

SELECT * FROM tblProject WHERE [cboCompany] = 12345 AND ... 

Если tblProject не имеет поле с именем «cboCompany», то он выиграл» т работы.

+0

Правда, но все отчеты основаны на запросах в запросах, где я устанавливаю условие where равным cboCompany. Это отлично подходит для заполнения отчета в подзаголовке, но не для предварительного просмотра. Он продолжает спрашивать меня о параметрах cboCompany и т. Д. Я пытаюсь заполнить его предложением where, которое, как я думаю, должно работать, но я не уверен в синтаксисе. Я также уверен, что это плохой способ кодирования LOL. Но я должен был сделать это благодаря знаниям, которые у меня были. Я скорее не перерабатываю всю систему, а просто получаю эту функцию для работы, тогда я могу сделать это – user3802731

+0

Я также хочу сказать спасибо, что потрудился мне помочь. Я очень ценю, что вы используете свое свободное время для незнакомца. – user3802731

+0

Я не понимаю «заполнение отчета в подзаголовке». Вы имеете в виду заполнение подформы в основной форме, с формальным представлением данных, которые в конечном итоге будут включены в отчет? –

0

Я бы базировать отчет о запросе, а не с помощью "WhereCondition" аргумент DoCmd в.

Сделайте «ProjectReport_Employee_R» запись источника запроса «qryProjectReport_Employee_R».

... затем изменяйте определение запроса каждый раз, когда вы хотите запустить отчет.

Например:

суб print_report()

«добавить эти тускло ФРК, как Dao.Querydef тусклый strSQL как строковые

если это то

ElseIf Компания <> 0 И Проект <> 0 И Сотрудник <> 0 Затем

'SQL may need modifying... 
strSQL= "SELECT * FROM SomeTable WHERE [cboCompany]= " & Company & " And [cboEmployee]= " & Employee & " And [cboProject]= " & Project & " And [txtStartDate]= #" & StartDate & "# And [txtEndDate]= #" & EndDate & "#" 

Set qdf="qryProjectReport_Employee_R" 
qdf.SQL=strSQL 

DoCmd.OpenReport "ProjectReport_Employee_R", acViewPreview 

'clean up 
set qdf=nothing 

конец, если конец суб

Это все. Дайте знать, если у вас появятся вопросы.

+0

О, хорошо, я вижу, что вы предлагаете. Я дам ему попытку и дам вам знать – user3802731

+0

Я скопировал то, что у вас было, конечно, изменив имена, но я получаю ошибку компиляции. Он выделяет строку qdf.SQL = strSQL. Можете ли вы объяснить, что делает qdf-часть, и я могу, возможно, лучше понять это. Простите, конечно, мое невежество. Я уверен, что это очень просто – user3802731

Смежные вопросы