ASP项目中的通用条件查询模块

一、提出问题:
在大型的ASP项目中,都涉及到了条件查询这一功能。用户要求能够针对特定的字段进行查询。对于有些数据,是从多个表取出来的,因此也要能对多个表进行查询。
一般的话,大多数的做法就是每个程序都做一个查询功能,因为每个查询的表都不同,涉及的字段也不同。但是,如果在大型的ASP项目中这么做的话,不仅增加了工作量、影响开发进度,而且不能使系统模块化、代码复用,增加了系统维护难度。因此,我们有必要使条件查询模块化。

二、解决思路:
我们设计条件查询的功能为:
1、选择查询字段(字段);
2、选择查询条件(<、>、=、<=、>=、<>、Null、Not Null、Like );
3、输入条件值;
4、选择运算关系(Or、And);
5、将查询条件添加到列表框、或从列表框删除。
详细界面请看下图:

我们以新闻表(dbNews)为例,假定新闻表包含有标题、时间、内容、发布人。
在查询数据库时,我们一般都是用如:
“Select * from News Where time='2002-05-22' and User='Tom'”,我们如果能在条件查询中返回“time='2002-05-22' and User='Tom'”的条件字符串,问题就解决了。但如果是不同的程序、不同的表怎么做呢?这就是看用什么方法来定义查询的字段了。
在这里,我们把查询字段作为一个过程写在程序中,在查询模块中调用,这样,查询的字段就是动态的生成了。
用户选择好了一个查询字段,以及匹配条件,将它添加到

1<select></select>

