首页 > 解决方案 > 使用内部联接 (VBA) 对动态表执行动态查询时出错

问题描述

对不起我的英语;)

我在互联网上咨询了很多,但我找不到解决方案

我必须创建一个带有函数的动态查询。如果表未链接,但在同一个 bbdd ACCESS 2016 中,则此代码对我有用。但我需要它们在另一个 bbdd 中。你能帮助我吗?

它返回给我数据丢失。

查询是在访问中进行的,并在 vba 中进行修改,添加变量。

Ano 和 Trimestre 是数字,其他是文本。

Public Function PRUEBA_INNER(ByVal TRIMESTRE As String,ByVal ANO As String) As Boolean
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim StrSQL As String
Set db = CurrentDb
    StrSQL = "SELECT " & _
    "PERSONAS.NOMBRE, " & _
    "PERSONAS.MAIL, " & _
    "PERSONAS.[NUMR_COLEG], " & _
    "DATOS_" & ANO & ".ANO, " & _
    "DATOS_" & ANO & ".TRIMESTRE " & _
    "FROM " & _
    "PERSONAS " & _
    "INNER JOIN DATOS_" & ANO & " " & _
    "ON PERSONAS.[NUMR_COLEG] = DATOS_" & ANO & ".NUMR_COLEG " & _
    "GROUP BY " & _
    "PERSONAS.NOMBRE, " & _
    "PERSONAS.MAIL, " & _
    "PERSONAS.[NUMR_COLEG], " & _
    "DATOS_" & ANO & ".ANO, " & _
    "DATOS_" & ANO & ".TRIMESTRE " & _
    "HAVING (((DATOS_" & ANO & ".ANO)=" & ANO & ")" & _
    " AND ((DATOS_" & ANO & ".TRIMESTRE)=" & TRIMESTRE & "))"
Set rs = db.OpenRecordset(StrSQL)
Do Until rs.EOF
    debug.print rs!nombre
    rs.MoveNext
Loop
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing
End Function

调试打印:

SELECT 
PERSONAS.NOMBRE, 
PERSONAS.MAIL, 
PERSONAS.[NUMR_COLEG], 
DATOS_2018.ANO, 
DATOS_2018.TRIMESTRE 
FROM 
PERSONAS 
INNER JOIN 
DATOS_2018 
ON 
PERSONAS.[NUMR_COLEG] = DATOS_2018.NUMR_COLEG 
GROUP BY 
PERSONAS.NOMBRE, 
PERSONAS.MAIL, 
PERSONAS.[NUMR_COLEG], 
DATOS_2018.ANO, 
DATOS_2018.TRIMESTRE 
HAVING (((DATOS_2018.ANO)=2018) AND ((DATOS_2018.TRIMESTRE)=2))

错误信息:

nº 3061
Few parameters.
1 expected

标签: sqlvbams-accessinner-join

解决方案


推荐阅读