Sql server SQL和MS access-筛选表单上的数据

Sql server SQL和MS access-筛选表单上的数据,sql-server,ms-access,Sql Server,Ms Access,我使用SQL 2005作为后端,MS Access作为前端 现在,我用视图对数据进行了过滤,到目前为止没有问题,但我遇到了一些问题 在access中,我有一个表单,在该表单上,我有一个字段1,用于通过查询筛选表单中需要的数据。例如:姓、名或DOB。在Access中,我使用表达式生成器将查询指向该字段,并获得了过滤器。 既然我在Access中创建视图时无法对该字段进行筛选,那么在这个新环境中我该怎么做呢 我在考虑sp,但我不知道该怎么做 有什么想法吗 我在考虑sp,但我不知道该怎么做。如果您仍然希

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

现在,我用视图对数据进行了过滤,到目前为止没有问题,但我遇到了一些问题

在access中,我有一个表单,在该表单上,我有一个字段1,用于通过查询筛选表单中需要的数据。例如:姓、名或DOB。在Access中,我使用表达式生成器将查询指向该字段,并获得了过滤器。 既然我在Access中创建视图时无法对该字段进行筛选,那么在这个新环境中我该怎么做呢

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

有什么想法吗


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

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

设置触发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

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

设置触发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、2或3个框,然后按下按钮

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

Me.RecordSource = "select * from tblCustomers where LastName = '" & me.txtLastName "'"
上面是一行代码。我只是觉得没有必要像其他人在这里发布的代码那样多


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

您没有提到这些文本框是否与数据的形式相同,也没有提到每个文本框是否可选,如果它们不是可选的,那么您是否填写了1、2或3个框,然后按下按钮

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

Me.RecordSource = "select * from tblCustomers where LastName = '" & me.txtLastName "'"
上面是一行代码。我只是觉得没有必要像其他人在这里发布的代码那样多


如果您希望将所有3个框都设置为可选框,或者如果您希望基于多个框进行搜索,则可以展开您的问题,但我可以告诉您,您不需要在此处发布大量的代码,但上面的一行代码就足够了。

当然谢谢Kevin,您可以使用ADO.Tony发布详细信息吗,我已经发布了一些代码,应该为您指出正确的方向谢谢凯文,这就是我一直在寻找的。现在让我忙起来测试一下。您仍然可以将表单绑定到记录集:Set me.recordset=rst,并且避免对每个控件进行编码。我必须承认,我对Vb有点弱,而且我注意到我无法编辑来自SP的数据结果……这是我需要的最重要的事情……当然,谢谢Kevin,你能用ADO发布详细信息吗?托尼,我已经发布了一些代码,这些代码应该能为你指明正确的方向。谢谢凯文,这就是我要找的。现在让我忙着测试它。你仍然可以将表单绑定到记录集:Set me.recordset=rst,并且避免对每个控件进行编码。我不得不承认,我对Vb有点弱,而且我注意到我无法编辑来自SP的数据结果…这是我需要的最重要的事情。。