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