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

由Delphi傳字串參數給報表,Crystal Reorpt中如何拆解剖析字串?

答題得分者是:st33chen
cindyliu
一般會員


發表:16
回覆:18
積分:6
註冊:2008-09-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-12-27 01:09:26 IP:118.166.xxx.xxx 訂閱
報表的查詢視窗上的查詢條件有:
客戶名稱、客戶類別、交易日期起、交易日期迄、交易金額起、交易金額迄
USER選擇了哪些條件都要列在報表表頭上,假如我只選了其中這三個條件:
客戶類別:A
交易日期起:20081201
交易日期迄:20081231
在報表表頭裡的結果是:

XXXXX 統計表

客戶名稱:XX 客戶類別:A 交易日期:20081201~20081231 交易金額:XX
================================================================
客戶名稱 交易日期 交易金額 購買產品
================================================================
ABCDEFG 20081202 1500 AAAAAAAA
TEST 20081202 5000 BBBBBBBBBBBBBBBB
XYZ 20081215 400 CCCCCCCCCCC
.....
(沒有選到的條件就先用XX代替)

現在程式裡只提供了一個變數給報表參數使用
所以我必預把這些條件加起來組成一個字串給報表
請問在串字串時要怎麼串才會比較好呢?
CRYSTAL REPORT又要怎麼去拆解傳進來的字串?
有FUNCTION可以使用嗎?如何使用?
現在我想到組字串的方式有:
(1) TmpStr := 'XX;A;20081201;20081231;XX;XX'; // 全部都組起來 (用分號連接)
(2) TmpStr := 'A;20081201;20081231'; // 只組有值的部份
或是有其他更好的組法? 請各位幫幫忙~提供點意見...3Q3Q
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-01-12 18:10:58 IP:122.116.xxx.xxx 未訂閱
您好,

建議用 tstringlist :

1. 取得條件 :
stringlist.clrear;
將條件依某順序放入 stringlist 裏 --> stringlist.add(條件值) 或 stringlist.add('XX');
2. 呼叫 report :
將 stringlist.text 傳入 report (假設變數名為 parstr --> parstr := stringlist.text; 或不用傳, 在 report 中直接取用 stringlist )
3. report 裏取用 傳入的變數
stringlist2.text := parstr; ( 這時就自己切好了)
stringlist2.strings[0] --> 第一個條件值
stringlist2.strings[1] --> 第二個條件值
...
註 : tstringlist.text 的內容 為 string1 #13#10 string2 #13#10 ...
也就是把用 #13#10 分隔的字串串(string串)當成一個字串, 取用時 strings[0] 就是第一個子字串, 類推.
您也可以把 #13#10 (也就是 delimeter) 改為分號.

奇怪, 為何這一題沒回答

============================================
又, 如果 條件是在 form1 指定, 報表是在 report1
從quickreport 的作法,
就在 report1 直接用 form1.條件值 (例如 form1.date1.text) 也可以才對, 不需要傳.
crystal report 我是沒用過, 不知是否一樣, 也請參考一下.
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2009-01-12 18:15:04, 註解 無‧
st33chen 重新編輯於 2009-01-12 18:18:56, 註解 無‧
st33chen 重新編輯於 2009-01-12 18:23:08, 註解 無‧
st33chen 重新編輯於 2009-01-13 08:06:47, 註解 無‧
cindyliu
一般會員


發表:16
回覆:18
積分:6
註冊:2008-09-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-02-19 22:06:10 IP:118.166.xxx.xxx 訂閱
謝謝您的幫忙喔...
一直忘記回來看看..

問題已經解決了,只是方法也許不是很好..
後來我的方法是在程式中將字串組起來,
且每一組都會有一定的長度,就算是user沒選也預留固定的長度
TmpStr := 'XX A 2008120120081231XX XX (長度:5,5,8,8,5,5)

然後在報表裡再加formula 用mid 截字串

客戶名稱 = mid(TmpStr,1,5)
客戶類別 = mid(TmpStr,6,5)
交易日期1 = mid(TmpStr,11,8)
交易日期2 = mid(TmpStr,19,8)
編輯記錄
cindyliu 重新編輯於 2009-02-19 22:10:49, 註解 無‧
系統時間:2024-04-25 21:56:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!