框中,用户可以继续选择另外的查询条件,然后又把它添加到

  1<select>中,完成了,就点查询按钮。用查询模块生成如:“time='2002-05-22' and User='Tom'”的语句,这样在程序中就可以调用了。   
  2  
  3三、解决方案:   
  4ASP通用条件查询模块的源代码请参看 (四、源代码)。   
  51、定义过程   
  6在调用条件查询模块前,首先要在程序中定义一个SearchField()过程:   
  7Sub SearchField()   
  8Response.Write "<option value="1Title">标题</option>"   
  9Response.Write "<option value="1Time">时间</option>"   
 10Response.Write "<option value="1Content">内容</option>"   
 11Response.Write "<option value="1User">发布人</option>"   
 12End Sub   
 13其中,Value中为字段名称,如果字段为字符型,就在字段名前加1,数字型就加2。如:"1Title"。   
 14注意:如果数据是从多个表中取出来的,如:select * from News,User ;那么Value的值就要加上相应的表,如:1News.Title。这样就可以从多个表查询数据。   
 15  
 162、调用条件查询模块:   
 17<!--#include file="../Public/Condition_Search.asp"-->   
 18  
 193、加入按钮事件:   
 20加入“条件查询”按钮,并添加 onClick="search_dis(s1)"事件:   
 21<input name="ConSearch" onclick="search_dis(s1)" type="Button"/>   
 22  
 23默认状态下,条件查询模块隐藏在页面中,当点“条件查询”按钮,就显示出来,这样页面即美观,也不会妨碍用户浏览。   
 24  
 25这样,我们就完成了“条件查询”模块的调用   
 26当选择好了查询条件,执行查询后,程序getSql文本框将返回查询条件,如:“title='Chian' and user='tom'”,用request.form("getSql")取得!在把它加入到SQL语句中,一个新的查询就生成了。   
 27  
 28四、ASP通用条件查询模块的源代码   
 29  
 30<script language="javaScript">   
 31<!--   
 32//隐藏或显示条件查询模块   
 33function search_dis(ob){   
 34if (ob.style.display=="none")   
 35{ob.style.display="";window.location.href ('#down');}   
 36else   
 37{ob.style.display="none";}   
 38}   
 39  
 40//把条件查询语句添加到<select>查询列表框;   
 41function AddSe(){   
 42var val,val_tmp,Sql,oAdd,TextType;   
 43var Field,Condition,TextVal,Relation;   
 44Field=frm_Search.Field.options[frm_Search.Field.selectedIndex].text;   
 45TextVal="'"+frm_Search.TextVal.value+"'" ;   
 46Condition=frm_Search.Condition.options[frm_Search.Condition.selectedIndex].text;   
 47Relation=frm_Search.Relation.options[frm_Search.Relation.selectedIndex].text;   
 48val_tmp = frm_Search.Field.value;   
 49val_tmp = val_tmp.substring(0,1);   
 50//判断字段的数据类型,如果为1,就是字符、日期型;为2,就是数值型;   
 51if (val_tmp==1)   
 52{TextType="'"+frm_Search.TextVal.value+"' " ;}   
 53else   
 54{TextType=""+frm_Search.TextVal.value+" " ;}   
 55val_Field = frm_Search.Field.value;   
 56val_Field = val_Field.substr(1);   
 57val= val_Field + frm_Search.Condition.value + TextType + frm_Search.Relation.value ;   
 58Sql = Field+Condition+TextVal+Relation;   
 59oAdd=document.createElement("option")   
 60oAdd.value=val;   
 61oAdd.text=Sql;   
 62frm_Search.seSql.add(oAdd);   
 63}   
 64  
 65//把条件查询语句从<select>查询列表框中删除;   
 66function moveSe(){   
 67for (i=1;i<frm_Search.seSql.options.length;i++){   
 68if(frm_Search.seSql.options[i].selected){   
 69frm_Search.seSql.remove(frm_Search.seSql.selectedIndex);   
 70}   
 71}   
 72}   
 73  
 74//取得查询条件,并提交;   
 75function getVal(){   
 76var gettxt,Setable;   
 77gettxt = "";   
 78var path = window.location.pathname ; //取得页面链接和文件名   
 79var line = path.lastIndexOf("/"); //取得最后一个'/'的位置   
 80var dot = path.indexOf("."); //取得第一个'.'的位置   
 81var Name = path.substring(line+1,dot); //取得文件名   
 82var fileName = Name + ".asp";   
 83for (i=1;i<frm_Search.seSql.options.length;i++){   
 84gettxt = gettxt+ " " + frm_Search.seSql.options[i].value ;}   
 85var valLeng=gettxt.lastIndexOf(" ");   
 86gettxt=gettxt.substr(0,valLeng); //去掉条件子句的最后一个关系运算符   
 87Setable = frm_Search.Setable.value ;   
 88//window.open (fileName+'?gettxt='+gettxt,'_self'); //向当前页面传送查询条件子句   
 89frm_Search.getSql.value = gettxt;   
 90frm_Search.action = fileName;   
 91frm_Search.submit ();   
 92}   
 93//-->   
 94</script>
 95<a name="down"></a>
 96<form action="" method="post" name="frm_Search">
 97<input name="getSql" type="hidden" value=""/>
 98<table bgcolor="#6699CC" width="100%">
 99<tr><td>
