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

請問DataSet可當參數傳入Function或Procedure嗎?

尚未結案
bear28
一般會員


發表:44
回覆:53
積分:19
註冊:2002-09-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2015-06-11 16:08:43 IP:101.13.xxx.xxx 訂閱
請問DataSet可當參數傳入Function或Procedure嗎?

以下是想像寫出的,無法運行,可否指教是否可行...

Procedure TFmmain.DataShow(test : TFDQuery);
var
s1:string;
begin

Dm.test.Close;
Dm.test.SQL.Clear;
s1:='Select * from test2';
Dm.test.SQL:=s1;
Dm.test.Open;

end;
tuga
高階會員


發表:16
回覆:105
積分:104
註冊:2002-07-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2015-06-11 16:21:27 IP:218.161.xxx.xxx 訂閱
可以, 但是你既然已經傳入 test, 就不要再用 dm.test,
因為 dm.test 是直接呼叫 dm 裡面的 test, 而不是你傳入的 test
bear28
一般會員


發表:44
回覆:53
積分:19
註冊:2002-09-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2015-06-11 19:44:47 IP:49.219.xxx.xxx 訂閱
那寫法這樣對嗎?
Procedure TFmmain.DataShow(test : TFDQuery);

var

s1:string;

begin

test.Close;

test.SQL.Clear;

s1:='Select * from test2';

test.SQL:=s1;

test.Open;

end;
===================引 用 tuga 文 章===================
可以, 但是你既然已經傳入 test, 就不要再用 dm.test,
因為 dm.test 是直接呼叫 dm 裡面的 test, 而不是你傳入的 test
P.D.
版主


發表:571
回覆:3888
積分:3677
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2015-06-11 20:58:58 IP:118.169.xxx.xxx 未訂閱
我覺得以下的程式叫多此一舉, 雖然我不清楚你要傳入的 DataSet 是要做什麼,
通常傳入一個Query, 是在外層已經完成了一個Query 的資料集, 為了不想在 proceudre 再重覆開啟,
所以導入進來, 可以直接引用,
但你的程式, 把外層 Query 導入, 然後又關了它, 結果又重新給予sql值再open, 那又何必從外層導入呢?
乾脆直接在 procedure 中定義一組 TFDQuery , 在 begin 下, 直接去建立 TFDQuery, 再進入 sql 的設定就好了
以上是我的想法!!
===================引 用 bear28 文 章===================
那寫法這樣對嗎?
Procedure TFmmain.DataShow(test : TFDQuery);
var
s1:string;
begin
test.Close;
test.SQL.Clear;
s1:='Select * from test2';
test.SQL:=s1;
test.Open;
end;
===================引 用 tuga 文 章===================
可以, 但是你既然已經傳入 test, 就不要再用 dm.test,
因為 dm.test 是直接呼叫 dm 裡面的 test, 而不是你傳入的 test
pcplayer99
尊榮會員


發表:142
回覆:740
積分:591
註冊:2003-01-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2015-06-16 20:50:41 IP:120.236.xxx.xxx 訂閱
TFDQuery,这是一个 Class,所有 Class 的具体的实例,也就是一个 Object,和一个普通的 var 比如 var S: stirng;这里的 S,是同样的算作是一个【东西】,都是可以作为一个 function 的 Parameter 传入或传出一个 function 的。

例子:

procedure ChangeLabel(const S: string; ALabel: TLabel);
begin
ALabel.Caption := S;
end;

那么,当你想改变任何一个 TLabel 的实例,也就是某个具体的 Label 的时候,就可以调用这个 procedure (记住,procedure 就是一个没有返回值的 function)。比如:

假设你的 Form1 里面有一个 Label2: TLabel;,那么,

procedure TForm1.Button1Click(Sender: TObject)
begin
ChangeLabel('This is my test', Label2);
end;



系統時間:2017-12-15 12:40:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!