你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 跟高手学编程
在VB+Access系统中实现多项条件查询 (上)
 

  本文以“人事档案”数据库为例,介绍在VBAccess系统中实现单项条件查询与多项条件查询的程序设计方法。

关键词 数据库  查询  VB  Access  事件代码

一、前言

对数据库信息进行查询检索是数据库管理软件的主要功能之一,也是其难点之一。本文以“人事档案”数据库为例,在Visual Basic 6.0+Sp3Microsoft Access2000环境下,介绍在VBAccess系统中实现单项条件查询与多项条件查询的程序设计方法。

 

二、字段及公共变量

假设“人事档案”数据库Archives.mdb已经生成(位于当前路径下),库中有 “人事档案”表,表中有12条记录。为简化说明,假设表中仅有如下几个字段: [姓名]TEXT(4)[性别]TEXT(1)[籍贯]TEXT(8)[出生年月]DATE[政治面貌]TEXT(8)[文化程度]TEXT(8)

其中“性别、政治面貌、文化程度”三个字段的值只能从列表中选择,以下简称“下拉列表字段”,“性别”的列表值有“男、女”两项;“政治面貌”的列表值有“中共党员、共青团员、民主党员、群众”四项;“文化程度”的列表值有“本科以上、大学本科、大学专科、专科以下”四项。

另外,在模块(Modbas)中定义公共变量如下:

Public QueryStr As String            '查询条件串

Public ConditionNo As Integer        '条件数

Public CombOrText As Boolean       '选择了Combo项还是Text项(即是否选择了下拉列表字段)

Public Combo(3) As String           '下拉列表字段数组,若增加下拉列表字段数,则增加此数组维数

三、查询主窗体

本查询程序示例包含三个窗体:查询主窗体(FrmQuery)、单项条件查询窗体(FrmSingle)、多项条件查询窗体(FrmMany)。其中查询主窗体(图一)上有如下几类控件:

 

 

 

 

 

 

 

 

 

 

 

 

 

1、三个文本框Text1(1)Text1(2)Text1(3)分别显示姓名、籍贯、出生年月等字段的值;

2、三个下拉列表框Combo1(1)Combo1(2)Combo1(3) 分别显示性别、政治面貌、文化程度等字段的值;

3RichTextBox1控件用于显示个人简历;

4Data1控件的数据库连接方式(Connect)采用VB系统默认的Access 2000(视Microsoft Office版本而定)。可分别在Data1控件的DatabaseNameRecordSource属性中设置Data1所关联的数据库文件名及数据表名,亦可在主窗体的Form_Load中加入如下代码:

Private Sub Form_Load()

    Dim FileName As String

    If Right(App.Path, 1) = "\" Then               ' App.Path 为根目录

      FileName = App.Path + "Archives.mdb"

    Else

      FileName = App.Path + "\Archives.mdb"

    End If

    Set File_db = OpenDatabase(FileName)         '打开人事档案数据库

    Data1.DatabaseName = FileName

    Data1.RecordSource = "人事档案"             '关联人事档案表

    Data1.Refresh

End Sub

5MSFlexGrid1控件的数据源(DataSource)为Data1,列数由数据源中“人事档案”表的字段数而定(照片字段不予考虑),本例为6列,固定1行用于显示字段名。

6、几个重要的命令键Command1(单项查询)、Command2(多项查询)、Command3(清除条件)。

四、单项条件查询

1、单项条件查询窗体


在查询主窗体中点击“单项查询”将弹出单项条件查询窗体(图二)。

窗体上有Combo1Combo2Combo3三个下拉列表框及一个Text1文本框。其中,查询项目下拉列表(Combo1)为查询主窗体上Data1所关联的数据库的字段;条件关系下拉列表(Combo2)为数学关系符“=、<>、<、≤、>、≥、Like(包含)、Not Like(不包含)”;查询信息为下拉列表选项(Combo3)或输入值(Text1)。

当查询项目为“性别、政治面貌、文化程度”等列表字段时,隐藏Text1控件,显示Combo3控件,此时查询者可在Combo3中选择要查询的信息项;当查询项目选择“姓名、籍贯、出生年月”等非列表字段时,隐藏Combo3控件,显示Text1控件,此时查询者可在Text1中输入要查询的信息值。

2、单项条件查询代码

⑴、单项条件查询窗体的Form_Load代码,主要用于向Combo1中添加要查询的字段。

Private Sub Form_Load()

    QueryStr = ""

    For i = 0 To FrmQuery.Data1.Recordset.Fields.Count – 1      '字段数

        Combo1.AddItem FrmQuery.Data1.Recordset.Fields(i).Name

    Next

End Sub

    ⑵、点击Combo1,选择一个要查询的字段后,判断是否选择了“性别、政治面貌、文化程度”等下拉列表字段,并据此控制Combo3Text1的显示与隐藏及Combo3的列表值。Combo1的点击事件代码如下:

Private Sub Combo1_Click()

On Error GoTo ErrDo

CombOrText = True

Select Case Combo1  '下拉列表字段

     Case "性别"

          i = 1

     Case "政治面貌"

          i = 2

     Case "文化程度"

          i = 3

     Case Else

         CombOrText = False

