今天PB考完試了,說真的學過VB再學PB真的沒什麼意思,真搞不懂學校為什麼要開這門課。
可能就是別人說的用PB的DataWindow作資料庫開發比較快,我沒感覺,只對DataWindow作為註冊商標有較深印象。
還好在今天考試時學到一點東西,應該適用於所有SQL編程,算是另類的技巧吧,隨便記上一筆。
在考試之前我還不知道setsqlselect(sqlstr)中的sqlstr中如何放置sql語句中的變數。
考試題目是兩個ddlb控制項(下拉式清單方塊ddlb_1,ddlb_2)和一個sle控制項(單行輸入框sle_1)中任選輸入(可以不選,選一個輸入,兩個,或三個都輸入)來查詢。
我一看到這種查詢就開始後悔,昨天為什麼沒有把setsqlselect搞清楚,只能硬著頭皮用帶參數的datawindow來實現這個功能。
一開始沒什麼思路,只是實現一個查詢,話說"人不會倒黴一輩子",記得我昨天還被桔梗塞住牙縫難受了半天,今天運氣來了,突然想到sql中like的"偉大"功能(現在只能說它偉大了,幫了我大忙),它可以實現參數的無效傳遞,可能無效傳遞說的不太恰當,反正就是這樣的功能:
選了ddlb_1其他不做操作,則把其他兩個參數變為'%'傳給datawindow的形參,用like查詢的話相當於只從資料庫中檢索了ddlb_1的資料
PB中向dw傳參的代碼為:
string str1,str2,str3
str1=ddlb_1.text
str2=ddlb_2.text
str3=sle_1.text
if str1="" then str1="%"
if str2="" then str2="%"
if str3="" then str3="%"
dw_1.retrieve(str1,str2,str3)
當然有做無用功,也是沒辦法中的辦法了,誰叫我那個時候不知道setsqlselect怎麼用,但考試要求都能實現了,應該過關了。
今天,考完試回來發現CSDN有人回答了我提出的關於setsqlselect(sqlstr)的問題,原來sqlstr中含變數的sql語句要這麼寫:
sqlstr="select * from user where name='"+ls_str+"'"
=後面的變數ls_str放置是我提的問題。
現在想想會用setsqlselect了,感覺SQL語句中還是應該使用like比較簡單,不然還要判斷哪個為空白,挺麻煩的(8種組合呢),還是用like:
string str1,str2,str3
str1=ddlb_1.text
str2=ddlb_2.text
str3=sle_1.text
if str1="" then str1="%"
if str2="" then str2="%"
if str3="" then str3="%"
sqlstr="select * from table1 where id1 like '"+str1+"' and id2 like '"+"str2"+"' and id3 like '"+"str3"+"'"
dw_1.setsqlselect(sqlstr)
dw_1.retrieve()//現在不用傳參了
最終的解決方案,多欄位查詢:在SQL語句中使用like。