Office中国论坛/Access中国论坛

标题: 为何子窗体控件获取焦点后,使用 DoCmd.RunCommand acCmdFilterBySelection无法筛选 [打印本页]

作者: wu8313    时间: 2005-9-17 18:30
标题: 为何子窗体控件获取焦点后,使用 DoCmd.RunCommand acCmdFilterBySelection无法筛选
所以只好写如下的代码 来完成 按照选定内容筛选。

问题就是:针对 备注 类型无法筛选,没有解决。应该可以筛选的,使用工具栏可以筛选 备注 类型。

---------------------------------代码节选------------------

Option Compare Database

Option Explicit

'*************** by wu8313 2005-09-16***************

'1、使用工具栏中的 按选定内容筛选 完全可以实现如下代码的功能 _

本人只是想看看这种筛选用代码该怎样实现

'2、为何子窗体控件获取焦点后,使用 DoCmd.RunCommand acCmdFilterBySelection _

方法,根本不能执行筛选.所以只好写如下的代码 来完成 按照选定内容筛选

'***************************************************

Public ctrname As String

Public ctrvalue As Variant

'为何将 ctrname 定义为 string ?

    '因为字段的名称将返回一个字符串,事先是很明确的。并且不能使用 variant 类型,因为如果字段名称定义为 5632 的话 _

    'variant 类型将会按照最小的内存空间来进行存储,5632将会成为一个长整形变量,不同数据类型的筛选代码又没有定义长整型的连接字符串

   

'为何将 ctrvalue 定义为 variant ?

    '因为获得焦点的 字段的数据类型不同,将会使用不同的连接字符串,而变体类型恰好可以自由转换自身的数据类型__

    '根据不同的变量类型来



Public Function variant_type() As String

'根据不同的变量类型确定--数据类型

Select Case VarType(ctrvalue) 'vartype的返回值为 长整型

       Case 8

       variant_type = "文本"

       Case 2, 3, 4, 5, 6, 17

       variant_type = "数字"

       Case 7

       variant_type = "日期/时间"

       Case 9

       variant_type = "ole对象"

       Case 11

       variant_type = "布尔"

       Case 0

       variant_type = "empty"

       Case 1

       variant_type = "null"

       Case 10

       variant_type = "error"

       Case Else

       variant_type = "其他的数据类型"

End Select

End Function

------------------------------------

Private Sub 命令8_Click() '执行筛选

'根据不同的数据类型来确定使用的连接字符串

Select Case variant_type

       Case "文本"

       Call myfilter_string

       Case "数字"

       Call myfilter_isnumeric_true

       Case "日期/时间"

       Call myfilter_date_time

       Case "布尔"

       Call myfilter_boolean

       Case "ole对象"

       MsgBox "ole对象无法筛选"

       Case "null", "empty"

       MsgBox "空的字符串/null值/ole对象,无法筛选"

       Case Else

       '什么也不做

       Exit Sub

       End Select

End Sub

----------------------------------------------

Private Sub 命令15_Click()  '取消筛选

Me.FilterOn = False

Me.文本9.value = Null

Me.文本11.value = Null

Me.文本13.value = Null

End Sub

---------------------------------------------------------------------

[attach]13165[/attach]



[此贴子已经被作者于2005-9-17 10:34:48编辑过]


作者: sgrshh29    时间: 2005-9-17 22:10
太复杂了![em06]![em06]!.如对整个字段筛选,二句即可解决.而且可以分别针对主窗体和子窗体. Screen.PreviousControl.SetFocus

DoCmd.RunCommand acCmdFilterBySelection

如对字段里的部分字符进行筛选,没做过,不过估计也不会这么复杂.不知估计的对不对?
作者: wu8313    时间: 2005-9-18 00:36
以下是引用sgrshh29在2005-9-17 14:10:00的发言:

太复杂了![em06]![em06]!.如对整个字段筛选,二句即可解决.而且可以分别针对主窗体和子窗体. Screen.PreviousControl.SetFocus

DoCmd.RunCommand acCmdFilterBySelection

如对字段里的部分字符进行筛选,没做过,不过估计也不会这么复杂.不知估计的对不对?

如果针对 部分字符 进行筛选,我个人感觉很有点难度。

有空的时候,再看看怎样解决。

------------------------------------------------

使用 二楼的方法

Screen.PreviousControl.SetFocus

DoCmd.RunCommand acCmdFilterBySelection

可以很好的实现 按照选定内容筛选 的功能。

-------------------------------------------------



[此贴子已经被作者于2005-9-17 19:46:09编辑过]


作者: flying365    时间: 2006-10-9 05:10
那把当前记录在新窗体中打开呢?




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3