End Select

If CombOrText Then  '若选择了Combo项则显示Combo3,隐藏Text1

  Combo3.Visible = True

  Text1.Visible = False

  Combo3.Clear

  For j = 0 To FrmQuery.Combo1(i).ListCount - 1

  '将上级窗体相应的Combo下拉列表加入到Combo3

Combo3.AddItem FrmQuery.Combo1(i).List(j)

  Next

Else   '否则显示Text1,隐藏Combo3

  Combo3.Visible = False

  Text1.Visible = True

End If

Exit Sub

ErrDo:

    MsgBox Error(Err), vbCritical, "单项条件查询"

    Resume Next

End Sub

⑶、点击“查询”命令键后,判断是否在Combo1下拉列表中选择了日期型字段(如出生年月),若选择了日期型字段,则必须在查询信息两端加#号;另外,还要判断是否在Combo2下拉列表中选择了数学关系符Like(即包含),若选择了Like,则必须在查询信息两端加*号。“查询”命令键的点击事件代码如下:

Private Sub Command1_Click()        '查询

    On Error GoTo ErrDo

    Dim FindStr As String        '需查找的信息串

    QueryStr = ""

    If Combo1 = "" Then

       MsgBox "请选择查询项目!", vbCritical, "单项条件查询"

       Exit Sub

    End If

    If Combo2 = "" Then

       MsgBox "请选择查询条件!", vbCritical, "单项条件查询"

       Exit Sub

    End If

    If CombOrText Then         '选择了Combo项,即下拉列表字段

       If Combo3 = "" Then

          MsgBox "请选择查询信息!", vbCritical, "单项条件查询"

          Exit Sub

       End If

       FindStr = Trim(Combo3)

    Else   '选择了Text项,即非下拉列表字段

       If Trim(Text1) = "" Then

          MsgBox "请输入查询信息!", vbCritical, "单项条件查询"

          Exit Sub

       End If

       FindStr = Trim(Text1)

    End If

    Select Case Trim(Left(Combo2, 4))

    Case "Like"  '数学关系符为"Like",即包含

    QueryStr = Combo1 & " " & Trim(Left(Combo2, 4)) & " '*" & FindStr & "*'"

    Case "Not"   '数学关系符为"Not Like",即不包含

    QueryStr = "Not " & Combo1 & " Like '*" & FindStr & "*'"

    Case Else   '除包含和不包含外的其它字段

    If InStr(Trim(Combo1), "出生年月") <> 0 Then    '日期型字段两端加#

    QueryStr = Combo1 & " " & Trim(Left(Combo2, 4)) & "  #" & FindStr & "#"

             Else   '非日期型其它字段

    QueryStr = Combo1 & " " & Trim(Left(Combo2, 4)) & " '" & FindStr & "'"

             End If

    End Select

 Me.Hide

 Exit Sub

ErrDo:

    MsgBox Error(Err), vbCritical, "单项条件查询"

    Resume Next

End Sub

⑷、“取消”命令键的点击事件代码如下:

Private Sub Command2_Click()           '取消

    QueryStr = ""

    Me.Hide

End Sub

五、多项条件查询

1、多项条件查询窗体

在查询主窗体中点击“多项查询”将弹出多项条件查询窗体(图三)。窗体上的主要控件有:

1、 
一个表格控件(MSFlexGrid),用于显示已定义的条件,即查询条件显示区。

2、    五个命令键:Command1(确认修改)、Command2(增加条件)、Command3(删除条件)、Command4(取消返回)、Command5(查询)。

3、    四个下拉列表框Combo0Combo1Combo2Combo3及一个Text1文本框,用于输入或修改条件,即查询条件编辑区。其中

逻辑关系下拉列表(Combo0)为逻辑关系符“ANDOR”。在逻辑关系符中还应该有“Not”,但是,由于数学关系符LikeNot Like、=与<>、<与≥、>与≤互为Not关系,已具有Not功能,因而忽略。

查询项目下拉列表(Combo1)为查询主窗体上Data1所关联的数据库的字段;

条件关系下拉列表(Combo2)为数学关系符“=、<>、<、≤、>、≥、Like(包含)、Not Like(不包含)”;

查询信息为下拉列表选项(Combo3)或输入值(Text1)。

当查询项目为“性别、政治面貌、文化程度”等列表字段时,隐藏Text1控件,显示Combo3控件,此时查询者可在Combo3中选择要查询的信息项;当查询项目选择“姓名、籍贯、出生年月”等非列表字段时,隐藏Combo3控件,显示Text1控件,此时查询者可在Text1中输入要查询的信息值。

Combo3的下拉列表随查询项目中选择的字段而相应变化。当查询项目为“性别”时,Combo3的下拉列表有“男、女”两项;当查询项目为“政治面貌”时,Combo3的下拉列表有“中共党员、共青团员、民主党员、群众”四项;当查询项目为“文化程度”时,Combo3的下拉列表有“本科以上、大学本科、大学专科、专科以下”四项。

 

(下转:在VB+Access系统中实现多项条件查询 (下) )

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089