Q&A

  • db 데이타를 트리뷰로 가져오고 싶은데.. 해결부탁합니다.
안녕하세요! 또 궁굼한게 있어서 .... (^[^;; 죄송.



테이블에 저장된 DATA들을 읽어서 트리뷰에 가지고 오고 싶은데 어떻게 하면 되죠!

문제는 SORT 라는 필드에 1, 11, 111, 1111,....

2, 21, 211, 2111....... DATA가 저장되어 있읍니다.



이 DATA를 트리뷰에 --- + 1

| |--- + 11

| | |--- + 111

| | | |--- 1111

| | | |--- 1112

| | |--- + 112

| | |--- 1121

| |

| |--- + 12

|

|

--- + 2

| |--- + 21

|



이렇게 나타내고 싶은데요 !



SELECT 했서 트리로 넘기니 DATA가 루트에만 붙어서 나오더라구요....



고수님의 한수 부탁하겠읍니다.

델파이 시작한지가 얼마안되서 그러는데.. 상세하게 알켜주심 더할나위 없이

고맙겠읍니다. 그럼 좋은 하루 되세요....



2  COMMENTS
  • Profile
    하늘맥 2000.10.30 18:18
    정상용 wrote:

    > 안녕하세요! 또 궁굼한게 있어서 .... (^[^;; 죄송.

    >

    > 테이블에 저장된 DATA들을 읽어서 트리뷰에 가지고 오고 싶은데 어떻게 하면 되죠!

    > 문제는 SORT 라는 필드에 1, 11, 111, 1111,....

    > 2, 21, 211, 2111....... DATA가 저장되어 있읍니다.

    >

    > 이 DATA를 트리뷰에 --- + 1

    > | |--- + 11

    > | | |--- + 111

    > | | | |--- 1111

    > | | | |--- 1112

    > | | |--- + 112

    > | | |--- 1121

    > | |

    > | |--- + 12

    > |

    > |

    > --- + 2

    > | |--- + 21

    > |

    >

    > 이렇게 나타내고 싶은데요 !

    >

    > SELECT 했서 트리로 넘기니 DATA가 루트에만 붙어서 나오더라구요....

    >

    > 고수님의 한수 부탁하겠읍니다.

    > 델파이 시작한지가 얼마안되서 그러는데.. 상세하게 알켜주심 더할나위 없이

    > 고맙겠읍니다. 그럼 좋은 하루 되세요....





    밑에 소스는 사원관리 코드중 트리뷰에 뿌려주는 소스입니다..



    전산실 -- 정민

    -- 정훈

    -- 정안



    총무부 -- 길동

    -- 동길



    이런식으로 나오죠..





    procedure TSWmainFrm.Btn_refreshClick(Sender: TObject);

    var i,j : integer;

    s_buse,s_buseprior,s_id,s_name,s_busename,s_original : String;

    t_node,t_subnode : TTreeNode;

    begin



    IF Dm.UDB.Connected = false then Dm.UDB.Connected := true;

    i := 0;

    gSql := 'SELECT * FROM CPM3SA WHERE FCY = ''SA'' ORDER BY FDEPT,FYYNO ';

    //일단 사원을 부서순으로 정렬해야 겠죠...

    With Dm.Q_main do

    begin

    Close;

    Sql.Clear;

    Sql.Add(gSql);

    Open;



    First;

    repeat

    // 가져온 사원을 반복해서 처음 부터 끝까지 반복해서 돌립니다.

    s_buse := FieldByName('FDEPT').AsString;



    s_id := FieldByName('FYYNO').AsString;

    s_name := FieldByName('FNAME').AsString;

    s_original := 'SA'+s_buse;



    If s_buseprior <> s_buse then

    // 부서 가 바뀌면 트리뷰에 새로운 루트를 하나 부서를 표시해야 겠죠

    begin

    gsql := 'SELECT * FROM TSATPAPF WHERE PACDGB = ''02''' ;

    gsql := gsql + ' And PACODE = ''' + s_original +'''';



    With Dm.Q_sub do

    begin

    close;

    Sql.clear;

    Sql.Add(gSql);

    open;

    s_busename := FieldByName('PADESC').AsString;





    end;

    t_node := Tv_main.Items.Add(nil,s_busename);

    // 여기서 새로운 부서의 트리뷰의 노드를 기억합니다.



    t_node.ImageIndex := 0;

    end;

    s_id := s_id + ' ' +s_name;

    t_subnode := Tv_main.Items.AddChild(t_node,s_id );

    // 개개인의 이름과 아이디를 위에 기억한 노드밑에 표시합니다.



    t_subnode.ImageIndex := 1;

    // 이것은 트리뷰에 그림을 표시해 주죠...



    s_buseprior := FieldByName('FDEPT').AsString;

    // 부서를 기억했다가 다음 레코드의 부서랑 비교해서....

    i := i +1;

    next;



    until Eof;



    end;







    end;







  • Profile
    봉기 2001.11.14 03:09
    하늘맥 wrote:

    > 정상용 wrote:

    > > 안녕하세요! 또 궁굼한게 있어서 .... (^[^;; 죄송.

    > >

    > > 테이블에 저장된 DATA들을 읽어서 트리뷰에 가지고 오고 싶은데 어떻게 하면 되죠!

    > > 문제는 SORT 라는 필드에 1, 11, 111, 1111,....

    > > 2, 21, 211, 2111....... DATA가 저장되어 있읍니다.

    > >

    > > 이 DATA를 트리뷰에 --- + 1

    > > | |--- + 11

    > > | | |--- + 111

    > > | | | |--- 1111

    > > | | | |--- 1112

    > > | | |--- + 112

    > > | | |--- 1121

    > > | |

    > > | |--- + 12

    > > |

    > > |

    > > --- + 2

    > > | |--- + 21

    > > |

    > >

    > > 이렇게 나타내고 싶은데요 !

    > >

    > > SELECT 했서 트리로 넘기니 DATA가 루트에만 붙어서 나오더라구요....

    > >

    > > 고수님의 한수 부탁하겠읍니다.

    > > 델파이 시작한지가 얼마안되서 그러는데.. 상세하게 알켜주심 더할나위 없이

    > > 고맙겠읍니다. 그럼 좋은 하루 되세요....

    >

    >

    > 밑에 소스는 사원관리 코드중 트리뷰에 뿌려주는 소스입니다..

    >

    > 전산실 -- 정민

    > -- 정훈

    > -- 정안

    >

    > 총무부 -- 길동

    > -- 동길

    >

    > 이런식으로 나오죠..

    >

    >

    > procedure TSWmainFrm.Btn_refreshClick(Sender: TObject);

    > var i,j : integer;

    > s_buse,s_buseprior,s_id,s_name,s_busename,s_original : String;

    > t_node,t_subnode : TTreeNode;

    > begin

    >

    > IF Dm.UDB.Connected = false then Dm.UDB.Connected := true;

    > i := 0;

    > gSql := 'SELECT * FROM CPM3SA WHERE FCY = ''SA'' ORDER BY FDEPT,FYYNO ';

    > //일단 사원을 부서순으로 정렬해야 겠죠...

    > With Dm.Q_main do

    > begin

    > Close;

    > Sql.Clear;

    > Sql.Add(gSql);

    > Open;

    >

    > First;

    > repeat

    > // 가져온 사원을 반복해서 처음 부터 끝까지 반복해서 돌립니다.

    > s_buse := FieldByName('FDEPT').AsString;

    >

    > s_id := FieldByName('FYYNO').AsString;

    > s_name := FieldByName('FNAME').AsString;

    > s_original := 'SA'+s_buse;

    >

    > If s_buseprior <> s_buse then

    > // 부서 가 바뀌면 트리뷰에 새로운 루트를 하나 부서를 표시해야 겠죠

    > begin

    > gsql := 'SELECT * FROM TSATPAPF WHERE PACDGB = ''02''' ;

    > gsql := gsql + ' And PACODE = ''' + s_original +'''';

    >

    > With Dm.Q_sub do

    > begin

    > close;

    > Sql.clear;

    > Sql.Add(gSql);

    > open;

    > s_busename := FieldByName('PADESC').AsString;

    >

    >

    > end;

    > t_node := Tv_main.Items.Add(nil,s_busename);

    > // 여기서 새로운 부서의 트리뷰의 노드를 기억합니다.

    >

    > t_node.ImageIndex := 0;

    > end;

    > s_id := s_id + ' ' +s_name;

    > t_subnode := Tv_main.Items.AddChild(t_node,s_id );

    > // 개개인의 이름과 아이디를 위에 기억한 노드밑에 표시합니다.

    >

    > t_subnode.ImageIndex := 1;

    > // 이것은 트리뷰에 그림을 표시해 주죠...

    >

    > s_buseprior := FieldByName('FDEPT').AsString;

    > // 부서를 기억했다가 다음 레코드의 부서랑 비교해서....

    > i := i +1;

    > next;

    >

    > until Eof;

    >

    > end;

    >

    >

    >

    > end;

    이번에 졸업작품으로 메신져를 하고 있습니다.

    고수님들 위의 소스좀 해석해 주세여

    제 DB의 구성은

    u_group | u_id | 대충 DB에 이런것들이 있습니다.

    ---------------- 테이블명은 friend 구여

    FF | aaa | 이것을 트리뷰에 표현을

    AA | bbb | FF --aaa

    FF | ccc | | |ㅡbbb

    |

    AA --ccc

    이런식으로 표현할려구 합니다.

    고수님들 제발 많은 도움 부탁드립니다.

    위의 소스는 테이블을 두게 쓰는것 같더라구여 테이블은 하나인데....ㅠ,.ㅠ