下沙论坛

 找回密码
 注册论坛(EC通行证)

QQ登录

QQ登录

下沙大学生网QQ群8(千人群)
群号:6490324 ,验证:下沙大学生网。
用手机发布本地信息严禁群发,各种宣传贴请发表在下沙信息版块有问必答,欢迎提问 提升会员等级,助你宣传
新会员必读 大学生的论坛下沙新生必读下沙币获得方法及使用
查看: 3228|回复: 1
打印 上一主题 下一主题

一个用于搜索的函数

[复制链接]

该用户从未签到

跳转到指定楼层
1
发表于 2005-4-14 10:40:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
'====================================================================- R1 y6 w4 F- p+ G0 m6 u
'= Copyright (c) 2005 Eason Chan All Rights Reserved.
+ ~1 l6 h  |9 y/ @'=-------------------------------------------------------------------0 I  B4 \% C1 |- x( g' Y& S
'= 摘    要:格式化搜索字符函数, ?8 S( x9 X+ j% s9 A3 @6 R
'=-------------------------------------------------------------------- N$ X: D/ [1 i- k+ X
'= 最后更新:eason007. Y' }1 P  a! P! [1 _$ p
'= 最后日期:2005-01-21$ d4 Q* j3 Q0 a
'====================================================================, E  w5 V6 R, b% ]/ k3 P0 k$ ~) y
Function MakeSQLQuery(QueryField,QueryStr)
5 z6 l9 Z: M# O4 W% W9 m( d     Dim TagStart,TagEnd
9 N) V: f3 b. ?2 B% v     Dim TempStr,TempArray/ f% B2 N" K8 e
     Dim FullQueryStr, o, Y/ _+ f/ p- p2 }) A- s
     Dim i,Way
6 K6 ~; o5 Q, D; }& `5 _- P     5 i( Z" B& G# _5 X
     '先找引号定界符+ S! x& M, n/ w% `6 i
     Do
. y* N2 s! z( n0 j& p% V& Q7 R           TagStart=InStr(QueryStr,"\")) v! _+ l' b- U
           If TagStart>0 Then ! j# J7 p1 p- j  F$ t# i7 C3 q
                 TagEnd=InStr(TagStart+1,QueryStr,"\")
' `+ R( X( J3 a/ c4 y# J                 
+ y4 F8 t+ ?+ K: d0 M                 TempStr=Mid(QueryStr,TagStart+1,TagEnd-TagStart-1)2 ?3 ]4 i  N- U* {$ u, D
                 TempStr=Replace(TempStr," ","#")
6 Z6 W! ~1 F5 S# Q4 X                 
* t4 w4 Q: W* h2 n                 QueryStr=Left(QueryStr,TagStart-1)&TempStr&Right(QueryStr,Len(QueryStr)-TagEnd)# z9 s- |$ u0 z; }
           End If3 N0 t' R- w( m$ ~( S# f
     Loop While TagStart>0
6 d4 O; K$ j4 o! a! ~     
) ~. R0 G. l3 |7 d. ^     '处理or定界符
, f: P& i- B4 r8 P8 m     QueryStr=Replace(QueryStr,"|"," @")
. H, m, {  ^0 M3 ]/ ~     '分隔关键字. I2 u2 o" W' ~1 Z( H1 ^9 U
     TempArray=Split(QueryStr," ")
( \; L1 S  ?6 G     - Y! S8 Z+ X) i% ?
     For i=0 To UBound(TempArray)" m3 H5 `+ N6 z/ d/ Z
           If Left(TempArray(i),1)="@" Then4 i$ J4 `/ b2 r- w! S; I7 U) G
                 FullQueryStr=FullQueryStr&" Or "&QueryField0 }8 B. p: R  n$ ]; K# U2 Q- s
                 TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)' F" O/ v/ E& G% M5 r8 y
           Else: s( Q6 R' i" B* _
                 FullQueryStr=FullQueryStr&" And "&QueryField
, o: ]  q! @; }" h( i, |" ?* |5 Y. [* Z           End If! ~, F" l$ `2 P: c. R) Z8 `
           ' G( {, d7 Z) F: j- w
           If Left(TempArray(i),1)="-" Then
: B( n  C! c6 i; V; c* g9 p                 FullQueryStr=FullQueryStr&" Not "& Z/ |% J3 ?, I2 j6 @
                 TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)% ~' a$ N& v* ~/ }4 b. F( r
           End If
0 H5 C: Q% V4 l4 j- ?" ]9 k           
4 l7 I+ o8 m' B2 k7 D( _           FullQueryStr=FullQueryStr&" Like '%"&TempArray(i)&"%'"
) Y- h9 x& s% r3 f+ N& H           
' ]9 _0 m( a! |5 J) G  }: A: D           FullQueryStr=Replace(FullQueryStr,"%$","")
+ W' {8 P# F0 x8 `           FullQueryStr=Replace(FullQueryStr,"$%","")7 k* N/ ]% i8 }) U$ h6 Q4 j
           FullQueryStr=Replace(FullQueryStr,"#"," ")
  M/ g! q, b/ ^' C" ~     Next
