Steven W. Erbach
serbach at new.rr.com
Wed Jan 12 17:09:45 CST 2005
Pedro,
So we're talking about something like a 7-dimensional matrix here, right? Something like:
Tables A, B, C, D, E, F, G
One column in each table
Rows in each table vary, up to (for this situation) R1 through R17
So the number of results that you'll have will be, lets see...
A*B + A*C + A*D + A*E + A*F + A*G +
B*C + B*D + B*E + B*F + B*G +
C*D + C*E + C*F + C*G +
D*E + D*F + D*G +
E*F + E*G +
F*G
Looks to me as if you should create an empty Results table with the structure:
RESULTS
-------
(Key) AvgUsing, Text, 50
AverageVal, Number, Single
Then a second table:
MATCH
-----
(Key) TblNumber, Number, Integer
TblName, Text, 15
And fill this table with the names of your Sample tables:
1 TableA
2 TableB
3 TableC
...etc
Just make sure the numbers are sequential from 1 to 7.
Then design a form with a CommandButton (named cmdFill) and a Label (named lblTables). The OnClick method of the cmdFill button looks like this (replace the field names 'KeyFld' and 'Value' with your own field names...they ARE consistently named, I hope?):
Private Sub cmdFill_Click()
Dim ctr1 As Integer
Dim ctr2 As Integer
Dim i As Integer
Dim j As Integer
Dim rst1 As DAO.Recordset
Dim strSQL As String
Dim strTblName1 As String
Dim strTblName2 As String
Set rst1 = CurrentDb.OpenRecordset("Match", dbOpenDynaset)
rst1.MoveLast
ctr1 = rst1.RecordCount
For i = 1 To ctr1 - 1
' We will process all the tables listed in Match except for the
' last one, since it will have been queried against all the others in
' the j loop.
rst1.FindFirst "[tblNumber]=" & i
If rst1.NoMatch Then
Exit For
Else
strTblName1 = rst1("tblName")
ctr2 = i + 1
rst1.FindFirst "[tblNumber]=" & ctr2
If rst1.NoMatch Then
Exit For
Else
strTblName2 = rst1("tblName")
For j = ctr2 To ctr1
lblTables.Caption = strTblName1 & ":" & strTblName2
DoEvents
strSQL = ""
strSQL = strSQL & "INSERT INTO Results "
strSQL = strSQL & " ( AvgUsing, AverageVal ) "
strSQL = strSQL & "SELECT '" & strTblName1 & "-' & [" & strTblName1 & _
"].[KeyFld] & ':" & strTblName2 & "-' & [" & _
strTblName2 & "].[KeyFld] AS AvgUsing, "
strSQL = strSQL & " ([" & strTblName1 & "].[Value]+[" & _
strTblName2 & "].[Value])/2 AS AverageVal "
strSQL = strSQL & " FROM [" & strTblName1 & "], [" & strTblName2 & "];"
Debug.Print strSQL
DoCmd.RunSQL strSQL
rst1.MoveNext
If Not rst1.EOF Then
' The tblNumber for this table should be equal to ctr2 + 1
strTblName2 = rst1("tblName")
Else
' At the end of the table and the j loop.
rst1.MoveFirst
End If
Next j
End If
End If
Next i
rst1.Close
Set rst1 = Nothing
End Sub
Regards,
Steve Erbach
Scientific Marketing
Neenah, WI
> ------------Original Message------------
> From: Pedro Janssen <pedro at plex.nl>
> To: "Access Developers discussion and problem solving" <accessd at databaseadvisors.com>
> Date: Wed, Jan-12-2005 9:55 AM
> Subject: Re: [AccessD] complex query!!
>
> Hello Steve,
>
> yes i have 7 tables, one for each group.
>
> - Pedro -