问题 : Access里面有 组合 框,可以很快地从多行记录中选择所需要的 数据 。但是如果记录超过1000-2000呢?选择就非常不方便了。我该怎么办? 回答: 其实很多 数据 都可以分类(分层)来选择,而且我们可以预先筛选 数据 。 以下这个示例就是用重复打开同
问题:
Access里面有
组合框,可以很快地从多行记录中选择所需要的
数据。但是如果记录超过1000-2000呢?选择就非常不方便了。我该怎么办?
回答:
其实很多
数据都可以分类(分层)来选择,而且我们可以预先筛选
数据。
以下这个示例就是用重复打开同一个窗体类来完成多层次
数据的选择。
当然,还包括预先筛选
数据功能。
好了,现在开始:
1、建立一个窗体(testForm),里面有一个文本框(text0),一个按钮(Command2)。
2、建立一个窗体(selectForm),里面有一个列表框(list0)。
3、在testForm中的文本框的“更新后”事件中写入以下代码以打开品名选择窗体(selectForm),并对其中的列表框(list0)的行来源(RowSource)进行赋值。
Private Sub Text0_AfterUpdate()
DoCmd.OpenForm "selectform"
'这行代码就实现了BTYPE表的模糊检索,使用的是 WHERE 子句中的 LIKE 关键字进行通配
Forms("selectform").List0.RowSource = "SELECT btype.soncount, btype.UserCode, btype.FullName, btype.typeId FROM btype WHERE btype.fullname like '*" & Text0.Value & "*' "
End Sub
4、在testForm中的命令按钮的“单击”事件中写入以下代码以打开品名选择窗体,按分类检索
5、然后再在testForm中输入以下代码以完成多次打开窗体本身并显示子类中
数据的功能。
为了能够使代码重复利用,写了两个通用过程
Option Compare Database
Dim f
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
'先设定窗体的“键预览”属性为“是”
'本过程将加快你的输入速度
'如果按 ESCAPE 键,就关闭窗体
If KeyCode = vbKeyEscape Then
closeAllSelectForm "SelectForm"
End If
End Sub
Private Sub List0_DblClick(Cancel As Integer)
checkYouSelect
End Sub
Private Sub List0_KeyPress(KeyAscii As Integer)
'本过程实现全键盘操作
If KeyAscii = 13 Then
checkYouSelect
End If
End Sub
Sub closeAllSelectForm(strFormName As String)
'通用过程1
'本过程用来关闭所有的指定名称的窗体
For Each objForm In Forms
If objForm.Name = strFormName Then
DoCmd.Close acForm, objForm.Name
End If
Next objForm
End Sub
Sub checkYouSelect()
'通用过程2
'检测你的选择
'如果发现 suncount 列为 0(表示没有下一层了)
'就可以把你选定的产品名称放到文本框中了
On Error Resume Next
Set f = New Form_SelectForm
Dim objForm As Form
If List0.Column(0) = 0 Then
Forms("testform").Text0.Value = List0.Column(2)
closeAllSelectForm "SelectForm"
Else
f.Visible = True
f.List0.RowSource = "SELECT btype.soncount, btype.UserCode, btype.FullName, btype.typeId FROM btype WHERE parid='" & List0.Value & "'"
End If
End Sub