【发布时间】:2016-06-30 08:47:53
【问题描述】:
我正在尝试设置一个表单以根据不同的条件启动各种报告,但我在获取一个基于 GroupBy/Count/Sum 的 SQL 数据源的报告以在两个未绑定的文本框之间工作时遇到问题FromDate 和 ToDate。
VBA 脚本 - 从表单调用报告 (frmRptFeedback):
Private Sub cmdPrint_Click()
If Not chkPrintPreview Then
Set Application.Printer = Application.Printers.Item(cboPrinter.Value)
End If
Dim strCondition As String
Dim strFromDate As String
Dim strToDate As String
strFromDate = txtFromDate.Value
strToDate = txtToDate.Value
Select Case opgOptions
Case 1 ' Feedback By Employee
If IsNull(cboEmployee.Value) Then
strCondition = "DateSubmitted BETWEEN '" & strFromDate & "' AND '" & strToDate & "'"
Else
strCondition = "RespEmp = '" & cboEmployee.Value & "' AND DateSubmitted BETWEEN '" & _
strFromDate & "' AND '" & strToDate & "'"
End If
Call OpenReport("rptFeedbackByEmp", IIf(chkPrintPreview, acViewPreview, acViewNormal), strCondition)
Case 2 ' Feedback By Team
If IsNull(cboTeam.Value) Then
strCondition = "DateSubmitted BETWEEN '" & strFromDate & "' AND '" & strToDate & "'"
Else
strCondition = "EmpType = '" & cboTeam.Value & "' AND DateSubmitted BETWEEN '" & _
strFromDate & "' AND '" & strToDate & "'"
End If
Call OpenReport("rptFeedbackByTeam", IIf(chkPrintPreview, acViewPreview, acViewNormal), strCondition)
Case 3 ' Feedback By Project #
If IsNull(txtProjectID) Then
strCondition = "DateSubmitted BETWEEN '" & strFromDate & "' AND '" & strToDate & "'"
Else
strCondition = "ProjectID = " & txtProjectID & "AND DateSubmitted BETWEEN '" & _
strFromDate & "' AND '" & strToDate & "'"
End If
Call OpenReport("rptFeedbackByProject", IIf(chkPrintPreview, acViewPreview, acViewNormal), strCondition)
End Select
If Not chkPreview Then
Set Application.Printer = Nothing
End If
End Sub
SQL 查询 - 最初将数据拉入主 SQL 视图 (vueRptFeedback):
SELECT f.FeedbackID, f.BFID, bf.ProjectID, p.ProjectName, e2.Name AS PM, e1.Name AS RespEmp,
et.Description AS EmpType, f.SubByInits, f.DateSubmitted, f.QtyIssues,
f.EstHoursImpact, f.PlusDelta, f.Notes, f.HowResolved
FROM dbo.tblEmployee e2
INNER JOIN dbo.tblProject p
INNER JOIN dbo.tblBookingForm bf
ON p.ProjectID = bf.ProjectID
ON e2.EmployeeID = p.Scope_PM_EmployeeID
RIGHT OUTER JOIN dbo.tblEmployeeType et
INNER JOIN dbo.tblEmployee e1
ON et.EmployeeTypeID = e1.EmployeeTypeID
INNER JOIN dbo.tblFeedback f
ON e1.EmployeeID = f.ResponsibleEmpID
ON bf.BookingFormID = f.BFID
SQL 查询 - 按项目 ID (vueRptFeedbackByProject) 报告的当前记录源:
SELECT ProjectID, ProjectName, RespEmp, COUNT(FeedbackID) AS CountReports,
SUM(QtyIssues) AS SumIssues, SUM(EstHoursImpact) AS SumHours
FROM vueRptFeedback
WHERE (DateSubmitted
BETWEEN CONVERT(DATETIME, [Forms]![frmRptFeedback]![txtFromDate], 102)
AND CONVERT(DATETIME, [Forms]![frmRptFeedback]![txtToDate], 102))
GROUP BY ProjectID, RespEmp, ProjectName, DateSubmitted
ORDER BY ProjectID, RespEmp
我知道我的问题出在WHERE 子句中,因为当我将其取出时,报告可以正常显示,但包含所有记录,而不是这两个日期之间的记录。一旦我可以在 txtFromDate 和 txtToDate 之间获取报告,我可能需要更改 OpenReport() 以传递 txtFromDate 和txtToDate 作为参数而不是在 X 和 Y 之间,但我一直被报告的 Recordsource 上的语法绊倒。
【问题讨论】:
-
将日期格式化为 sql server 的已知格式。
-
这不是 CONVERT(DATETIME,txtFromDate,102) 应该做的吗?如果有帮助,实际表中的字段是日期时间类型。文本框都是 ShortDate 格式,如 mm/dd/yyyy。
-
CONVERT(DATETIME,txtFromDate,102)- 你的代码在哪里? 102 无论如何都是yyyy.mm.dd格式msdn.microsoft.com/en-us/library/ms187928.aspx。 -
WHERE (DateSubmitted BETWEEN CONVERT(DATETIME, [Forms]![frmRptFeedback]![txtFromDate], 102) AND CONVERT(DATETIME, [Forms] ! [frmRptFeedback] ! [txtToDate], 102))是我遇到问题的报告的记录源的 WHERE 子句。即使我将其设置为 101 以匹配格式,我也会得到相同的 Unable to parse text 和 Incorrect syntax near !错误。 -
那么
strCondition在哪里使用? “解析错误”是客户端。问题可能出在!周围的那些空间中,其中引用了 txtToData。
标签: sql-server vba ms-access