SQL和MS访问 - 过滤表单上的数据

时间:2010-10-03 19:11:11

标签: sql-server ms-access

我使用SQL 2005作为后端,MS Access作为前端。

现在,我用视图过滤了所有数据,到目前为止没有任何问题,但我遇到了一些问题。

在访问中我有一个表单,在那个表单上我有一个field1,我用它来过滤我想要的那个表单中的数据。示例:Last,First Name或DOB。在Access中我使用表达式构建器将查询指向该字段,然后我得到了我的过滤器。 现在我如何在这个新环境中执行此操作,因为当我创建视图时(在Access中)我无法在该字段上进行过滤。

我在思考sp,但我不知道该怎么做。

有什么想法吗?

我在思考sp,但我不知道该怎么做。

2 个答案:

答案 0 :(得分:1)

如果您仍希望将此表单保留为正常的“绑定”访问表单,则可以执行此类操作。

设置触发SP的传递查询。其基本格式与

一致
EXEC [dbo].[spAgents_with_more_than_X_days_sick_by_Team] @Date_from = N'2009-09-14', @Date_to = N'2010-09-14', @Team_ID = N'TEM1', @Days_sick =5

然后在打开这样的表单时修改它

Set qDef = DBEngine(0)(0).QueryDefs("RqryAgents_more_than_X_sicks_detail_2")
With qDef
    .Connect = strSQL_con_string
    .SQL = "EXEC [dbo].[spAgents_with_more_than_X_days_sick_by_Team]"
    .SQL = .SQL & " @Date_from = N'" & Format(Me.txtDate_from, "yyyy-mm-dd") & "', "
    .SQL = .SQL & "@Date_to = N'" & Format(Me.txtDate_to, "yyyy-mm-dd") & "', "
    .SQL = .SQL & "@Team_ID = N'" & Me.txtTeam_ID & "', "
    .SQL = .SQL & "@Days_sick =" & Me.txtDays_sick
End With

这应该可以正常工作但是如果它是我(我知道这并不是每个人的偏好)但是我会把它作为一个未绑定的表单并通过使用ADO触发SP来填充记录集并从那里开始填充它。

如果您想了解如何操作的详细信息,那么只需询问,我将发布一个示例

编辑:添加了代码示例

Dim cmd as new ADODB.Command
Dim dbCon as new ADODB.Connection
Dim rst as new ADODB.Recordset
dbCon.ConnectionString=”Your_Connection_string”
dbCon.open

With cmd
    .ActiveConnection = dbCon
    .CommandText = "spYour SP"
    .CommandType = adCmdStoredProc
    .NamedParameters = True
    .Parameters.Append .CreateParameter("@Your_pram1", adVarChar, adParamInput, 20, Format(Me.txtDate, "yyyy-mm-dd"))
    .Parameters.Append .CreateParameter("@Your_pram2", adSmallInt, adParamInput, 0, Me.cboPhone_skill)
End With

Set rst = cmd.Execute()
With rst
    If .EOF=False then
    Me.txtYour_text_box_1=!Your_SP_field_1
    Me.txtYour_text_box_2=!Your_SP_field_3
    Me.txtYour_text_box_3=!Your_SP_field_2
    End if
End with
Rst.close
Dbcon.close
Set rst=nothing
Set cmd=nothing

设置dbcon = nothing

答案 1 :(得分:0)

您没有提及这些文本框实际上是否与数据具有相同的形式,并且您没有提及每个文本框是否可选,如果它们不是可选的,那么您是否填写了1,2或3个盒子,然后按一个按钮?

如果您只是想找到具有给定lastName的人,那么在un bound lastname框的after update事件中,只需转到:

Me.RecordSource = "select * from tblCustomers where LastName = '" & me.txtLastName "'"

以上是一行代码。我不认为需要这么多代码,因为其他人发布在这里。

如果你想让所有3个盒子都可选,或者你想要根据多个盒子进行搜索,你可以扩展你的问题,但我宁愿告诉你,你不需要代码量发布在这里,但上面的一行代码就足够了。