使用内部联接(VBA)对动态表执行动态查询时出错

问题描述 投票:0回答:1

[我的英语很抱歉;)

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

我必须创建带有函数的动态查询。如果表未链接,但在同一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
sql vba ms-access inner-join
1个回答
0
投票

因为ANOTRIMESTRE是字符串,所以需要将它们用'引号引起来。

"HAVING (((DATOS_" & ANO & ".ANO)='" & ANO & "')" & _
"   AND ((DATOS_" & ANO & ".TRIMESTRE)='" & TRIMESTRE & "'))"
© www.soinside.com 2019 - 2024. All rights reserved.