Sorry for the delay in getting back. It's been busy around here.
I would do this:
Create a local table with the columns you want in your report.
Then populate the first column with the subcontractor's firm name, which is linked to the other tables by either the name or a PK (autonumber) and the PK field. Use an Append query for this, and pass parameters to the append query if you just want this report for one subcontractor.
Then do this:
'Declare variables
Dim rs1 As ADODB.Recordset
Dim rs2 As ADODB.Recordset
Dim sSQL1 As String
Dim sSQL2 As String
Dim iFirm As Integer
Dim dtStart As Date
Dim dtEnd As Date
'Take start and end dates
dtStart = Me.Text3
dtEnd = Me.Text5
'Remove old data first
DoCmd.SetWarnings False
DoCmd.OpenQuery "qryDeleteFirmReport"
DoCmd.OpenQuery "qryAppendFirmReport"
DoCmd.SetWarnings True
'Target
sSQL1 = "SELECT * FROM tblFirmReport"
Set rs1 = New ADODB.Recordset
rs1.Open sSQL1, CurrentProject.Connection, adOpenDynamic, adLockOptimistic
Do Until rs1.EOF
iFirm = rs1("FirmID")
sSQL2 = "SELECT Count(tblFirm_CChecks.FirmID) AS FirmCount FROM tblFirm_CChecks WHERE [FirmID] = " & iFirm & _
" AND [CCheckDate] Between #" & dtStart & "# And #" & dtEnd & "#"
Set rs2 = New ADODB.Recordset
rs2.Open sSQL2, CurrentProject.Connection, adOpenDynamic, adLockOptimistic
rs1("CCheck") = rs2("FirmCount")
rs1.Update
rs2.Close
sSQL2 = "SELECT Count(tblFirm_Inspect.FirmID) AS FirmCount FROM tblFirm_Inspect WHERE [FirmID] = " & iFirm & _
" AND [InspectDate] Between #" & dtStart & "# And #" & dtEnd & "#"
Set rs2 = New ADODB.Recordset
rs2.Open sSQL2, CurrentProject.Connection, adOpenDynamic, adLockOptimistic
rs1("ICheck") = rs2("FirmCount")
rs1.Update
rs2.Close
sSQL2 = "SELECT Count(tblFirm_QCheck.FirmID) AS FirmCount FROM tblFirm_QCheck WHERE [FirmID] = " & iFirm & _
" AND [QCheckDate] Between #" & dtStart & "# And #" & dtEnd & "#"
Set rs2 = New ADODB.Recordset
rs2.Open sSQL2, CurrentProject.Connection, adOpenDynamic, adLockOptimistic
rs1("QCheck") = rs2("FirmCount")
rs1.Update
rs2.Close
sSQL2 = "SELECT Count(tblFirm_Visits.FirmID) AS FirmCount FROM tblFirm_Visits WHERE [FirmID] = " & iFirm & _
" AND [VisitDate] Between #" & dtStart & "# And #" & dtEnd & "#"
Set rs2 = New ADODB.Recordset
rs2.Open sSQL2, CurrentProject.Connection, adOpenDynamic, adLockOptimistic
rs1("Visit") = rs2("FirmCount")
rs1.Update
rs2.Close
rs1.MoveNext
Loop
rs1.Close
This works for what you want. Is this too process intensive?
I used to text boxes to take the date values and didn't check for nulls since I am the only user of this demo.
HTH
mmcdonal
Look it up at:
http://wrox.books24x7.com