線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2216
推到 Plurk!
推到 Facebook!

ClientDataSet的傳參數功能無效?

缺席
yedda
一般會員


發表:13
回覆:27
積分:8
註冊:2002-07-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-07 15:29:17 IP:61.218.xxx.xxx 未訂閱
底下是Client端的部分程式,當程式一啟動時,便會透過 edit1 欄位輸入的值,透過中介程式到Server擷取資料...在這個process裏,不管edit1的條件輸入為何,都只會顯示我在第一次輸入條件下所抓到的資料,除非我結束掉 client端程式,然後重新啟動Client端程式,重新輸入參數,這時ClientDataSet的資料,才會更新...我的疑問是..為何無法依我輸入的參數抓取資料到ClientDataSet呢?不知程式寫法是否有誤? scktConn.Connected :=true; cdsFmataMain.close; cdsFmataMain.ProviderName := 'dspFmataMain'; //dspFmataMain 是 Server端的TDataSetProvider cdsFmataMain.Params[0].Value := edit1.text ; cdsFmataMain.open; scktConn.Connected := false;
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-07 16:57:50 IP:203.204.xxx.xxx 未訂閱
引言: 底下是Client端的部分程式,當程式一啟動時,便會透過 edit1 欄位輸入的值,透過中介程式到Server擷取資料...在這個process裏,不管edit1的條件輸入為何,都只會顯示我在第一次輸入條件下所抓到的資料,除非我結束掉 client端程式,然後重新啟動Client端程式,重新輸入參數,這時ClientDataSet的資料,才會更新...我的疑問是..為何無法依我輸入的參數抓取資料到ClientDataSet呢?不知程式寫法是否有誤? scktConn.Connected :=true; cdsFmataMain.close; cdsFmataMain.ProviderName := 'dspFmataMain'; //dspFmataMain 是 Server端的TDataSetProvider cdsFmataMain.Params[0].Value := edit1.text ; cdsFmataMain.open; scktConn.Connected := false;
不會您的SQL沒有給參數吧, 貼上您的SQL語法來看看吧. <iFrame src="http://www.coss.com.tw/jieshu/sign.htm" width=400 height=105 scolling="NO" border="0"></iFrame> 震江系統(股)公司: http://www.coss.com.tw/ 捷舒軟體設計坊: http://www.coss.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
yedda
一般會員


發表:13
回覆:27
積分:8
註冊:2002-07-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-07 17:17:01 IP:61.218.xxx.xxx 未訂閱
ok~~重貼一次程式~~    SQL 語法如下 : select * from tb_fmata_main where ((cagid1=:cagid1 ) or (cagid2=:cagid2)) and ((cpdate>=:cpdate1 and cpdate<=:cpdate2 and 0=:cod) or (npwork>=:npwork1 and npwork<=:npwork2 and 1=:cod)) Client 部分程式如下: scktConn.Connected := true; cds.close; cds.Params[0].Value := FmataLib.GetLoginID ; cds.Params[1].Value := FmataLib.GetLoginID ; if (edtDate1.Text <>'') and (edtDate2.Text <>'') then begin sDate1 := edtDate1.Text; sDate2 := edtDate2.Text; end else begin sDate1 := '0000000'; sDate2 := '9999999'; end; cds.Params[2].Value := sDate1 ; cds.Params[3].Value := sDate2 ; cds.Params[4].Value := RadioGroup1.ItemIndex ; cds.Params[5].Value := strtoint(sDate1); cds.Params[6].Value := strtoint(sDate2) ; cds.Params[7].Value := RadioGroup1.ItemIndex ; cds.open; scktConn.Connected := false; 可是如果我把Client端程式重新啟動,用另一組查詢條件查詢資料是ok的~~ 但再輸入其他值,就變成還是第一次的資料,沒refresh溜!!~~
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-07 19:29:38 IP:203.204.xxx.xxx 未訂閱
引言: ok~~重貼一次程式~~ SQL 語法如下 : select * from tb_fmata_main where ((cagid1=:cagid1 ) or (cagid2=:cagid2)) and ((cpdate>=:cpdate1 and cpdate<=:cpdate2 and 0=:cod) or (npwork>=:npwork1 and npwork<=:npwork2 and 1=:cod)) Client 部分程式如下: scktConn.Connected := true; cds.close; cds.Params[0].Value := FmataLib.GetLoginID ; cds.Params[1].Value := FmataLib.GetLoginID ; if (edtDate1.Text <>'') and (edtDate2.Text <>'') then begin sDate1 := edtDate1.Text; sDate2 := edtDate2.Text; end else begin sDate1 := '0000000'; sDate2 := '9999999'; end; cds.Params[2].Value := sDate1 ; cds.Params[3].Value := sDate2 ; cds.Params[4].Value := RadioGroup1.ItemIndex ; cds.Params[5].Value := strtoint(sDate1); cds.Params[6].Value := strtoint(sDate2) ; cds.Params[7].Value := RadioGroup1.ItemIndex ; cds.open; scktConn.Connected := false; 可是如果我把Client端程式重新啟動,用另一組查詢條件查詢資料是ok的~~ 但再輸入其他值,就變成還是第一次的資料,沒refresh溜!!~~
您ClientDataSet的屬性都是用預設的嗎? 如是應該沒問題才是, 因為我們也都這樣用, 您的參數在ClientDataSet有設好嗎(參數的Name, DataType)? 還有我們都習慣用ClientDataSet.Params.ParamByName(ParamName).As....(DataType), 您要不要改這樣試試看.
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
yedda
一般會員


