荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: baty (新一代懒人), 信区: Database
标  题: VB开发自由查询(随意设置检索条件)
发信站: BBS 荔园晨风站 (Mon Mar 12 22:01:41 2001), 转信

【 以下文字转载自 baty 的信箱 】
【 原文由 baty.bbs@argo.zsu.edu.cn 所发表 】
发信人: CMusic (音韵), 信区: Database
标  题: VB开发自由查询(随意设置检索条件)
发信站: 逸仙时空 Yat-sen Channel (Wed Nov  1 23:55:40 2000), 站内信件

---- 本文所要介绍的是使用SQL语句构造数据库的自由查询的技术,
所谓自由,是指查询结结果字段?结果字段怀 这种自由
组合的查询结果字段或查询条件字段是由一系列检查框(CheckBox)
的形式给出。问题的难难点在于多个字段的设定通过字符串连接时,
必须判断是否需要加分隔符(?查询条件之间要用”and”)。这里介
绍两种实现思路,它们的适用条件稍有不同也或多或缮 涉及到
一些编程技巧,基本上使用SQL查询是多种开发工具提供的强有力的
功能,在此以VisualBaiisc语法为
例,供大家参考。

---- 方法一:使用后连法。

---- 也就是在每一设定字段后面直接连上分隔符,这种方法省去了
每次判断前面是否要加贩指 符的麻烦,但最后一个设定字段或条件
后面本应不带分隔符,由于无法预期操作用户是否将这一一字段(?
件)作为最后一个,而不能提前处理,解决的办法是,查询形成后
件)作为最后一个,而不能提前处理,解决的办法是,查询形成后
再去掉处在最后的分隔符符。例程?
断如下:

---- dim SelectStr AS String ‘用于存储查询结果字段列表

---- dim WhereStr AS String ‘用于存储查询条件,若用户未选中
任何筛选条件,则查询询所有数?记录

---- (1)构造查询结果字段列表的代码

for i=0 to SelectFileldCount
if chkSelectField(i).value=vbChecked then
---- ‘使用tag属性存放实际的字段名,因程序所显示的的提示
(Caption)可能与实际字段妹 不一样
,如果各字段来自多个表,也用可TableName.FieldName的形式

        SelectStr=SelectStr & chkSelectField(i).tag & “,”
End if
        Next i
        SelectStr=Left(SelectStr,Len(SelectStr)-1)
  ‘去最后一个“,”
        SelectStr=”Select ” & SelectStr &
        SelectStr=”Select ” & SelectStr &
  “ from TableList”‘构造完整的Select 部分
---- ‘上一语句SelectStr=”Select ” & SelectStr & “ from TableList”
中的TableeList也可
以根据形成SelectStr的方法动态形成。注意”Select”之后在引号里
还有一个空格。
---- (2)构造条件字段列表

---- 与构造查询结果列表相似,加上了部分条件设置

        for I=0 to FilterFieldCount
                if chkFilterField(I).value=vbChecked then
---- ‘如果是字符字段需将条件用’’括起,精确匹配用“=”,注意
”and”前后面在引号种 内还有
一个空格

WhereStr=WhereStr & chkFilterField(I).tag & “=’”
 & txtFilterResult & “’ and “
                End if
        Next I
        WhereStr=left(WhereStr,Len(WhereStr)-4)
        ‘去掉最后的”and ”
        WhereStr=” Where ” & WhereStr
        WhereStr=” Where ” & WhereStr
  ‘形成完整的Where字句,注意在”Where”
    的前后引号之内各有一个空格
---- (3)形成完整的SQL查询

---- SQLstr=SelectStr & WhereStr

---- 上述多次提到在…前后引号之内有一个空格,是为了保证SQL
语句的合法性,例如正确确的SQL?
句应为”Select ResultList from TableList Where Filter”,如
果在Where前后没加空格格,就变?
了”Select ResultList from TableListWhereFilter”
,TablistWhereFilter被作为一个北 名使用了
,当然无法得到正确的结果。

---- 方法二,前置字段法。

---- 该方法的思路是,首先至少设定一个字段或条件,后面的所
有字段或条件均在其前加缮戏指 符。
这样最后就不会多余一个分隔符了。

---- (1) 查询结果字段比较简单


SelectStr=”Select RecordId”
For I=0 to SelectFieldCount
        If chkSelectField(I).value=vbChecked then
                SelectStr=SelectStr & “,”
        & chkSelectField(I).tag
        End if
Next I
---- (2) 使用该方法构造Where子句时,如果已有一个固定的筛选
条件,就可以与上面构栽 查询结
果字段的方法简单地完成,但大多情况下,是没有一个固定的筛选条
件的,这就需要我们人人为的创?
一个固定的筛选条件,当然该条件对查询结果不应造成任何影响。
我使用“1=1”作为固定烫 件,由于
该条件永远为真,满足上述要求,示例如下:
WhereStr=” Where 1=1” ‘“Where”前面有一个空格
For I=0 to FilterFieldCount
        If chkFilterField(I).value=vbChecked then
WhereStr=WhereStr & “ and ” & _
 chkFilterField(I).tag & “=’” & txtFilterResult & “’”
                        end if
                Next I
---- (3)构造完整的SQL语句
件的,这就需要我们人人为的创?
---- SQLStr=SelectStr & WhereStr
---- 曾经有一位同事,费了大半天时间编写一步一步判断再连接的代
码足足有好几屏,使?
再也不用每一步进行判断的麻烦了。
---- 最后一点需要提及的是,本例只谈到了用“=”进行了字符字
段匹配,实际上其他的数
据类型支持的匹配模式都可以使用,包括SQL语句中的通配字符
和Like 模式匹配语句都不受
可以用来构造更新查询等。这一部分留给读者自己完成。

--
为何在这里,无聊像半醉
曾在这空间,跟你相倾诉

※ 来源:.逸仙时空 Yat-sen Channel bbs.zsu.edu.cn.[FROM: 192.168.2.173]
--
※ 转寄:.逸仙时空 Yat-sen Channel bbs.zsu.edu.cn.[FROM: 210.39.3.50]
--
※ 转载:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.118]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店