|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
一、提出问题: 在大型的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="添加>>>" 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=">">大 于</option> <option Value=">=">大于等于</option> <option Value="<">小 于</option> <option Value="<=">小于等于</option> <option Value="<>">不等于</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="<<<删除" 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"> </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> 返回类别: 教程 上一教程: 在网页中实现折叠式菜单的ASP通用程序 下一教程: 用ASP+XML打造留言本 您可以阅读与"ASP项目中的通用条件查询模块"相关的教程: · ASP项目中的公共翻页模块 · ASP中的多条件组合查询实现 · 在ASP中使用SQL语句之2:用WHERE子句设置查询条件 · ASP的多条件动态查询 · 解决在ASP中执行数据库查询中的特别字符的问题 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |