Ich versuche, ein Formular-Setup zum Starten verschiedener Berichte basierend auf verschiedenen Kriterien zu erhalten, und ich habe Probleme beim Abrufen eines der Berichte, die eine GroupBy/Count/Sum-basierte SQL-Datenquelle zwischen arbeiten 2 ungebundene Textfelder, die als FromDate und ToDate dienen.Access 2010 Bericht zwischen Daten beschränkt
VBA Skript - Aufruf Bericht von Form (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 Abfrage - zunächst Daten in dem Haupt SQL-Ansicht (vueRptFeedback) ziehen:
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 Abfrage - aktuelle Datenherkunft für Bericht von ID-Projekt (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
ich mein Problem kenne die WHERE
Klausel ist, wie wenn ich es aus dem Bericht fein zieht aber mit allen Datensatz, nicht die, die zwischen denen, zwei Daten. Nachdem ich den Bericht bekommen können zwischen dem txtFromDate und txtToDate zu ziehen, muss ich wohl die OpenReport()
ändern, um die txtFromDate und txtToDate als Parameter anstelle eines zwischen X und Y passieren, aber ich erhalte immer gestolpert durch Syntax auf der Recordsource des Reports.
Format Daten bekannt Format für SQL Server. –
Ist das nicht das, was die CONVERT (DATETIME, txtFromDate, 102) tun soll? Wenn es hilft, ist das Feld in der tatsächlichen Tabelle Datetime-Typ. Die Textfelder sind alle ShortDate-Formate wie MM/TT/JJJJ. –
'CONVERT (DATETIME, txtFromDate, 102)' - und wo ist das in deinem Code? 102 ist sowieso 'yyyy.mm.dd' Format https://msdn.microsoft.com/en-us/library/ms187928.aspx. –