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

有关ERP中BOM以树状显示在DBTREEVIEW中的问题

尚未結案
SUNSEAVE
一般會員


發表:66
回覆:44
積分:22
註冊:2003-09-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-07 14:23:10 IP:220.248.xxx.xxx 未訂閱
我数据结构为: FATHERITEM ITEM a b a c b m b n c f c m NULL a b和c下都有ITEM为m的子项,在连接DBTREEVIEW中,PARENTFIELD设置为FATHERITEM,DISPLAYFIELD设置为ITEM,碰到问题是DBTREEVIEW中当b下有了m子项那c下m子项就不出现,当c下m子项有了m子项那b下m子项就不出现,请问是哪儿有问题?
doll_candy
初階會員


發表:110
回覆:53
積分:32
註冊:2002-04-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-01-16 11:08:10 IP:61.218.xxx.xxx 未訂閱
hi 您好 不是很了解您的問題點,但依據尚可了解是否如下圖,多層次請自己想像,如是的話,我再把自己的程式放進來 doll_candy
------
doll_candy
SUNSEAVE
一般會員


發表:66
回覆:44
積分:22
註冊:2003-09-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-01-16 11:13:59 IP:220.248.xxx.xxx 未訂閱
对,就是如果在管理维护系统下有2基本资料管理,就只出现一个,另一个被隐藏掉了
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-01-19 10:23:54 IP:210.65.xxx.xxx 未訂閱
Hi:    DBTreeView 是 3rd Party 的元件嗎? D6 與 D7 中似乎找不到耶!! 你也可以用 TreeView 的元件,在自己去建立這棵 Tree
procedure TForm1.Button1Click(Sender: TObject);
var
    MyTreeNode: TTreeNode;
    procedure QueryDetails(ParentID : Integer ; TreeNode : TTreeNode);
    var
        Details : TQuery;
        MyTreeNode: TTreeNode;
    begin
        Details := TQuery.Create(Self);
        Details.DatabaseName := QRY_CSQ_OUTLINES.DatabaseName;
        Details.Close;
        Details.SQL.Clear;
        Details.SQL.Add('SELECT  CREATION_DATE,'   #13  
                        '        CREATED_BY,'   #13  
                        '        LAST_UPDATE_DATE,'   #13  
                        '        LAST_UPDATED_BY,'   #13  
                        '        OUTLINE_ID,'   #13  
                        '        ENTRY_SEQUENCE,'   #13  
                        '        LINE_TYPE_CODE,'   #13  
                        '        LANGUAGE_CODE,'   #13  
                        '        PROMPT,'   #13  
                        '        DESCRIPTION,'   #13  
                        '        SUB_OUTLINE_ID,'   #13  
                        '        QUESTION_ID'   #13  
                        'FROM    CSQ_OUTLINE_ENTRIES'   #13  
                        'WHERE   OUTLINE_ID = '   IntToStr(ParentID));            Details.Open;
        WHILE NOT Details.Eof DO
            BEGIN
               MyTreeNode := TreeView1.Items.AddChild(TreeNode,Details.FieldByName('DESCRIPTION').AsString);
               MyTreeNode.Text := Details.FieldByName('DESCRIPTION').AsString;
               QueryDetails(Details.FieldByName('SUB_OUTLINE_ID').AsInteger,MyTreeNode);
               Details.Next;
           END;
    end;    begin
    TreeView1.Items.Clear;
    QRY_CSQ_OUTLINES.Close;
    QRY_CSQ_OUTLINES.ParamByName('P_OUTLINE_ID').AsString := '1';
    QRY_CSQ_OUTLINES.Open;
    WHILE NOT QRY_CSQ_OUTLINES.Eof DO
        BEGIN
            MyTreeNode := TreeView1.Items.AddChild(NIL,QRY_CSQ_OUTLINES.FieldByName('DESCRIPTION').AsString);
            QueryDetails(QRY_CSQ_OUTLINES.FieldByName('OUTLINE_ID').AsInteger,MyTreeNode);
            QRY_CSQ_OUTLINES.Next;
        END;
end;
-------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
doll_candy
初階會員