0 E) v4 G6 |# ?. L1 s     
6 o2 X+ u' v% d/ b' b     MakeSQLQuery=FullQueryStr/ z: @( z% \3 i- a
End Function
8 D/ g$ V# x$ Q# v! B9 G: F
/ C. S, l5 t& L4 v8 m" ]( z6 h; }. q& m& x8 B. U! F& V
说明:: x$ t* I6 n7 ~2 w
用于搜索时,用户可进行复杂的查找,当前1。0版本只支持单字段的搜索,有心人士可自行修改为支持多字段,但请保留我的版权信息。
, p$ k& S* _8 A  _7 `如有疏忽之处,还请原谅!5 g* {5 X# R) H3 \" P7 w. P4 z
) r: k: k' G5 j8 z
示例:
7 g2 p: O8 S" W+ _1、 空格连接=and,如 你好 我要=%你好% and %我要% ; V% B5 q+ Z) {0 b- r4 B$ i7 x
2、 避免内容包含字符=-,如 你好 -我要=%你好% and not like %我要%
( Y' ^" d( a! x1 U3、 |=or,如 你好|我要=%你好% or %我要%
9 U% W% J3 W# {  K% E8 t2 F4、 词组搜索用双引号包含,如 \i love this game\=%i love this game%,而非=i and love and this and game
# `8 v- T, L' y0 m9 \. i1 O5、 $为定界符,如 $你好=以 你好 开头的字符,你好$=以 你好 结尾的字符
4 @: y% h( ]9 h" W
* R9 O" A& S: Z( p组合查询
: s8 _+ h  B$ d# G6 {7 d如 \i love this game\|-你好=%i love this game% and not like %你好%
& F& h  N/ Q* Z# y6 V( ]- g如 我要$|-$你好=%我要 or not like 你好%
9 g9 _- Q! F- B) n) b如 $\i love this game\ $你好$=i love this game% and like 你好
  `7 F8 g, C3 Z0 i# u5 g
" t( }" f- R+ i2 _调用:
+ j; Y6 s, S8 u3 z: H  E# k6 y7 N1 I$ o4 ]* S0 W
Dim SQL,WSQL( V: J5 b  h) d- [" P
Dim Keyword,Field
; D3 B5 c0 g: y4 ^$ O2 x9 g9 ]+ u! V* L" P
'get keyword1 s! c, j& e) Y# ~+ Z: V
Keyword=Request("keyword")# P( C1 W, }1 x5 W
Field=Request("field")
) V. d' f2 G; k/ L# ]3 o" E/ _5 X& V/ T# B; u' z. v
WSQL=MakeSQLQuery(Field,Keyword)- D% k8 f+ {- R3 l4 V/ w) Z1 R$ v

+ u4 }* s7 Y" G, dSQL="SELECT * FROM table1 WHERE 1=1 "&WSQL
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩

该用户从未签到

2
发表于 2005-4-15 12:58:00 | 只看该作者

哦,

本版积分规则

关闭

下沙大学生网推荐上一条 /1 下一条

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