Ms access 是否访问vba修改查询定义以更改显示的列?

Ms access 是否访问vba修改查询定义以更改显示的列?,ms-access,vba,Ms Access,Vba,我正在使用CurrentDb.querydfs对象更改查询中的sql。这很有效,直到我更改select子句。我希望查询现在只显示在我的新select子句中命名的字段。相反,列标题仍然显示,但没有值。我正在子窗体中显示查询 如何强制子窗体/查询仅显示可在单击按钮时更改的指定列 原因:这是一个高级搜索表单,其中复选框表示每个字段,用户可以在每次搜索时删除和添加字段。您不能重新查询,必须刷新子表单的源对象: MySubformControl.SourceObject = "" MySubformCon

我正在使用CurrentDb.querydfs对象更改查询中的sql。这很有效,直到我更改select子句。我希望查询现在只显示在我的新select子句中命名的字段。相反,列标题仍然显示,但没有值。我正在子窗体中显示查询

如何强制子窗体/查询仅显示可在单击按钮时更改的指定列


原因:这是一个高级搜索表单,其中复选框表示每个字段,用户可以在每次搜索时删除和添加字段。

您不能重新查询,必须刷新子表单的源对象:

MySubformControl.SourceObject = ""
MySubformControl.SourceObject = "Query.MyQuery"
为了进行测试,我创建了一个表Table1,其中包含字段Field1、…、Field4,然后是一个包含4个复选框和一个子表单的表单,然后是一个查询Query1,其中包含来自Table1的字段。以下是表单背后的代码(我让Access命名我的所有对象,因此子表单称为Child8):


这让我想起上周的另一个问题。看看这些答案是否对你有用:@HansUp-不完全是,我已经显示了数据。我的问题是更新显示。我以为您需要一个表单,它可以根据其记录源中的不同字段集进行自我调整。这就是@HK1所描述的。你的目标有什么不同?@HansUp-它大不相同@HK1甚至还没有以任何方式显示结果<代码>“如何在Access中显示记录集记录?”他问道。我已经展示了我的,我只是不知道以后如何更新。我几乎可以肯定你和我不在同一页上。斯科特问了你引用的问题@HK1的部分响应是“…将控件上的controlsource设置为与记录集中的一个字段相对应。在每个未使用的控件上,需要将其ColumnHidden属性设置为true。您还必须更改相关标签的标题,以显示每个可见控件的相应列名。”你说对了!我唯一缺少的是将SourceObject设置为空字符串,然后返回查询。谢谢没问题。不必严格使用空字符串——您可以注释掉它,它仍然可以工作,但它显示了我认为下一行隐含的功能。是的,我刚刚测试了它,这是有意义的。我以前尝试过使用.Requery,它保留了相同的字段,但没有数据。
Private Sub Check0_AfterUpdate()
    Rewrite_Query
End Sub

Private Sub Check2_AfterUpdate()
    Rewrite_Query
End Sub

Private Sub Check4_AfterUpdate()
    Rewrite_Query
End Sub

Private Sub Check6_AfterUpdate()
    Rewrite_Query
End Sub

Private Sub Rewrite_Query()

    Dim qdf     As QueryDef
    Dim strSQL  As String

    Set qdf = CurrentDb.QueryDefs("Query1")
    If Check0.Value = True Then
        If Len(strSQL) > 0 Then strSQL = strSQL & ","
        strSQL = strSQL & "Field1"
    End If

    If Check2.Value = True Then
        If Len(strSQL) > 0 Then strSQL = strSQL & ","
        strSQL = strSQL & "Field2"
    End If

    If Check4.Value = True Then
        If Len(strSQL) > 0 Then strSQL = strSQL & ","
        strSQL = strSQL & "Field3"
    End If

    If Check6.Value = True Then
        If Len(strSQL) > 0 Then strSQL = strSQL & ","
        strSQL = strSQL & "Field4"
    End If

    strSQL = "SELECT " & strSQL & " FROM Table1"

    qdf.SQL = strSQL
    qdf.Close
    Set qdf = Nothing

    Child8.SourceObject = ""
    Child8.SourceObject = "Query.Query1"

End Sub