我們以新聞表(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"