我有一个SQL查询,该查询使用ctrl作为对象方法以几种不同的形式调用。它工作正常,但是当我通过click事件运行它时,它也将打开当前未加载的表单。查询返回我想要的结果,无论加载哪个,它都会同时对两种形式进行处理。
一次仅加载一个表单。两种形式都存在一个名为Team的下拉列表。该查询从该下拉列表中传递当前选择的项目,以返回分配给该团队的座席列表。
我知道问题的一部分是我使用or
语句查询的,该语句引用两种形式的值,但是我不确定如何更改它以引用活动形式。
Attendance
和reporting
是当前调用此查询的两个用户窗体的名称。它们都具有名为Team
的组合框控件。我已经尝试过activeform等。但是我似乎找不到找到使它起作用的方法。
Sub agents(ctrl As Object)
database_connect
Dim SQLStr As String
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim Counter As Long
SQLStr="select distinct[Agentname] from dbo.[Attendance] Where [Team]='" & _
attendance.Team.Value & "' or [Team] ='" & Reporting.Team.Value & "'"
If appconn.State = 0 Then
Call database_connect
End If
rs.Open SQLStr, appconn, adOpenStatic
With ctrl
Do
.AddItem rs![Agentname]
rs.MoveNext
Loop Until rs.EOF
End With
rs.Close
database_Disconnect
Set rs = Nothing
Exit Sub
End Sub
答案 0 :(得分:0)
1)首先,首先要引用必须加载表格的控件。
2)您以最奇怪的方式引用控件。查看并保存此URL http://access.mvps.org/access/forms/frm0031.htm
3)如果关闭了一种形式,则查询可能始终不返回任何内容。这是理想的输出吗?
答案 1 :(得分:0)
对于可能会发现类似问题的任何人,这是我使用的解决方案。
我使用功能来测试是否加载了用户窗体。
Public Function IsLoaded(formName As String) As Boolean
Dim frm As Object
For Each frm In VBA.UserForms
If frm.Name = formName Then
IsLoaded = True
Exit Function
End If
Next frm
IsLoaded = False
End Function
然后像这样调整我上面的代码
database_connect
Dim SQLStr As String
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim Counter As Long
If IsLoaded("Attendance") Then
SQLStr = "select distinct[Agentname] from dbo.[Attendance] Where [Team] ='" & attendance.Team.value & "'"
ElseIf IsLoaded("Reporting") Then
SQLStr = "select distinct[Agentname] from dbo.[Attendance] Where [Team] ='" & Reporting.Team.value & "'"
End If
If appconn.State = 0 Then
Call database_connect
End If
rs.Open SQLStr, appconn, adOpenStatic
With ctrl
Do
.AddItem rs![Agentname]
rs.MoveNext
Loop Until rs.EOF
End With
rs.Close
database_Disconnect
Set rs = Nothing
Exit Sub
现在它就像一种魅力!