發表:110
回覆:53
積分:32
註冊:2002-04-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-01-19 15:08:10 IP:61.218.xxx.xxx 未訂閱
hi,您好 我之前也是根據 stonys前輩 所教之方法,再修改之,你可先參考如下網址,再看後來修改之程式, http://delphi.ktop.com.tw/topic.php?TOPIC_ID=40019 procedure TFMenu.FormCreate(Sender: TObject); var I, J, K, F, M, N ,O ,P ,Q, XYZ: Integer; TEMPSTR,TEMPSTR2,TEMPSTR3,TEMPSTR4,TEMPSTR5 : string; begin Top := 0; Left := 0; if ADOQuery1.Active then begin ADOQuery1.Close; ADOQuery1.SQL.Clear; end; ADOQuery1.SQL.Add('SELECT A.MA002,C.MC002,B.MB002 FROM FADMMA A,FADMMB B,FADMMC C' ); ADOQuery1.SQL.Add('WHERE'); ADOQuery1.SQL.Add(' (B.MB004 = A.MA001'); ADOQuery1.SQL.Add(' and B.MB003 = C.MC001)'); ADOQuery1.SQL.Add(' ORDER BY A.MA001, C.MC001, B.MB001'); ADOQuery1.Open; M := 0; N := 0; O := 0; Q := 1; for I := 1 to ADOQuery1.FieldCount do begin ADOQuery1.First; TEMPSTR := ''; TEMPSTR2 := ''; TEMPSTR3 := ''; TEMPSTR4 := ''; TEMPSTR5 := ''; for XYZ:=0 to ADOQuery1.RecordCount-1 do begin case I of 1: Begin if ADOQuery1.Fields[I - 1].Value <> TEMPSTR then begin TEMPSTR := ADOQuery1.Fields[I - 1].Value; TreeView1.Items.AddChild(nil, TEMPSTR); J:=J 1; end; End; 2: Begin if (ADOQuery1.Fields[I - 2].Value <> TEMPSTR) or (ADOQuery1.Fields[I - 1].Value <> TEMPSTR2) then begin TEMPSTR := ADOQuery1.Fields[I - 2].Value; TEMPSTR2 := ADOQuery1.Fields[I - 1].Value; for K := 0 to J - 1 do begin if TreeView1.Items[K].Text = ADOQuery1.Fields[I - 2].Value then begin TreeView1.Items.AddChild(TreeView1.Items[K], TEMPSTR2); J := J 1; end; end; End; End; 3: Begin if (ADOQuery1.Fields[I - 3].Value <> TEMPSTR) or (ADOQuery1.Fields[I - 2].Value <> TEMPSTR2) or (ADOQuery1.Fields[I - 1].Value <> TEMPSTR3) then Begin TEMPSTR := ADOQuery1.Fields[I - 3].Value; TEMPSTR2 := ADOQuery1.Fields[I - 2].Value; TEMPSTR3 := ADOQuery1.Fields[I - 1].Value; if (TEMPSTR4 = TEMPSTR) AND (TEMPSTR5 = TEMPSTR2) Then Q := Q 1; for K := 0 to J - 1 do begin if ((TEMPSTR4 <> TEMPSTR) AND (TEMPSTR5 <> TEMPSTR2)) OR ((TEMPSTR4 <> TEMPSTR) AND (TEMPSTR5 = TEMPSTR2)) Then Begin P := 0; Q := 0; TEMPSTR4 := TEMPSTR; TEMPSTR5 := TEMPSTR2; End; if (TEMPSTR4 = TEMPSTR) AND (TEMPSTR5 <> TEMPSTR2) Then Begin P := P 1; P := P Q; TEMPSTR5 := TEMPSTR2; Q := 1; End; IF P= 0 Then Begin if (TEMPSTR = TreeView1.Items[K].Text) and (TEMPSTR2 = TreeView1.Items[K 1].Text) then begin TreeView1.Items.AddChild(TreeView1.Items[K 1], TEMPSTR3); J := J 1; end end else Begin if (TEMPSTR = TreeView1.Items[K].Text) and (TEMPSTR2 = TreeView1.Items[K P 2].Text) then begin TreeView1.Items.AddChild(TreeView1.Items[K P 2], TEMPSTR3); J := J 1; end end; end; End; End; end; ADOQuery1.Next; end; end; end; 方法很土,所以有可修改的地方,再告之 doll_candy
------
doll_candy
系統時間:2024-06-18 21:42:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!