100<table align="center" bgcolor="#CCCCCC" border="0" cellpadding="2" cellspacing="1" width="617">
101<tbody id="s1" style="display:none">
102<tr>
103<td bgcolor="#006699" height="25" width="134">
104<div align="right"><font color="#FFFFFF" style="font-size:10pt">查询字段:   
105  
106</font></div>
107</td>
108<td bgcolor="#F2F2F2" width="159">
109<select name="Field" style="font-size:12px">```
110Call SearchField()
111```</select>
112</td>
113<td bgcolor="#E1E1E1" width="102">
114<div align="center">
115<input name="AddSql" onclick="AddSe()" style="BACKGROUND: #ffdead;BORDER-BOTTOM: #665b8e 1px solid;BORDER-LEFT: #ffffff 1px   
116  
117solid;BORDER-RIGHT: #665b8e 1px solid;BORDER-TOP: #ffffff 1px solid;COLOR: #333333;CURSOR:   
118  
119hand;FONT-SIZE: 12px;HEIGHT: 20px;PAddING-BOTTOM: 1px;PAddING-LEFT: 1px;PAddING-RIGHT:   
120  
1211px;PAddING-TOP: 1px" type="button" value="添加&gt;&gt;&gt;"/>
122</div>
123</td>
124<td bgcolor="#F2F2F2" rowspan="4" width="221">
125<select id="seSql" size="6">
126<option value="">\------------查询条件-----------</option>
127</select>
128</td>
129</tr>
130<tr>
131<td bgcolor="#006699" height="25" width="134">
132<div align="right"><font color="#FFFFFF" style="font-size:10pt">查询条件:   
133  
134</font></div>
135</td>
136<td bgcolor="#F2F2F2" width="159">
137<select name="Condition" style="font-size:12px">
138<option value="=">等 于</option>
139<option value="&gt;">大 于</option>
140<option value="&gt;=">大于等于</option>
141<option value="&lt;">小 于</option>
142<option value="&lt;=">小于等于</option>
143<option value="&lt;&gt;">不等于</option>
144<option value=" NULL ">为空</option>
145<option value=" NOT NULL ">不为空</option>
146<option value=" LIKE ">匹配</option>
147</select>
148</td>
149<td bgcolor="#E1E1E1" width="102">
150<div align="center">
151<input name="delSql" onclick="moveSe()" style="BACKGROUND: #ffdead;BORDER-BOTTOM: #665b8e 1px solid;BORDER-LEFT: #ffffff 1px   
152  
153solid;BORDER-RIGHT: #665b8e 1px solid;BORDER-TOP: #ffffff 1px solid;COLOR: #333333;CURSOR:   
154  
155hand;FONT-SIZE: 12px;HEIGHT: 20px;PAddING-BOTTOM: 1px;PAddING-LEFT: 1px;PAddING-RIGHT:   
156  
1571px;PAddING-TOP: 1px" type="button" value="&lt;&lt;&lt;删除"/>
158</div>
159</td>
160</tr>
161<tr>
162<td bgcolor="#006699" height="25" width="134">
163<div align="right"><font color="#FFFFFF" style="font-size:10pt">条 件 值:   
164  
165</font></div>
166</td>
167<td bgcolor="#F2F2F2" width="159">
168<input id="TextVal" size="15" style="BACKGROUND-COLOR: white; BORDER-   
169  
170BOTTOM: #000000 1px solid;BORDER-LEFT: #000000 1px solid;BORDER-RIGHT: #000000 1px solid;BORDER-   
171  
172TOP: #000000 1px solid;FONT-SIZE: 9pt" type="text"/>
173</td>
174<td bgcolor="#E1E1E1" width="102"> </td>
175</tr>
176<tr>
177<td bgcolor="#006699" height="25" width="134">
178<div align="right"><font color="#FFFFFF" style="font-size:10pt">关系运算符:   
179  
180</font></div>
181</td>
182<td bgcolor="#F2F2F2" width="159">
183<select name="Relation" style="font-size:12px">
184<option value="and">并且</option>
185<option value="or">或者</option>
186</select>
187</td>
188<td bgcolor="#E1E1E1" width="102">
189<div align="center">
190<input name="search_ok" onclick="getVal()" style="BACKGROUND: #deb887;BORDER-BOTTOM: #665b8e 1px solid;BORDER-LEFT: #ffffff 1px   
191  
192solid;BORDER-RIGHT: #665b8e 1px solid;BORDER-TOP: #ffffff 1px solid;COLOR: #333333;CURSOR:   
193  
194hand;FONT-SIZE: 12px;HEIGHT: 20px;PAddING-BOTTOM: 1px;PAddING-LEFT: 1px;PAddING-RIGHT:   
195  
1961px;PAddING-TOP: 1px" type="button" value="查 询"/>
197</div>
198</td>
199</tr>
200</tbody>
201</table>
202</td></tr>
203</table>
204</form></select>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus