我们以新闻表(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。这样就可以从多个表查询数据。
//把条件查询语句从<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"