如何解决组合框无法满足大量数据的选择问题?
问题:
Access里面有组合框,可以很快地从多行记录中选择所需要的数据。但是如果记录超过1000-2000呢?选择就非常不方便了。我该怎么办? |
---|
回答:
|
其实很多数据都可以分类(分层)来选择,而且我们可以预先筛选数据。
以下这个示例就是用重复打开同一个窗体类来完成多层次数据的选择。
当然,还包括预先筛选数据功能。
在阅读本文前请先参考:
《新手来看:如何设计表结构便于treeview显示?》
http://access911.net/index.asp?board=4&recordid=75FABE1E12DC
一文,以了解如何定义数据表结构可以方便的分类并显示。
并阅读:
《如何将一个窗体重复打开2遍,并且每一遍打开的窗体显示不同的数据?》
http://access911.net/index.asp?board=4&recordid=72FAB11E15DC
一文,以了解 __ ACCESS __ 中一个 __ FORM __ 其实就是一个类
好了,现在开始:
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
详细示例程序请参考:
http://www.access911.net/index.asp?board=8&recordid=77FAB71E
**http://access911. net ** 站长收藏