注册
 找回密码
 注册
江西广告网
查看: 306|回复: 0
打印 上一主题 下一主题

access解决组合框无法满足大量数据的问题

[复制链接]

该用户从未签到

1
跳转到指定楼层
发表于 2008-12-10 09:57:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x

  问题:
  
   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
   <
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表