分享
 
 
 

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

王朝asp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

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'”的条件字符串,问题就解决了。但如果是不同的程序、不同的表怎么做呢?这就是看用什么方法来定义查询的字段了。

在这里,我们把查询字段作为一个过程写在程序中,在查询模块中调用,这样,查询的字段就是动态的生成了。

用户选择好了一个查询字段,以及匹配条件,将它添加到<select></select>框中,用户可以继续选择另外的查询条件,然后又把它添加到<select>中,完成了,就点查询按钮。用查询模块生成如:“time='2002-05-22' and User='Tom'”的语句,这样在程序中就可以调用了。

三、解决方案:

ASP通用条件查询模块的源代码请参看 (四、源代码)。

1、定义过程

在调用条件查询模块前,首先要在程序中定义一个SearchField()过程:

Sub SearchField()

Response.Write "<option Value='1Title'>标题</option>"

Response.Write "<option Value='1Time'>时间</option>"

Response.Write "<option Value='1Content'>内容</option>"

Response.Write "<option Value='1User'>发布人</option>"

End Sub

其中,Value中为字段名称,如果字段为字符型,就在字段名前加1,数字型就加2。如:"1Title"。

注意:如果数据是从多个表中取出来的,如:select * from News,User ;那么Value的值就要加上相应的表,如:1News.Title。这样就可以从多个表查询数据。

2、调用条件查询模块:

<!--#include file="../Public/Condition_Search.asp"-->

3、加入按钮事件:

加入“条件查询”按钮,并添加 onClick="search_dis(s1)"事件:

<Input type="Button" name=ConSearch onClick="search_dis(s1)">

默认状态下,条件查询模块隐藏在页面中,当点“条件查询”按钮,就显示出来,这样页面即美观,也不会妨碍用户浏览。

这样,我们就完成了“条件查询”模块的调用

当选择好了查询条件,执行查询后,程序getSql文本框将返回查询条件,如:“title='Chian' and user='tom'”,用request.form("getSql")取得!在把它加入到SQL语句中,一个新的查询就生成了。

四、ASP通用条件查询模块的源代码

<Script LANGUAGE=javaScript>

<!--

//隐藏或显示条件查询模块

function search_dis(ob){

if (ob.style.display=="none")

{ob.style.display="";window.location.href ('#down');}

else

{ob.style.display="none";}

}

//把条件查询语句添加到<select>查询列表框;

function AddSe(){

var val,val_tmp,Sql,oAdd,TextType;

var Field,Condition,TextVal,Relation;

Field=frm_Search.Field.options[frm_Search.Field.selectedIndex].text;

TextVal="'"+frm_Search.TextVal.value+"'" ;

Condition=frm_Search.Condition.options[frm_Search.Condition.selectedIndex].text;

Relation=frm_Search.Relation.options[frm_Search.Relation.selectedIndex].text;

val_tmp = frm_Search.Field.value;

val_tmp = val_tmp.substring(0,1);

//判断字段的数据类型,如果为1,就是字符、日期型;为2,就是数值型;

if (val_tmp==1)

{TextType="'"+frm_Search.TextVal.value+"' " ;}

else

{TextType=""+frm_Search.TextVal.value+" " ;}

val_Field = frm_Search.Field.value;

val_Field = val_Field.substr(1);

val= val_Field + frm_Search.Condition.value + TextType + frm_Search.Relation.value ;

Sql = Field+Condition+TextVal+Relation;

oAdd=document.createElement("option")

oAdd.value=val;

oAdd.text=Sql;

frm_Search.seSql.add(oAdd);

}

//把条件查询语句从<select>查询列表框中删除;

function moveSe(){

for (i=1;i<frm_Search.seSql.options.length;i++){

if(frm_Search.seSql.options[i].selected){

frm_Search.seSql.remove(frm_Search.seSql.selectedIndex);

}

}

}

//取得查询条件,并提交;

function getVal(){

var gettxt,Setable;

gettxt = "";

var path = window.location.pathname ; //取得页面链接和文件名

var line = path.lastIndexOf("/"); //取得最后一个'/'的位置

var dot = path.indexOf("."); //取得第一个'.'的位置

var Name = path.substring(line+1,dot); //取得文件名

var fileName = Name + ".asp";

for (i=1;i<frm_Search.seSql.options.length;i++){

gettxt = gettxt+ " " + frm_Search.seSql.options[i].value ;}

var valLeng=gettxt.lastIndexOf(" ");

gettxt=gettxt.substr(0,valLeng); //去掉条件子句的最后一个关系运算符

Setable = frm_Search.Setable.value ;

//window.open (fileName+'?gettxt='+gettxt,'_self'); //向当前页面传送查询条件子句

frm_Search.getSql.value = gettxt;

frm_Search.action = fileName;

frm_Search.submit ();

}

