Inner-Join MS访问Excel

Option Explicit Public Sub Connect(strVar As String) Dim strEmps As String, strPath As String strEmps = "SELECT fldStudentNo, fldFirstName,fldLastName,fldTelephone, fldDepartmentName, fldClassDate, fldClassName" strEmps = strEmps & "FROM [tblDepartments] INNER JOIN tblStudents ON " strEmps = strEmps & "[tblDepartments].fldDepartmentNo = tblStudents.fldDeptNo " strEmps = strEmps & "WHERE fldDepartmentName = '" & strVar & "' ORDER BY fldLastName" strPath = ThisWorkbook.Path & cstrPath Set connEmp = New ADODB.Connection Set rstEmps = New ADODB.Recordset connEmp.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & strPath & "'" rstEmps.Open strEmps, connEmp, adOpenKeyset, adLockOptimistic Call DisplayData End Sub 

我需要在Excel中将上面的代码写入Access内部连接(下面)。 我不明白如何做多个内部联接。 感谢您提供任何帮助!

 SELECT tblStudents.fldStudentNo, tblStudents.fldFirstName, tblStudents.fldLastName, tblStudents.fldTelephone, tblDepartments.fldDepartmentName, tblClasses.fldClassDate, tblClasses.fldClassName FROM (tblDepartments INNER JOIN tblStudents ON tblDepartments.[fldDepartmentNo] = tblStudents.[fldDeptNo]) INNER JOIN (tblClasses INNER JOIN tblStudentsAndClasses ON tblClasses.[fldClassNo] = tblStudentsAndClasses.[fldClassNo]) ON tblStudents.[fldStudentNo] = tblStudentsAndClasses.[fldStudentNo]; 

如果您使用短表别名,则可以避免重复反复使用长表名。 这应该有助于减less混淆。

 Option Explicit Public Sub Connect(strVar As String) Dim strEmps As String, strPath As String dim connEmp as New ADODB.Connection dim rstEmps as New ADODB.Recordset strEmps = "SELECT s.fldStudentNo, s.fldFirstName, s.fldLastName, s.fldTelephone, d.fldDepartmentName, c.fldClassDate, c.fldClassName" strEmps = strEmps & " FROM tblDepartments d" strEmps = strEmps & " INNER JOIN tblStudents s ON s.[fldDeptNo] = d.[fldDepartmentNo]" strEmps = strEmps & " INNER JOIN tblStudentsAndClasses sc ON sc.[fldStudentNo] = s.[fldStudentNo]" strEmps = strEmps & " INNER JOIN tblClasses c ON c.[fldClassNo] = sc.[fldClassNo]" strEmps = strEmps & " WHERE d.fldDepartmentName = '×××' ORDER BY s.fldLastName;" strEmps = replace(strEmps, "×××", strVar) strPath = ThisWorkbook.Path & chr(92) & cstrPath '.Path doesn't usually end in a backslash debug.print strPath connEmp.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & strPath & "';" set rstEmps = connEmp.Execute(strEmps) Call DisplayData rstEmps.close: set rstEmps = nothing connEmp.close: set connEmp = nothing End Sub 

编辑:没有build立一个完整的testing环境,这可能更接近你在找什么。 正如你还没有透露cstrPath的价值,我添加了一个反斜杠到这个工作cstrPath 。 另外请注意,我已经用空格连接string,所以行不会彼此碰撞。