Vba 使用MS Access Query根据用户输入从一个表切换到另一个表

Vba 使用MS Access Query根据用户输入从一个表切换到另一个表,vba,ms-access,Vba,Ms Access,老实说,我曾尝试在互联网上搜索,但没有找到实现这一目标的方法。所以我希望Stackoverflow能帮上忙。我可以选择(参数化、使用VBA等)。我不想创建多个查询,这些查询可能会因此每月增长 我每个月都会得到多个表,我必须使用同一个查询从这些新表中获取数据,我不想每次都更改我的查询或每次都编写一个新的查询。查询是这样的(我曾尝试对API端点或部门的名称进行异常命名): 选择MyDeptAprilLogs.apiproxy,Sum(MyDeptAprilLogs.Sum\u message\u c

老实说,我曾尝试在互联网上搜索,但没有找到实现这一目标的方法。所以我希望Stackoverflow能帮上忙。我可以选择(参数化、使用VBA等)。我不想创建多个查询,这些查询可能会因此每月增长

我每个月都会得到多个表,我必须使用同一个查询从这些新表中获取数据,我不想每次都更改我的查询或每次都编写一个新的查询。查询是这样的(我曾尝试对API端点或部门的名称进行异常命名):

选择MyDeptAprilLogs.apiproxy,Sum(MyDeptAprilLogs.Sum\u message\u count)作为SumOfsum\u message\u count

据我所知,从MyDeptAprilLogs来看,没有直接的方法可以实现这一点。使用VBA或表单,我们可以从用户那里获取输入并将其传递到查询,但我认为表名不能更改


我曾尝试通过VBA根据输入生成不同的表,但VBA的查询执行是永无止境的,并且会消耗资源和挂起。

据我所知,没有直接的方法来实现这一点。使用VBA或表单,我们可以从用户那里获取输入并将其传递到查询,但我认为表名不能更改


我曾尝试通过VBA根据输入生成不同的表,但VBA的查询执行永远不会结束,并且会消耗资源和挂起。

我建议创建一个QueryDef,然后通过VBA根据需要修改
.SQL

Sub sSwitchQuerySource(strTable As String)
    Dim strSQL As String
    strSQL = "SELECT L.apiproxy, Sum(L.sum_message_count) AS SumOfsum_message_count" _
        & " FROM [" & strTable & "] AS L " _
        & " GROUP BY L.apiproxy, L.response_status_code " _
        & " HAVING (((L.apiproxy)='MyDept-MyAPI-Endpoint1-v6' Or " _
        & " (L.apiproxy)='MyDept-MyAPI-Endpoint2-v5' Or " _
        & " (L.apiproxy)='MyDept-MyAPI-Endpoint3-v6') AND " _
        & " ((L.response_status_code)=200));"
    CurrentDb.QueryDefs("qryLog").SQL = strSQL
End Sub
在这段代码中,我将文本字符串周围的双引号替换为单引号,在表名周围使用方括号(以防表名中有空格),然后在
FROM`part中为表名(
AS L')添加别名

您可能还需要查看查询系统表
MSysObjects
,以填充一个组合框,其中列出了数据库中用户可以从中选择的匹配表


关于,

我建议创建一个QueryDef,然后根据需要通过VBA修改
.SQL

Sub sSwitchQuerySource(strTable As String)
    Dim strSQL As String
    strSQL = "SELECT L.apiproxy, Sum(L.sum_message_count) AS SumOfsum_message_count" _
        & " FROM [" & strTable & "] AS L " _
        & " GROUP BY L.apiproxy, L.response_status_code " _
        & " HAVING (((L.apiproxy)='MyDept-MyAPI-Endpoint1-v6' Or " _
        & " (L.apiproxy)='MyDept-MyAPI-Endpoint2-v5' Or " _
        & " (L.apiproxy)='MyDept-MyAPI-Endpoint3-v6') AND " _
        & " ((L.response_status_code)=200));"
    CurrentDb.QueryDefs("qryLog").SQL = strSQL
End Sub
在这段代码中,我将文本字符串周围的双引号替换为单引号,在表名周围使用方括号(以防表名中有空格),然后在
FROM`part中为表名(
AS L')添加别名

您可能还需要查看查询系统表
MSysObjects
,以填充一个组合框,其中列出了数据库中用户可以从中选择的匹配表


在查询对象中,

表不能是动态的。需要修改VBA和QueryDefs。这是否回答了您的问题?June,你能用代码示例解释一下吗?这会有帮助的。我看到另一个用户在评论(回复)基于VBA的性能。你能查一下吗?这张表有大量的记录,所以我也倾向于这种可能性。无论如何,一个代码示例会有所帮助,我可以尝试一下。查询对象中的表不能是动态的。需要修改VBA和QueryDefs。这是否回答了您的问题?June,你能用代码示例解释一下吗?这会有帮助的。我看到另一个用户在评论(回复)基于VBA的性能。你能查一下吗?这张表有大量的记录,所以我也倾向于这种可能性。无论如何,这是一个代码示例,我可以试试。您是否尝试过VBA使用QueryDefs修改查询对象?您是否尝试过VBA使用QueryDefs修改查询对象?谢谢Applecore。我会尝试一下,让你知道。谢谢Applecore。我会试试看,然后告诉你。