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

請問當treeview新增資料時怎樣設計才能不用再異動程式碼?

尚未結案
goodjimmy
一般會員


發表:20
回覆:26
積分:9
註冊:2004-02-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-21 08:12:59 IP:218.162.xxx.xxx 未訂閱
請問各位高手       我的程式是用treeview的元件,去讓使用者選擇項目後,去資料庫呼叫欄位值回傳到程式,做統計分析    現在遇到一個問題,我的treeview的項目,如果新增後,程式碼一般是要再新增那一個項目的程式,可否能新增分析項目,但不用動到程式碼,因為已經封裝完畢,每次改一個項目,都要再封裝一次,實為麻煩,謝謝 分析項目的程式碼如下
if (Node.Text = '平均住院日') then //判斷treeview的項目
        begin
            table := 'INH ';  //資料庫欄位
            pk := 'INH_YYYMM'; //資料庫欄位
            mitem := 'SUM(INH_SUMDAY)'; //資料庫欄位
            str := 'INH_SEX ='   '1'; //資料庫欄位
            ditem := 'SUM(INH_PTCT)'; //資料庫欄位
            mSQL(mitem, str);//統計的分子程序
            dSQL(ditem);  //統計的分母程序
            start := 'INH_SEX'; //資料庫欄位
            add := 'SUM(INH_SUMDAY) , SUM(INH_PTCT) '; //資料庫欄位
            SQL(start, add); //統計分析圖表的主程序
        end    
jimmy_wei
高階會員


發表:9
回覆:176
積分:147
註冊:2003-08-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-21 17:04:52 IP:210.244.xxx.xxx 未訂閱
當然有可能,但是這關係到你一開始treeview的設計, 給你一點小小的建議,一般來說你如果想做到可以動態的 增加or減少一些條件,然後程式碼又可以不動,你在程式設 計的初期就必需想好一個彈性比較大的架構,然後在利用 一些命名原則,就可以做到條件異動,但不需要異動到程式 碼了,就拿你treeview為例好了,你可以在TreeNode.data (這是一個指標型態你可以自己訂義要放那些東西)記錄欄 位名稱,最後當然你的sql語法,也是用串的串起來,送到資 料庫去,不知道這樣說,你可以理解嗎?? 我想你現在的問題一定是,user每加一個條件你就要加一段 程式碼,然後再去安裝一次,很麻煩,但是我想在你的架構不 變的情況之下,這種情形可能是不可避免的喔...
goodjimmy
一般會員


發表:20
回覆:26
積分:9
註冊:2004-02-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-21 19:16:45 IP:218.162.xxx.xxx 未訂閱
嗯!! 我了解你的意思,所以我的架構,也準備更動,只是在TreeNode.data (這是一個指標型態你可以自己訂義要放那些東西)記錄欄 位名稱,最後當然你的sql語法,也是用串的串起來,這一個做法,怎麼做呢? 可否能給我參考的資料or範例? 讓我有語法的方向 因為我的功力不高,也很想學習,只是一時想不出方法 可以使用dll的觀念嗎?
jimmy_wei
高階會員


發表:9
回覆:176
積分:147
註冊:2003-08-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-22 16:44:02 IP:210.244.xxx.xxx 未訂閱
因為,我其實不是太瞭解你是怎麼實做的,你可以先講清楚一點嗎?? 是不是treenode裡選擇條件,然後依據這些條件產生sql語法,去資料 庫裡抓資料??如果是,我才能繼續往下講,不是的話可能會雞同鴨講...
goodjimmy
一般會員


發表:20
回覆:26
積分:9
註冊:2004-02-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-22 18:14:43 IP:218.162.xxx.xxx 未訂閱
您好:    是判斷treenode的文字,去執行上述的語法,設定好treenode   ex:    住院品質指標      平均住院日      住院性別比率      超過30人比率      住院感染率    如果使用者選擇了「住院性別比率」,那程式就會判斷,該如何組合上述的sql語法,到資料庫中找資料,到程式中組合運算,跑出統計分析和圖表分析!!    以下是我的主FUNCTION
function TForm2.SQL(start: string; add: string): string;
var I, SUM: Integer;
    AddVal: Double;     begin
    try
        Form4 := Tform4.Create(Application);
        while not DataModule1.ADOQuery2.EOF do//分子陣列
        begin
            Form4.Series4.DataSource := DataModule1.ADOQuery2;
            Form4.Series4.XLabelsSource := DataModule1.ADOQuery2.Fields[0].FieldName;
            Form4.Series4.YValues.ValueSource := DataModule1.ADOQuery2.Fields[1].FieldName;
            DataModule1.ADOQuery2.Next;
        end;
        while not DataModule1.ADOQuery3.EOF do//分母陣列
        begin
            Form4.Series5.DataSource := DataModule1.ADOQuery3;
            Form4.Series5.XLabelsSource := DataModule1.ADOQuery3.Fields[0].FieldName;
            Form4.Series5.YValues.ValueSource := DataModule1.ADOQuery3.Fields[1].FieldName;
            DataModule1.ADOQuery3.Next;
        end;
        for I := 0 to Form4.DBChart2.Series[0].Count - 1 do //圖表分析
        begin
                //Form4.Series5.YValue[I] = 0
            if (Node.Text = '平均住院日') then
                //AddVal := Form4.Series4.YValue[I]
                AddVal := Form4.Series4.YValue[I] / Form4.Series5.YValue[I]
            else
                AddVal := (Form4.Series4.YValue[I] / Form4.Series5.YValue[I]) * 100;                //value := floattostr(AddVal);
            if (I = 0) then
                SUM := 0
            else if (I > 0) then
                SUM := SUM   1;
            if ((StrToInt(showmonth)   I) > 12) then
            begin
                showmonth := '01';
                SUM := 0;
                if (StrToInt(showyear)   1 > 092) then
                    showyear := '093'
                else if (StrToInt(showyear)   1 > 091) then
                    showyear := '092'
            end;
            Form4.Series2.addxy(I, AddVal, showyear   '年'   IntToStr(StrToInt(showmonth)   SUM)   '月', clDefault);
            Form4.Series1.AddPie(AddVal, showyear   '年'   IntToStr(StrToInt(showmonth)   SUM)   '月', clDefault);
            Form4.Series3.Add(AddVal, showyear   '年'   IntToStr(StrToInt(showmonth)   SUM)   '月', clDefault);
        end;
        Form4.Series4.Active := false;
        Form4.Series5.Active := false;
        Form4.ShowModal;
    finally
        Form4.Free;
    end;
    DataModule1.ADOQuery1.Close;
    DataModule1.ADOQuery2.Close;
    DataModule1.ADOQuery3.Close;
end;    
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-23 04:43:32 IP:218.18.xxx.xxx 未訂閱
你好,我没太仔细看你的代码,也看不大懂。 基本上,你是要根据TreeView里的node的不同,来生成不同的SQL语句,是吧? 如果我来做,我首先把 TreeView 和一个Table绑定。这样,就可以直接通过增加Table里的Record,来使TreeVieW在运行时增加项目而不需要重新compile程序。 其次,新增加的项目需要的新的SQL语句,我也可以写好在那个Table里,选了某个Node,就去Table的相应Record里去读保存SQL语句的Field。 这样一来,将来有变动,只需要去更新那个Table就可以了。不需要再重新compile程序。
goodjimmy
一般會員


發表:20
回覆:26
積分:9
註冊:2004-02-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-10-23 09:12:30 IP:218.162.xxx.xxx 未訂閱
這是個不錯的建議,我試試看!!
系統時間:2024-11-24 17:16:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!