//-->

</Script>

<a Name="down"></a>

<Form Name="frm_Search" method="post" action="">

<input type="hidden" Name=getSql Value="">

<table bgcolor=#6699CC width=100%>

<tr><td>

<table width="617" border="0" cellspacing="1" cellpAdding="2" bgcolor="#CCCCCC"

align="center">

<tbody id=s1 style=display:none>

<tr>

<td width="134" height="25" bgcolor="#006699">

<div align="right"><font color="#FFFFFF" style="font-size:10pt">查询字段:

</font></div>

</td>

<td width="159" bgcolor="#F2F2F2">

<select Name="Field" style="font-size:12px"><%Call SearchField()%></select>

</td>

<td width="102" bgcolor="#E1E1E1">

<div align="center">

<input type="button" Name="AddSql" Value="添加&gt;&gt;&gt;" onClick="AddSe()"

style="BACKGROUND: #ffdead;BORDER-BOTTOM: #665b8e 1px solid;BORDER-LEFT: #ffffff 1px

solid;BORDER-RIGHT: #665b8e 1px solid;BORDER-TOP: #ffffff 1px solid;COLOR: #333333;CURSOR:

hand;FONT-SIZE: 12px;HEIGHT: 20px;PAddING-BOTTOM: 1px;PAddING-LEFT: 1px;PAddING-RIGHT:

1px;PAddING-TOP: 1px">

</div>

</td>

<td rowspan="4" bgcolor="#F2F2F2" width="221">

<select id="seSql" size="6">

<option Value="">------------查询条件-----------</option>

</select>

</td>

</tr>

<tr>

<td width="134" height="25" bgcolor="#006699">

<div align="right"><font color="#FFFFFF" style="font-size:10pt">查询条件:

</font></div>

</td>

<td width="159" bgcolor="#F2F2F2">

<select Name="Condition" style="font-size:12px">

<option Value="=">等 于</option>

<option Value="&gt;">大 于</option>

<option Value="&gt;=">大于等于</option>

<option Value="&lt;">小 于</option>

<option Value="&lt;=">小于等于</option>

<option Value="&lt;&gt;">不等于</option>

<option Value=" NULL ">为空</option>

<option Value=" NOT NULL ">不为空</option>

<option Value=" LIKE ">匹配</option>

</select>

</td>

<td width="102" bgcolor="#E1E1E1">

<div align="center">

<input type="button" Name="delSql" Value="&lt;&lt;&lt;删除" onClick="moveSe()"

style="BACKGROUND: #ffdead;BORDER-BOTTOM: #665b8e 1px solid;BORDER-LEFT: #ffffff 1px

solid;BORDER-RIGHT: #665b8e 1px solid;BORDER-TOP: #ffffff 1px solid;COLOR: #333333;CURSOR:

hand;FONT-SIZE: 12px;HEIGHT: 20px;PAddING-BOTTOM: 1px;PAddING-LEFT: 1px;PAddING-RIGHT:

1px;PAddING-TOP: 1px">

</div>

</td>

</tr>

<tr>

<td width="134" height="25" bgcolor="#006699">

<div align="right"><font color="#FFFFFF" style="font-size:10pt">条 件 值:

</font></div>

</td>

<td width="159" bgcolor="#F2F2F2">

<input type="text" id="TextVal" size="15" style="BACKGROUND-COLOR: white; BORDER-

BOTTOM: #000000 1px solid;BORDER-LEFT: #000000 1px solid;BORDER-RIGHT: #000000 1px solid;BORDER-

TOP: #000000 1px solid;FONT-SIZE: 9pt">

</td>

<td width="102" bgcolor="#E1E1E1">&nbsp;</td>

</tr>

<tr>

<td width="134" height="25" bgcolor="#006699">

<div align="right"><font color="#FFFFFF" style="font-size:10pt">关系运算符:

</font></div>

</td>

<td width="159" bgcolor="#F2F2F2">

<select Name="Relation" style="font-size:12px">

<option Value="and">并且</option>

<option Value="or">或者</option>

</select>

</td>

<td width="102" bgcolor="#E1E1E1">

<div align="center">

<input type="button" Name="search_ok" Value="查 询" onClick="getVal()"

style="BACKGROUND: #deb887;BORDER-BOTTOM: #665b8e 1px solid;BORDER-LEFT: #ffffff 1px

solid;BORDER-RIGHT: #665b8e 1px solid;BORDER-TOP: #ffffff 1px solid;COLOR: #333333;CURSOR:

hand;FONT-SIZE: 12px;HEIGHT: 20px;PAddING-BOTTOM: 1px;PAddING-LEFT: 1px;PAddING-RIGHT:

1px;PAddING-TOP: 1px">

</div>

</td>

</tr>

</tbody>

</table>

</td></tr>

</table>

</Form>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有