全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1532
推到 Plurk!
推到 Facebook!

fr3 script 取得 datafield 值的問題

答題得分者是:ufjjc
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2015-09-13 11:42:03 IP:118.160.xxx.xxx 未訂閱
請問各位:
使用 fr3(或以上), 在Script 上要取值存值, 用 Get(), Set() 操作
例如, 定義了一個 myVariable 的變數在 fr3的 Variables 中
於Script中(如 xxxx.onBEFOREPRINT) 以下的做法是可行的
procedure .....
var mydata: string;
begin
mydata:= Get('myVariable');
...
Set('myVariable', mydata)
end;

但如果我要取出一個 欄位值, 不管我如何下, 都會出現 Expect ; ... (忘了完整錯誤訊息)的錯誤
例如, 在 fr2.5中 我這麼做 (mydata 必須在 fr2.5中先宣告)
mydata:= [frDatatSet1."FIELD1"]
在 fr3 中
procedure .....
var mydata: string;
begin
mydata:= [frxDataSet1."FIELD1"] --> 錯誤
mydata:= <frxDataSet1."FIELD1"]> --> 錯誤, 因為<> 會變成算式
mydata:= Get([frxDataSet1."FIELD1"] ) --> 一樣錯誤
mydata:= Get(frxDataSet1."FIELD1" ) --> 一樣錯誤
mydata:= Get(<frxDataSet1."FIELD1"]>) --> 一樣錯誤
....
end;
所以想請問各位有寫過 fr3 的朋友們, 知不知道要如何下才是對的
(我要的是把欄位某值取出定義到一個變數值, 而也找了很多fr3, fr4的網路資料, 有提及Script, 但都沒講到這段)
編輯記錄
P.D. 重新編輯於 2015-09-13 11:42:52, 註解 無‧
P.D. 重新編輯於 2015-09-13 11:45:14, 註解 無‧
P.D. 重新編輯於 2015-09-13 11:47:07, 註解 無‧
ufjjc
一般會員


發表:18
回覆:47
積分:23
註冊:2002-05-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2015-09-14 12:27:12 IP:118.170.xxx.xxx 訂閱
這是 以前 開發的程式碼 , 提供給您參考

[code delphi]
procedure Memo6OnAfterData(Sender: TfrxComponent);
var
rSubTot : real;
begin
// rSubTot := rSubTot ( <
// UniDACQuery1."los_qty">)*;

if (-1) = 0 then
begin
Memo18.text := '0';
end;

if -1 > 0 then
begin
Memo18.text := FloatToStr(memo18.value Memo6.value);
end;


end;
[/code]
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2015-09-14 15:55:46 IP:59.120.xxx.xxx 未訂閱
謝謝提供所資訊,
所以 fr3 是以 memo.text來取出欄位值囉! 但如果我是要寫在 on B eforePrint 之前那又該怎麼辦呢?
我想應該 fr 報表是有提供 欄位值 如何存入到變數值的功能吧!
還是, 我想到, 是不是有可能利用 fr 內建 string function 來達成呢?
我抽空再測試一下, 或許可行!
===================引 用 ufjjc 文 章===================
這是 以前 開發的程式碼 , 提供給您參考

[code delphi]
procedure Memo6OnAfterData(Sender: TfrxComponent);
var
rSubTot : real;
begin
// rSubTot := rSubTot ( <
// UniDACQuery1."los_qty">)*;

if (-1) = 0 then
begin
Memo18.text := '0';
end;

if -1 > 0 then
begin
Memo18.text := FloatToStr(memo18.value Memo6.value);
end;


end;
[/code]
ufjjc
一般會員


發表:18
回覆:47
積分:23
註冊:2002-05-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2015-09-14 17:00:59 IP:118.170.xxx.xxx 訂閱
測試 ok

procedure Page1OBeforePrint(Sender: TfrxComponent);
var
sCust : string;
begin
sCust := ;
ShowMessage('Data:' sCust);
end;

P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2015-09-15 00:49:52 IP:118.160.xxx.xxx 未訂閱
感謝提供,
這個方法我曾試過不行, 不知是不是版本問題,
找個時間我再測一下, 謝謝!
===================引 用 ufjjc 文 章===================
測試 ok

procedure Page1OBeforePrint(Sender: TfrxComponent);
var
sCust : string;
begin
sCust := ;
ShowMessage('Data:' sCust);
end;

P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2015-09-15 22:46:59 IP:118.169.xxx.xxx 未訂閱
終於測出可行的用法
var data: string;
begin
data:= '';
Set('hPage', 1);
if = then Set('hCounter',data);
end;

重點在 data 的給值, 不可這樣使用 data:=
我一直卡在這裡, 然後用 Set() 就引發錯誤,
而我發現 data 必須把欄位值變成一個字串, 才能丟回Vraiables中

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