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

Posted

技术标签:

【中文标题】SQL 和 MS 访问 - 过滤表单上的数据【英文标题】:SQL and MS access- filtering of the data on the form 【发布时间】:2010-10-03 19:11:10 【问题描述】:

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

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

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

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

有什么想法吗?

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

【问题讨论】:

【参考方案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

【讨论】:

当然感谢 Kevin,您能否使用 ADO 发布详细信息。 托尼,我已经发布了一些代码,应该为您指明正确的方向 谢谢凯文,这就是我要找的。让我现在忙起来测试一下。 您仍然可以将表单绑定到记录集:设置 Me.Recordset = rst 并避免对每个控件进行编码。 好吧,我不得不承认我在 Vb 上有点弱,而且我注意到我无法编辑来自 SP 的数据结果......这是我需要的最重要的事情...... 【参考方案2】:

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

如果您只是想查找具有给定姓氏的人,那么在未绑定姓氏框的更新后事件中,只需执行:

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

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

如果您希望将所有 3 个框都设为可选,或者您希望基于多个框进行搜索,您可以扩展您的问题,但我宁愿告诉您,您不需要大量的代码贴在这里,但是上面的一行代码就足够了。

【讨论】:

以上是关于SQL 和 MS 访问 - 过滤表单上的数据的主要内容,如果未能解决你的问题,请参考以下文章

表单过滤器之间的 MS-Access

MS 访问错误。 3464,过滤器类型不匹配,如何正确设置过滤器?

根据 MS Access 中的用户过滤子表单

使用表单过滤交叉表查询 MS Access 2010

加入表和过滤并获取聚合函数sql访问

MS Access过滤