我正在使用CurrentDb.QueryDefs对象来更改查询中的sql。这很有效,直到我更改select子句。我希望查询现在只显示我的新select子句中指定的字段。相反,列标题仍然显示,但没有值。我在子表单中显示查询。
如何强制子窗体/查询仅显示可以在按钮单击时更改的指定列?
原因:这是一个高级搜索表单,其中复选框代表每个字段,用户可以在每次搜索时删除和添加字段。
答案 0 :(得分:2)
你不能重新查询,你必须刷新子表单的源对象:
MySubformControl.SourceObject = ""
MySubformControl.SourceObject = "Query.MyQuery"
为了测试,我创建了一个表Table1,其中包含字段Field1,...,Field4,然后是一个包含4个复选框和一个子表单的表单,然后是一个查询Query1,其中包含Table1中的字段。这是表单背后的代码(我让Access命名所有对象,因此子表单称为Child8):
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