Q&A

  • 아래 DB를 TREE로 만들고 싶습니다.
TREE는 너무 헷갈려서 잘모르겠네요.

DB구조
| 이름 | 레벨 | 코드1 | 코드2 | 코드3 | 코드4 | 코드5 | 코드6 |
   AAA      1          01        
   AABB    2          01         01
   BBB      1          02
   BBBB    2          02          01
   BBCC   3          02           01        01

AAA
   ---- AABB
BBB
   ---- BBBB
            -------- BBCC

이런식으로 나오게 하고 싶습니다. DB는 이미 만들어진거고요.
트리를 이리저리 해봐도 안돼네요. 노드가 너무 헷갈려서..
부탁드려요~

그리고 트리내용을 그대로 인쇄하려면 어떻하죠?
화면이  스크롤 아래 내용까지 전부요.

2  COMMENTS
  • Profile
    이추형 2002.07.24 22:41
    SAMPLE입니다.
    도움이 되셨으면 좋겠네여....전에 저두 헤맸던 기억이...

    type // 메인 이벤트
    PENTRec = ^TENTRec;
    TENTRec = record
      CD: string; // 메인이벤트 ID
      NM: string; // 메인이벤트 명
    end;

    type // 서브이벤트
    PSUBRec = ^TSUBRec;
    TSUBRec = record
      ENT: string;   // 메인이벤트 ID
      CD: string;    // 서브이벤트 ID
      NM: string;    // 서브이벤트 명
    end;

    procedure TfrmEMS_EMSTree.sbRetrieveClick(Sender: TObject);
    // 이벤트코드에 의한 데이타 조회
    var
      entPtr: PENTRec;  // 이벤트 포인터 설정
      subPtr: PSUBRec;  // 서브이벤트 포인터 설정

      Temp_ITEM11,Temp_ITEM12:String;  //이벤트
      Temp_ITEM21,Temp_ITEM22,Temp_ITEM23:String;  // 서브이벤트
      Root_Node, Ent_Node, Sub_Node: TTreeNode; // Node이름
      iENTLOOP, iSUBLOOP:Integer; // 각 Node별 데이타를 TReeview에 대입하기위한 Loop변수
      itemcount, idx, i : integer;
      entIndex,subIndex: LongInt; // Node의 Index
      sPentCd, sSubCd:String; // 데이타별로 부모노드와 비교하여 대입하기위해 지정하는 변수
    begin
      inherited;
      tvEventList.Items.BeginUpdate;

        // TreeView1 initialize
        tvEventList.Items.Clear;

        // 메인이벤트에 대해 treeview 적용
        with qryEVENT do
        begin
          Close;
          ParamByName('ENT_ID').AsString := ceENT_ID.Text; // 입력받은 이벤트ID로 조회
          Open;
          first;
          for iENTLOOP := 1 to qryEVENT.RecordCount do // 건수가 있다면
          begin
            New(entPtr); // 메인이벤트 신규포인트 선언하고...
            Temp_ITEM11 := qryEVENTENT_ID.AsString;
            Temp_ITEM12 := qryEVENTENT_NAME.AsString;
            entPtr^.CD := Temp_ITEM11; // 조회된 이벤트ID를 대입
            entPtr^.NM := Temp_ITEM12; // 조회된 이벤트명을 대입
            // treeview에 해당항목 추가
            // root만 AddObject를 사용하고 하위는 AddChildObject를 사용한다
            Ent_Node := tvEventList.Items.AddObject(nil, Temp_ITEM12, entPtr);
            Ent_Node.ImageIndex := 0;    // 이미지리스트(imagelist1)의 0번째 image
            Ent_Node.SelectedIndex := 0; //
            Next;
          end;
        end;

        subIndex := 0;
        //서브이벤트-서브아이템등록
        WITH qrySUB do
        begin
          Close;
          ParamByName('ENT_ID').AsString := ceENT_ID.Text;
          Open;
          first;
          for iSUBLOOP := 1 to qrySUB.RecordCount do
          begin
            New(subPtr);
            Temp_ITEM21 := qrySUBENT_ID.AsString;
            Temp_ITEM22 := qrySUBSUB_ENT_ID.AsString;
            Temp_ITEM23 := qrySUBSUB_E_NAME.AsString;

            subPtr^.ENT := Temp_ITEM21;
            subPtr^.CD  := Temp_ITEM22;
            subPtr^.NM  := Temp_ITEM23;

            for i := 0 to tvEventList.Items.Count-1 do
            begin
              if tvEventList.Items[i].Level = subIndex Then
              begin
                sPentCd := PENTRec(tvEventList.Items[i].Data)^.CD;
                // Node별 이벤트id가 동일하다면
                if sPentCd = Temp_ITEM21 Then
                begin
                  // treeview에 추가하기
                  Sub_Node := tvEventList.Items.AddChildObject(tvEventList.Items[i], Temp_ITEM23, subPtr);
                  Sub_Node.ImageIndex := 1;
                  Sub_Node.SelectedIndex := 1;
                end;
              end;
            end;

            Next;

          end;
          Close;
        end;
  • Profile
    허진 2002.07.26 01:18
    답변 감사합니다.

    그런데 잘.. 이해가.. 안가는 부분들이 있네요.

    책찾아가며.. 열심히.. 보고 있습니다.

    • 김기연
    • 2002.07.25 07:19
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 단현석
      2002.07.25 18:47
      SQL 문 삽입이 잘못되어 그런 것으로 집작 됩니다. 전에 이런 경우가 있어.. 저는 아예 처음 코딩시 부...
    • KDDG_ZZOM
      2002.07.25 18:47
      우선 if DM.IsOracle then DM.DB.Commit; 이문이 실행되는지 확인해봐야겠네요... 글구 확인되면 업데이트...
    • 나옹이
    • 2002.07.25 05:13
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 한원희
      2002.07.25 06:05
    • 나옹이
      2002.07.25 08:30
    • 한원희
      2002.07.25 08:47
    • 나옹이
      2002.07.25 20:06
    • 한원희
      2002.07.25 20:16
    • 전희조
    • 2002.07.25 03:32
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 단현석
      2002.07.25 03:37
      이런 경우 대부분 스레드에서 문제가 되는 것이라고 생각합니다. 제 생각에는 생성된 스레드가 죽지 않...
    • 전희조
      2002.07.25 04:24
      먼저 답변 감사합니다. 스레드는 죽이지 않습니다. 프로그램을 종료할때까지 죽이지 않습니다. 스레드를...
    • 단현석
      2002.07.25 03:34
      그렇게 많은 방법이 있지는 않을 것 같습니다.. 제 생각에.. 칼크필드를 저장하려고 하는 것이 문제인데...
    • 장덕곤
    • 2002.07.25 01:48
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 한원희
      2002.07.25 04:42
      코딩으로 바꾸시려면, 간단하게, test.dpr 소스를 편집기로 읽어 들인 후에, Program test; 이 부분을...
    • 장덕곤
      2002.07.25 19:14
      한원희님.. 감사합니다... 다음에 또 궁금한게 있으면 부탁해도 되죠?^^ 제가 아직초보라서요...
    • 홍성락
      2002.07.25 01:06
      hsr/////////////////////////////////////////////////////////////// 아래처럼 전체나 특적 칼럼,열에 ...
    • 수서니
      2002.07.25 04:18
      먼저 감사합니다요~ DBGrid1.colwidths[3]:=100; 일케 했더니 에러가 나는군요, Undeclared ident...
    • 임형호
      2002.07.25 04:44
      에러의 내용은 colwidths 라는 속성이 존재하지 않는다는 말입니다. 즉..잘못기입했다는 얘기지요. DBGri...
    • 홍성락
      2002.07.25 04:22
      hsr/////////////////////////////////////////////////////////////// 아래처럼 전체나 특적 칼럼,열에 ...
    • 수서니
      2002.07.25 19:32
      아~ 글쿠낭... ㅋㅋ 감사 감사요~~ 아주 잘 되네용... ㅎㅎㅎ
    • ji
    • 2002.07.24 23:55
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이현철
      2002.07.25 04:29
      우선 인디컴포넌트팩의 Sample 소스를 보시면 알수 있습니다,. 그리고 TIdUDPServer 컴포넌트 이벤트에 ...
    • 김동욱
    • 2002.07.24 23:24
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 양상훈
      2002.07.25 04:01
      //Checked 상태를 리턴하는 함수 Function TForm1.GetCheckState(hItem:HTREEITEM):Boolean; const &nbs...
    • 홍성락
      2002.07.25 22:31
    • 개미
    • 2002.07.24 23:23
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 성더기
      2002.07.26 23:55
      클라이언트의 Access가 2000이상이면 접속안되는 걸로 알고 있습니다 ODBC로 바께 안될듯.. 참고하시길.....
    • 개미
      2002.07.27 19:46
      답변 무지 감사드립니다. 고수님들에겐 별일 아니지만 저같은 초보는 많은 도움이 됩니다. 그리구, 결...
    • 나옹이
    • 2002.07.24 23:12
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 서영택
      2006.02.07 04:27
      oraquery1.Active:=true; --> oraquery1.SQL.Open;
    • 수서니
    • 2002.07.24 22:44
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 임형호
      2002.07.25 04:52
      구냥 ... 생각나는건... QRLabel.Caption:='출력할내용'+#13+'출력할내용' 하면 되거든요. 그럼 두줄로...
    • 이영동
      2002.07.25 20:46
      고정 ip가 없다면 이렇게 한번 해보세요.. 제가 사용을 해봤는데 동작이 잘 되더라고요.. 유도ip를 ...
    • 이현철
      2002.07.25 04:39
      맞습니다. 서버만이라도 고정ip를 사용해야 합니다. 메신저를 개발중이시라면, 메신저 클라이언트가 처...
    • 나옹이
    • 2002.07.24 22:05
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이추형
      2002.07.24 22:30
      제가 보기에는 UPDATESql 컴포넌트를 않쓰신것 같습니다. Query컴포와 UPDATESql 컴포 연결시켜주신후 입...
    • 홍성락
      2002.07.25 00:52
      hsr//////////////////////////////////////// 여기 팁에서 '델파이에서 한글 조합과 분리'라는 제목을 찾...
    • 이현철
      2002.07.25 04:55
      보통 대부분의 컴포넌트들이 그렇겠지만, 델파이 기본 컴포넌트와 똑같은 컴포넌트들은 거의 없다고 생각...
    • 허진
    • 2002.07.24 20:34
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이추형
      2002.07.24 22:41
      SAMPLE입니다. 도움이 되셨으면 좋겠네여....전에 저두 헤맸던 기억이... type // 메인 이벤트 PENTRe...
    • 허진
      2002.07.26 01:18
      답변 감사합니다. 그런데 잘.. 이해가.. 안가는 부분들이 있네요. 책찾아가며.. 열심히.. 보고 있습...