问题
Access里面有组合框 可以很快地从多行记录中选择所需要的数据 但是如果记录超过 呢?选择就非常不方便了 我该怎么办?
回答
其实很多数据都可以分类(分层)来选择 而且我们可以预先筛选数据
以下这个示例就是用重复打开同一个窗体类来完成多层次数据的选择
当然 还包括预先筛选数据功能
好了 现在开始
建立一个窗体(testForm) 里面有一个文本框(text ) 一个按钮(Command )
建立一个窗体(selectForm) 里面有一个列表框(list )
在testForm中的文本框的 更新后 事件中写入以下代码以打开品名选择窗体(selectForm) 并对其中的列表框(list )的行来源(RowSource)进行赋值
Private Sub Text _AfterUpdate()
DoCmd OpenForm selectform
这行代码就实现了BTYPE表的模糊检索 使用的是 WHERE 子句中的 LIKE 关键字进行通配
Forms( selectform ) List RowSource = SELECT btype soncount btype UserCode btype FullName btype typeId FROM btype WHERE btype fullname like * & Text Value & *
End Sub
在testForm中的命令按钮的 单击 事件中写入以下代码以打开品名选择窗体 按分类检索
然后再在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 List _DblClick(Cancel As Integer)
checkYouSelect
End Sub
Private Sub List _KeyPress(KeyAscii As Integer)
本过程实现全键盘操作
If KeyAscii = Then
checkYouSelect
End If
End Sub
Sub closeAllSelectForm(strFormName As String)
通用过程
本过程用来关闭所有的指定名称的窗体
For Each objForm In Forms
If objForm Name = strFormName Then
DoCmd Close acForm objForm Name
End If
Next objForm
End Sub
Sub checkYouSelect()
通用过程
检测你的选择
如果发现 suncount 列为 (表示没有下一层了)
就可以把你选定的产品名称放到文本框中了
On Error Resume Next
Set f = New Form_SelectForm
Dim objForm As Form
If List Column( ) = Then
Forms( testform ) Text Value = List Column( )
closeAllSelectForm SelectForm
Else
f Visible = True
f List RowSource = SELECT btype soncount btype UserCode btype FullName btype typeId FROM btype WHERE parid= & List Value &
End If
End Sub