我正在使用CurrentDb.QueryDefs对象来更改我的查询中的sql。这很好,直到我改变了select子句。我希望查询现在只显示在我的新选择子句中命名的字段。相反,列标题仍然显示,但没有值。我在子窗体中显示查询。访问vba修改查询def以更改列显示?
如何强制子窗体/查询只显示指定的列可以更改点击按钮?
原因:这是一种高级搜索表单,其中复选框代表每个字段,用户可以在每次搜索时删除和添加字段。
我正在使用CurrentDb.QueryDefs对象来更改我的查询中的sql。这很好,直到我改变了select子句。我希望查询现在只显示在我的新选择子句中命名的字段。相反,列标题仍然显示,但没有值。我在子窗体中显示查询。访问vba修改查询def以更改列显示?
如何强制子窗体/查询只显示指定的列可以更改点击按钮?
原因:这是一种高级搜索表单,其中复选框代表每个字段,用户可以在每次搜索时删除和添加字段。
你不能重新查询,您必须刷新子窗体的源对象:
MySubformControl.SourceObject = ""
MySubformControl.SourceObject = "Query.MyQuery"
为了测试,我创建了一个表table1与田字段1,...,字段4,那么表格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
这个让我想起上周的另一个问题。看看有没有对你有用的答案:http://stackoverflow.com/questions/6194992/displaying-a-recordset-on-a-form-in-access-2010-using-vba – HansUp 2011-06-09 19:21:44
@HansUp - 不完全,我已经显示了数据。我的问题是更新显示。 – MAW74656 2011-06-09 20:08:31
我以为你想要一个适应自己的形式,以响应其记录源中的不同字段集合。这就是HK1所描述的。你的目标有何不同? – HansUp 2011-06-09 20:20:42