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 |