三層架构Master-Detail中的Detail资料篩選問題 |
尚未結案
|
marike
一般會員 發表:4 回覆:5 積分:1 註冊:2004-06-24 發送簡訊給我 |
中間服務的Detail設定如下:
Qbcurrate.CommandText:='select * from bcurrate where Curr_no=:Curr_no order by Curr_year DESC,Curr_month DESC';
Qbcurrate.DataSource:=Dbcurrency;
pQbcurrate.DataSet:=Qbcurrate;
客戶端的Detail設定如下:
cQburrate.ProviderName:=pQbcurrate;
cQburrate.CommandText:='select * from bcurrate where Curr_no=:Curr_no and Curr_year=2003 and Curr_month=3 order by Curr_year DESC,Curr_month DESC';
cQbcurrate.DataSource:=cDbcurrency;
結果cQbcurrate還是把所有年份﹑月份的資料顯示出來了.請問這是什么原因,若不用過濾的方法(即不用Filter屬性及SetRange方法)怎么解決?
| ||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 中間服務的Detail設定如下: Qbcurrate.CommandText:='select * from bcurrate where Curr_no=:Curr_no order by Curr_year DESC,Curr_month DESC'; Qbcurrate.DataSource:=Dbcurrency; pQbcurrate.DataSet:=Qbcurrate; 客戶端的Detail設定如下: cQburrate.ProviderName:=pQbcurrate; cQburrate.CommandText:='select * from bcurrate where Curr_no=:Curr_no and Curr_year=2003 and Curr_month=3 order by Curr_year DESC,Curr_month DESC'; cQbcurrate.DataSource:=cDbcurrency; 結果cQbcurrate還是把所有年份﹑月份的資料顯示出來了.請問這是什么原因,若不用過濾的方法(即不用Filter屬性及SetRange方法)怎么解決?取資料和你下的SQL有關係, 和Delphi的關係不大, 你可用SQL Monitor追蹤看看, 是不是所下的SQL有問題.
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
marike
一般會員 發表:4 回覆:5 積分:1 註冊:2004-06-24 發送簡訊給我 |
|||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 我用SQL Monitor追蹤,沒有任何信息顯示.謝謝你!!將追蹤到的SQL和參數, 用SQL Explorer執行SQL試試, 用BDE才有辦法用SQL Monitor追蹤.
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
marike
一般會員 發表:4 回覆:5 積分:1 註冊:2004-06-24 發送簡訊給我 |
引言: green] 將追蹤到的SQL和參數, 用SQL Explorer執行SQL試試, 用BDE才有辦法用SQL Monitor追蹤.[/green]我中間服務用的是ADO﹐不能用SQL Monitor追蹤﹒不過我用下面的代碼可以實現﹐但覺得效率不高﹒ cQbcurrate.DataSource:=''; cQbcurrate.MasterFields:=''; cQbcurrate.PacketRecords:=-1; procedure TForm1.cQbcurrencyAfterScroll(DataSet: TDataSet); begin cQbcurrate.Close; cQbcurrate.CommandText:=Format('select * from bcurrate where Curr_no=''%s'' and Curr_year=2003 and Curr_month=3 order by Curr_year DESC,Curr_month DESC',[DataSet.FieldByName('Curr_no').AsString]); cQbcurrate.Open; end; 請問還有別的方法嗎﹖ |
||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 我中間服務用的是ADO﹐不能用SQL Monitor追蹤﹒不過我用下面的代碼可以實現﹐但覺得效率不高﹒ cQbcurrate.DataSource:=''; cQbcurrate.MasterFields:=''; cQbcurrate.PacketRecords:=-1; procedure TForm1.cQbcurrencyAfterScroll(DataSet: TDataSet); begin cQbcurrate.Close; cQbcurrate.Open; end; 請問還有別的方法嗎﹖你是指查資料的效率或是寫程式碼的效率, 程式碼可用如下, 會比較清楚: cQbcurrate.CommandText := 'select * from bcurrate' ' where Curr_no = ' QuotedStr(DataSet.FieldByName('Curr_no').AsString) ' and Curr_year = 2003' ' and Curr_month = 3' ' order by Curr_year DESC,Curr_month DESC';
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
marike
一般會員 發表:4 回覆:5 積分:1 註冊:2004-06-24 發送簡訊給我 |
|||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 我是指查資料的效率不高﹒請還有別的處理方法嗎﹖寫在AfterScroll才去抓Detail資料, 對於只要瀏覽其中某幾筆, 應該效率還不錯, 但如果用在列印全部資料, 就會變成資料常常需跟Server索取, 就會造成效率不好, 這時就要在Server設好Master/Detail的關聯, Client的Detail設上TDataSetField即可, 這樣就會將查到的所有資料一次下載, 當然會比原本的顯示慢些, 但後續的處理都會比較快.
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
jasonma168
一般會員 發表:39 回覆:33 積分:14 註冊:2002-05-24 發送簡訊給我 |
引言: 中間服務的Detail設定如下: Qbcurrate.CommandText:='select * from bcurrate where Curr_no=:Curr_no order by Curr_year DESC,Curr_month DESC'; Qbcurrate.DataSource:=Dbcurrency; pQbcurrate.DataSet:=Qbcurrate; 客戶端的Detail設定如下: cQburrate.ProviderName:=pQbcurrate; cQburrate.CommandText:='select * from bcurrate where Curr_no=:Curr_no and Curr_year=2003 and Curr_month=3 order by Curr_year DESC,Curr_month DESC'; cQbcurrate.DataSource:=cDbcurrency; 結果cQbcurrate還是把所有年份﹑月份的資料顯示出來了.請問這是什么原因,若不用過濾的方法(即不用Filter屬性及SetRange方法)怎么解決?妳要決定Master/Detail關聯是要做在APServer端或是Client端 1.做在APServer端 Qbcurrate.CommandText:='select * from bcurrate where Curr_no=:Curr_no order by Curr_year DESC,Curr_month DESC'; Qbcurrate.DataSource:=Dbcurrency; pQbcurrate.DataSet:=Qbcurrate; Client設定 cQbcurrate.DataSetField:= 關連欄位 2.做在Client端 Qbcurrate.CommandText:='select * from bcurrate order by Curr_year DESC,Curr_month DESC'; pQbcurrate.DataSet:=Qbcurrate; Client設定 Qbcurrate.DataSource:=Dbcurrency; cQburrate.ProviderName:=pQbcurrate; cQburrate.MasterSource:=cDbcurrency; cQburrate.MasterFields:='Curr_no'; |
||
Ktop_Robot
站務副站長 發表:0 回覆:3511 積分:0 註冊:2007-04-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |