gigigo Groupie
加入: 2004/5月/31
Online Status: Offline 回復: 42
|
Posted: 2004/5月/31 10:31上午 | IP記錄
|
|
|
前言] 我們經常會遇到多重查詢問題,而長長的SQL語句往往讓人丈二和尚摸不著頭腦。特別是客戶端部分填入查詢條件時,如用普通方法將 更是難上加難。 以下巧妙地利用"where 1=1"的恆等式(事實上很多,讓它值為TRUE即可)解決此問題。
[正文概要] 'subject 訊息標題 'company 發表訊息的公司名稱 'content 發表訊息的內容 'address 公司地址 'infomation 公司簡介 'note 相關說明 以上值均由FORM提交,然後通過:subject=trim(Request.Form("subject"))等得到相應的 值。
<% '這個函數很關鍵!--------------------------- Function sql(a,b,sqls) if b<>"" then '如果客戶端沒有提交此值,則不會產生相應的SQL語句。 sqls=sqls & " and " & a & " like '%" & b & "%'" end if sql=sqls End Function '-----------------調用資料庫 Set conn=Server.CreateObject("ADODB.Connection") DBpath=Server.MapPath("/database/mydb.mdb") Conn.Open "driver={Microsoft Access Driver (*.mdb)};pwd=;dbq=" & DBpath Set rs=Server.CreateObject("ADODB.Recordset") sqls="select * from mytable where 1=1 " '以下調用上面的函數即可,可以很多個調用(理論上是任意) sqls=sql("subject",subject,sqls) sqls=sql("company",company,sqls) sqls=sql("content",content,sqls) sqls=sql("address",address,sqls) sqls=sql("infomation",infomation,sqls) sqls=sql("note",note,sqls) sqls=sqls & " order by id desc" rs.open sqls,conn,3,2 %>
[結束語] 如果沒有關鍵的函數Function sql(a,b,sqls),我們可以想像,需要多少判斷的一個接一個的語句!
|