發表:13
回覆:27
積分:8
註冊:2002-07-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-09 09:34:03 IP:61.218.xxx.xxx 未訂閱
結果還是抓不到我要的資料,應該說是第二次查詢後,Server的程式就接不到參數似的,因為 ClientDataSet Refresh 後的結果是空的,奇怪... 其實我的做法也很簡單... 1. Server 端放一個 AdoQuery 元件 跟 DataSetProvider 元件 2. Client 端放一個 SocketConnection , ClientDataSet , DataSource , DataGrid 在 Client 端將輸入參數傳回 Server 端,然後把資料 show 在 DataGrid 上,第一次查詢沒問題,第二次查詢就抓不到資料了~~~
yedda
一般會員


發表:13
回覆:27
積分:8
註冊:2002-07-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-09 10:04:51 IP:61.218.xxx.xxx 未訂閱
引言: 結果還是抓不到我要的資料,應該說是第二次查詢後,Server的程式就接不到參數似的,因為 ClientDataSet Refresh 後的結果是空的,奇怪... 其實我的做法也很簡單... 1. Server 端放一個 AdoQuery 元件 跟 DataSetProvider 元件 2. Client 端放一個 SocketConnection , ClientDataSet , DataSource , DataGrid 在 Client 端將輸入參數傳回 Server 端,然後把資料 show 在 DataGrid 上,第一次查詢沒問題,第二次查詢就抓不到資料了~~~
找到問題的了~~原來 ClientDataSet 的 FetchOnDemand 的屬性要設成 False ...
yedda
一般會員


發表:13
回覆:27
積分:8
註冊:2002-07-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-09-09 12:08:28 IP:61.218.xxx.xxx 未訂閱
引言:
引言: 結果還是抓不到我要的資料,應該說是第二次查詢後,Server的程式就接不到參數似的,因為 ClientDataSet Refresh 後的結果是空的,奇怪... 其實我的做法也很簡單... 1. Server 端放一個 AdoQuery 元件 跟 DataSetProvider 元件 2. Client 端放一個 SocketConnection , ClientDataSet , DataSource , DataGrid 在 Client 端將輸入參數傳回 Server 端,然後把資料 show 在 DataGrid 上,第一次查詢沒問題,第二次查詢就抓不到資料了~~~
找到問題的了~~原來 ClientDataSet 的 FetchOnDemand 的屬性要設成 False ...
Sorry...補充一下...好像跟ClientDataSet 的 FetchOnDemand 的屬性無關,主要是 Connection 的問題, 我是一下載資料完,便把 socket connection 設成 false, 如果不馬上設成 false 的話, 則再次查詢, 便可以抓到我要的資料...
系統時間:2024-04-27 7:29:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!