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

畫面有很多欄位資料(非DB欄位),該如何有效率的儲存及載入

答題得分者是:t27
ANDY8C
資深會員


發表:114
回覆:582
積分:299
註冊:2006-10-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-05-19 18:21:21 IP:114.32.xxx.xxx 訂閱


請問網友
有 PageControl 下有四頁 TabSheet
如圖
每一 TabSheet 都有很多 EDIT 的輸入資料,這些輸入資料,下次程式再啟用時, 希望被更改後的數據還在
所以會有儲存(save) 及載入(LOAD) 的動作

但是
因為每頁 的 EDIT 太多,目前軟體的寫法

儲存 時,以一串文字 => EDIT1.TEXT ',' EDIT2.TEXT ','........存到文字檔

載入時 => 先讀取文字檔那一長串字串( sstring_all:= READLN..... )

然後
EDIT1.TEXT := PPPASER( sstring_all,1); // 取第 1 個子字串
EDIT2.TEXT := PPPASER( sstring_all,2); // 取第 2 個子字串
EDIT3.TEXT := PPPASER( sstring_all,3); // 取第 3 個子字串....... 等,感覺是苦力的工作,

若欄位是 edit 還好,有明確的數據,若遇到 Combox/chkbox .......等,必須先 indexitem 取值後再存,
一堆判斷式......等很繁瑣的對應軟體寫法
想請問
,是否有懶人的指令 "Save ALL" , "Load ALL "
可以直接將目前畫面的所有輸入資料及該欄位名稱/型態,都儲存起來.
下次使用 " Load ALL" 後,所有的 edit / combobox/chkbox.....等的值,
都會顯示,且是上次儲存的數據

請建議思考方向及做法,若有範例,感激不盡

謝謝您

------
---------------------------------------
偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩.
pedro
尊榮會員


發表:152
回覆:1177
積分:865
註冊:2002-06-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-05-19 18:40:27 IP:60.248.xxx.xxx 未訂閱
hi

如果您要拉拉雜雜地把整個form都儲存起來,就類似IDE載入表單的方式
http://www.programmer-club.com.tw/ShowSameTitleN/delphi/20399.html

但我的想法,其實可以用Ini來存您所述元件的Text及特定屬性值
1.在表單上找尋是Edit元件,元件名=Edit.Text值,寫入Ini
2.在表單上找尋是ComBox...元件名=.....

參考Is,As及巡覽元件的方法
http://delphi.ktop.com.tw/board.php?cid=30&fid=71&tid=95168

http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=31853
GrandRURU
站務副站長


發表:235
回覆:1655
積分:1753
註冊:2005-06-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-05-20 12:52:43 IP:203.75.xxx.xxx 訂閱
或許也可以利用Mybase來處理
ClientDataSet DBEdit, DBCheckbox DBComboBox...etc
定義好之後,直接存成 .CDS (XML格式)

其它的,就和INI檔的處理方式差不多
P.D.
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-05-20 22:05:59 IP:118.169.xxx.xxx 未訂閱
我想兩位前輩都誤會了發帖網友的意思, 他的意思是不是有像procdure 的功能一樣, 只要下一個
xxxxxx.saveall 就可以解決一切, 因為兩位所提的還是要寫一大串code才能完成, 但就我所知
要怎麼收穫就怎麼栽, 我可以寫出一個saveall 的指令出來, 但充其量還是要寫一支procedure 或 function
裡面寫一堆code 來讀取每一個componment 的值, load 或 save 到指定的位置上, 所謂懶人收成法, 就是
看有沒有人寫出這個東西, 後人享用便是了,
可以給一個方向, 搜尋 TComponment 或 FindComponment 著手
ANDY8C
資深會員


發表:114
回覆:582
積分:299
註冊:2006-10-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-05-21 08:33:19 IP:210.66.xxx.xxx 訂閱
感謝 pedro , GrandRURU ,P.D. 前輩的指引

P.D. 兄更是一語道破 小弟的心聲

儲存 螢幕的欄位值,是第一件事
回復顯示,把各欄位的值一一對照回去,是第二件事

所以 "懶人法" 還是沒實現,目前還在研究如何完成 "懶人" 的寫法

謝謝各位給的方向
------
---------------------------------------
偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩.
t27
中階會員


發表:34
回覆:95
積分:90
註冊:2002-06-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-05-23 11:31:50 IP:61.228.xxx.xxx 訂閱
參考一下:
儲存:
for i := 0 to ComponentCount-1 do
begin
if Components[i] is TPageControl then
begin
for j := 0 to TPageControl(Components[i]).PageCount-1 do
begin
xx := TPageControl(Components[i]).Pages[j].ControlCount;
for k := 0 to xx-1 do
begin
if (TPageControl(Components[i]).Pages[j].Controls[k] is TEDit) then
begin
end;
if (TPageControl(Components[i]).Pages[j].Controls[k] is TCombox) then
begin
end;
end;
end;
end;
end;

讀取:
for i := 0 to DataSet.FieldCount-1 do
begin
cFNa := DataSet.Fields[i].FieldName;
TmpComp := self.FindComponent(cFNa);
if TmpComp is TEdit then
TEdit(self.FindComponent(cFNa)).Text := ;
if TmpComp is TMaskEdit then
TMaskEdit(TmpComp).Text := ;
if TmpComp is TComboBox then
TComboBox(TmpComp).Text := ;
end;
編輯記錄
t27 重新編輯於 2010-05-23 11:42:53, 註解 無‧
系統時間:2017-12-12 12:34:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!