我有一个列表框名称动物,行源设置为以下代码,其中查询“animal”是一个直通查询。但是,列表框不会填充任何动物。注意:如果我运行查询“animal”作为独立传递查询它运行正常,它只是不填充列表框。当点击列表框时,几乎就好像查询没有执行一样。
Private Sub animallist_Enter()
Dim Q As QueryDef
Dim DB As Database
' Use for dynamic SQL statement'
Dim strSQL As String
' Modify the Query.
Set DB = CurrentDb()
Set Q = DB.QueryDefs("animal")
strSQL = "Select distinct(animal) From AnimalDB.Animaltable"
Q.SQL = strSQL
Q.Close
Me.animal.RowSource = strSQL
End Sub
如果我通过ODBC连接到“AnimalDB.Animaltable”并运行以下代码(将查询切换为选择而不是通过),列表框将填充动物。
Private Sub animallist_Enter()
Dim Q As QueryDef
Dim DB As Database
' Use for dynamic SQL statement'
Dim strSQL As String
' Modify the Query.
Set DB = CurrentDb()
Set Q = DB.QueryDefs("animal")
strSQL = "Select distinct(animal) From [AnimalDB_Animaltable]"
Q.SQL = strSQL
Q.Close
Me.animal.RowSource = strSQL
End Sub
为什么传递查询不会填充列表框?
答案 0 :(得分:3)
您正在设置querydef,但不使用它。
Me.animal.RowSource = strSQL
应该是
Me.animal.RowSource = "animal"
或
Me.animal.RowSource = Q.Name
您的第二个代码示例有效,因为Access SELECT SQL可以在Access查询中使用,也可以直接用作行源。
P.S。 Q.Close
应为Set Q = Nothing
,但实际上并不需要,因为它是一个局部变量,在子末尾被销毁。