你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 编程语言
基于VB6的组合查询系统的开发
 

  :作者利用VB6实现了对数据表的组合查询,该模块可以应用于数据库系统的开发中。

关键字VB6;查询

一、概述

在开发数据库应用系统的开发中,无论是数据的更新、删除和浏览,还是最终需求报表的生成,用户都要首先从拥有大量记录的数据表中检索数据,所以怎样方便用户快速地查询所需数据是开发人员首先要考虑的问题。一般对查询系统有以下几点要求:

通用性。可以完成大多数的数据查询任务,降低系统开发工作量。

实用性。要方便用户的操作,增强系统的实用性。

作者在某港务局办公自动化系统的开发中,就是应用开发出的组合查询系统,大大缩短系统的开发周期。关于数据库的通用查询的文章也很多,但作者总觉得实用性不是太好,有的是太专业化,让用户自己组合SQL语句进行查询,有的是可操作性差,不符合大多数用户的习惯。在作者进行系统的分析过程中,就针对这个问题同用户进行了专门的交流,从而提出了这个解决方案,并在系统的运行后得到了用户的肯定。

二、查询模块的详细实现

下面就详细介绍组合查询系统的设计,用VB6来实现的,也可以用其他语言完成。

第一步是在新建的VB工程中添加一标准模块,主要查询函数的实现,以及放置系统所需的全局变量,主要代码如下:

Public Const strCn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Study\Query\DB.mdb;Persist Security Info=False"

Public CancelQuery As Boolean

Function GetQuerySQL(ByVal sRS As String) As String

   Dim cn As ConnectionDim rs As RecordsetDim i As Integer

   Set cn = New ConnectionSet rs = New Recordset

   On Error GoTo errHandle

   cn.CursorLocation = adUseClient cn.Open strCn

   rs.Open sRS, cn, adOpenDynamic, adLockReadOnly

   With frmQuery.lstFields

        .Clear

        For i = 0 To rs.Fields.Count - 1

            .AddItem rs.Fields(i).Name

        Next

   End With

   frmQuery.Show 1

   Set rs = Nothing Set cn = Nothing

   GetQuerySQL = frmQuery.txtWhere.Text Unload frmQuery

   Exit Function

errHandle:

   MsgBox "系统出错!", vbExclamation, "警告"

End Function

其中strCn为连接到数据库的连接字符串,CancelQuery是判断用户在调出查询界面后是否进行查询,下面的查询函数GetQuerySQL的传递参数为标准SQL查询语句,提供给用户所要查询的数据表的字段,当用户进行组合查询后把结果以字符串的形式返回给该函数,这个地方主要是用一个TextBox实现变量的传递,可以视情况而定。

1查询窗体

第二步是查询窗体的实现,在VB中新建一窗体,添加如图1(为程序运行后的界面)所示的各个控件,字段列表中的字段是窗体显示之前加载,同时设置CancelQueryFalse,当用户进行各种查询条件的组合后添加到查询条件列表中,供用户查看。因为最终的结果要转化成标准的SQL条件语句,所以当用户确定后要对查询的组合进行检查,以便转化工作,主要是提示用户进行查询的“傻瓜”组合,主要代码如下:

Private Sub cmdOK_Click()

  If lstList.ListCount < 1 Then

     txtWhere.Text = "":Me.Hide:  Exit Sub

  End If

  Dim i As Integer:Dim strFind As String

  If lstList.List(0) = "And" Or lstList.List(0) = "Or" Then

     MsgBox "请删除查询条件列表第一项的 And Or 标记!", vbExclamation

     Exit Sub

  End If

  With lstList

       For i = 1 To .ListCount - 1

           If i Mod 2 <> 0 Then

 Dim pass As Booleanpass = False

 If .List(i) = "And" Then pass = TrueIf .List(i) = "Or" Then pass = True

 If Not pass Then

 MsgBox "查询条件列表中第" & (i + 1) & "项需要And Or标记!", vbExclamation, "通用查询"

   Exit SubEnd If  End IfNext

  End With

  If lstList.List(lstList.ListCount - 1) = "And" Or

lstList.List(lstList.ListCount - 1) = "Or" Then

     MsgBox "请删除查询条件列表最后一项的 And Or 标记!", vbExclamation, "通用查询"

     Exit Sub

  End If

  With lstList

       For i = 1 To .ListCount

           strFind = Space(1) & strFind & .List(i - 1) & Space(1)

       Next

  End With

  strFind = "where " & strFindtxtWhere.Text = Trim(strFind)Me.Hide

End Sub

最后把组合结果返回给TextBox,这个控件在运行时要隐藏,最终返回给标准模块中的函数GetQuerySQL,而当用户取消本次查询时要在取消按钮的Click事件中添加CancelQuery=True语句,这样本组合查询设计工作就完成了,其它代码从略。下面是它的应用实例。

首先新建一VB6工程,同时新建一个Access数据库,并建立一个学生信息表Student,放置一个命令按钮,一个DataGrid控件,不要忘了为工程引用ADO对象库,为命令按钮的Click事件添加以下代码:

Private Sub Command1_Click()

  Dim strSQL As String

  strSQL = GetQuerySQL("select * from student")

  If CancelQuery = True Then Exit Sub

  Dim cn As Connection Dim rs As Recordset

  Set cn = New Connection Set rs = New Recordset

  cn.CursorLocation = adUseClient cn.Open strCn

  If strSQL <> "" Then

     rs.Open "select * from student " & strSQL, cn, adOpenDynamic, adLockOptimistic

     Set DataGrid1.DataSource = rs

  End If

  Set rs = Nothing Set cn = Nothing

End Sub

查询条件的设置如图所示,测试的结果如图2所示。

2测试结果

 

三、结论

本文主要从实用的角度出发,目的是使用户能方便、快速的查询复杂数据。经过实际的应用,基本满足了用户的查询需要。同时,本组合查询系统可以用其他编程语言重新实现,应用到数据库系统的开发中。

参考文献

[1] Visual Basic 6.0中文版数据库和Internet编程 胡荣根 清华大学出版社 1999.

[2] 三层结构的综合查询系统的开发  孙晓辉,姚楠  江苏电机工程200004.

 

  推荐精品文章

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

  联系方式
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