Q&A

  • DB데이타를 읽어와서 트리뷰를 생성하는 방법...ㅡㅡ;
TreeView구성하는중에 구현하기 힘들어서 조언듣고자합니다.

하고자하는것은 DB상에... 아래와 같이 등록되어있습니다. 이것을 TreeView로표현...
Level   MenuName
1       코드관리
2       제품관리
3       업무조회
11      기준코드
111     업무분류
112     업태분류
12      표준코드
13      사용자코드
21      식품
22      의류
23      자동차
231     경차
232     소형차
31      재고현황조회
32      반품목록
---------------------------------
아래와 같이 DB를 로드하여 트리를 만들고자하는것입니다.
몇번에 걸쳐서 해봤는데....소스만 조잡해지고 완벽한 알고리즘이 안되더라구여!
어떻게 하면 될까여! 좋은 방법이 있을까여? 지도편달 부탁드립니다. ^^;
즐건 하루 보네세요!
-----------------------------------
+코드관리
   + 기준코드
      - 업무분류
      - 업태분류
   - 표준코드
   - 사용자코드
+제품관리
   - 식품
   - 의류
   + 자동차
      - 경차
      - 소형차
+업무조회
   - 제고현황조회
   - 반품목록
2  COMMENTS
  • Profile
    강경수 2006.03.29 01:11
    제가 사용하는 방법에서 질문한 내용으로 변경해 적어봅니다.
    도움이 되면 좋겠네요...

    procedure TForm.sbTreeClick(Sender: TObject);
    var SqlText, s, sName: String;  i, j: integer;
        A, B: array[0..2] of string;
        xTreeNode : array[0..2] of TTreeNode;

      procedure TrimTreeView(TreeView: TTreeView);
      var i, j: integer;
      begin
        with TreeView do
        for i := 3 downto 0 do
        begin
          for j := Items.Count - 1 downto 0 do
          with Items[j] do
          if (Level = i) and (Text = '')
            and (Count = 0) then   Delete;
        end;
      end;

    begin
      with Query1 do
      begin
        close;
        Sql.Text := 'SELECT DISTINCT Level,  MenuName' + cr
                  + ' FROM TABLENAME ORDER BY Level';
        
        open;    
        TreeView.Items.Clear;

        first;
        for i := 0 to 2 do
        begin
          A[i] := '--dxt1';
          xTreeNode[i] := nil;
        end;

        while not Eof do
        begin
          s := fieldbyname('Level').asstring;
          sName := fieldbyname('MenuName').asstring
          B[0] := Copy(s, 1, 1);
          B[1] := Copy(s, 2, 1);
          B[2] := Copy(s, 3, 1);

          for i := 0 to 2 do
            if (A[i] <> B[i]) then
            begin
              A[i] := B[i];
              for j := i + 1 to 2 do A[j] := '--dxt1';
              if i = 0 then
                xTreeNode[i] := TreeView.Items.Add(nil, sName)
              else xTreeNode[i] := TreeView.Items.AddChild(xTreeNode[i-1], sName);
            end;
          next;
        end;

        close;
        TrimTreeView(TreeView);
        TreeView.Selected := TreeView.TopItem;
      end;
    end;

  • Profile
    김홍철 2006.03.24 03:32
    전에 프로그램 하나 만들면서 짯던 부분이 있는데,
    같은 기능을 할거같네요....
    참조하세여....

    <!--CodeS-->
    var
        DepthString : TStringList;
        nameString  : TStringList;


    procedure TpartForm.FormCreate(Sender: TObject);
    var
        SqlString : String;
    begin
        DepthString := TStringList.Create;
        nameString  := TStringList.Create;
        SqlString := 'select * from part ';
    //    SqlString := SqlString + ' order by depth';
        ResetSQL(data.tempSQL, SqlString );
        partTree.Items.Add(partTree.selected, data.tempSQL.fieldbyname('name').asString);
        DepthString.Add(data.tempSQL.fieldbyname('depth').asString);
        data.TempSQL.Next;
        while (not data.tempSQL.Eof) do begin
            AddSubTree(data.tempSQL.fieldbyname('depth').asString,
                        data.tempSQL.fieldbyname('name').asString);
            data.TempSQL.Next;
        end;
    end;

    procedure TpartForm.AddSubTree(depth, name:String);
    var
        depth1 : String;
        i, c ,temp     : byte;
        node : TTreenode;
    begin
        c := partTree.Items.Count ;
        depth1 := copy(depth, 1, length(depth)-1);
        temp  := 0;
        for i := 0 to c - 1 do begin
            if(DepthString.Strings[i] = depth1) then begin
                node := partTree.Items.AddChild(partTree.items[i],
                    data.tempSQL.fieldbyname('name').asString);
                DepthString.insert(node.Absoluteindex, depth);
                temp := 1;
                break;
            end
        end;
        if (temp = 0) then begin
            partTree.Items.Add(partTree.items[0], data.tempSQL.fieldbyname('name').asString);
            DepthString.Add(depth);
        end;
    end;

    <!--CodeE-->


    • 박성준
    • 2006.03.28 10:24
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 이영화
      2006.03.29 18:50
      Genetic Algorithm이라면 영어실력 혹은 능력과는 전혀 무관합니당.(^^) 우선 다른 기초자료부터 조금(...
    • 박성준
      2006.03.30 19:18
      우선 답변 주셔서 감사드립니다... 전 대학원 생입니다. 교수님께서 공부할겸 해석해보라고 하셔서 계...
    • KDDG_Han
      2006.03.29 19:54
      잠깐 열어봤는데, 도와줄 수 있는 분이 아마 거의 없지 않을까 싶네요. 신경망, 유전자 알고리즘, 미니맥...
    • 박성준
      2006.03.30 19:20
      교수님께서 논문의 내용중 한쪽만 해석해보라고 해서... 몇일 못했더니 해석이 오래걸리냐고... 전 제...
    • 이영화
      2006.03.30 22:47
      OR쪽 전공이신가 보군요. 읽을만한 논문이란게 있고 레퍼런스에 제목만 올려 놓아야할 논문이 있다면.. ...
    • 석주현
      2006.03.29 00:55
      코드를 보니 왠지 DVR 냄새가 많이 나는군요. DVR 코드 특성상 Frame Buffer의 포인터를 넘기는 경우가 ...
    • 탁선호
      2006.03.29 01:55
      예, DVR 보드를 이용한 어플입니다..^^ 그런데 소나기님 FrameBuffer을 읽어서 한점씩 그린다고 하셨는...
    • 박상윤
      2006.03.30 01:43
      일단 들어오는 비트 맵의 구조를 알아야 합니다. 비트 수에 따라 틀리져.. 그리구. RaW파일인지.. 헤더 ...
    • 이영화
      2006.03.28 20:11
      우선 소켓 해제 하는 부분에 WHILE TRUE 하나 넣어보세요. 소켓이라는게 끊어라 그런다고 무조건 넵 그...
    • 임상돈
      2006.03.29 03:06
      서버에서 writebuffer 쪽에서 에러나서   cancelwritebuffer 도 에러가나는현상이 있습니다. 10...
    • 이영화
      2006.03.29 18:41
      "인볼케이션에러" 이 용어 생전 첨봅니다(ㅠㅠ) 원래 용어로 좀 알켜 주세요. 그리고, 10053, 10054는 구...
    • 황당한초보
      2006.09.07 14:20
      해보진 않았지만, usb 인지에 관한 답변이 있어 연결해드립니다.. http://www.delmadang.com/cwb-bin/Cr...
    • 김범진
    • 2006.03.27 12:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2006.03.27 22:20
      안녕하세요. 최용일입니다. 도움말의 "Real types"부분을 보시면 Single은 7~8, Double은 15~16으로 유...
    • 111
    • 2006.03.25 21:13
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 정경철
    • 2006.03.25 03:20
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하나로
      2006.03.26 11:36
      해당 연주하고자 하는 파일이 Error.Wav 일경우 <!--CodeS--> PlaySound('c:\SAMPLE\Error....
    • 김종곤
    • 2006.03.24 20:31
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2006.03.24 22:33
      안녕하세요. 최용일입니다. 음... 뭔가 다른 작업과 연관되어서 에러가 발생하는것 같은데요... Inva...
    • 최용일
      2006.03.24 22:31
      안녕하세요. 최용일입니다. 쓰레드하나 만들어서 그곳에서 클라이언트소켓에서 읽는 작업을 하시면 됩니...
    • 희아빠
      2006.04.07 22:03
      감사합니다..... 답변을 보고도 이제야 감사의 글을 드리내요 ^^ 관심에 감사드립니다,
    • 표경만
      2006.03.31 21:53
      이 문장은 FULL JOIN 을 사용한 방법입니다. 참고하세요 select isnull(a.일자, b.일자) as 일자, 매출...
    • 이상대
      2006.03.24 18:06
      select 일자,sum(매출액),sum(수금액),sum(매입액),sum(결제액)  from ( select 일자,매출액,...
    • 최용일
      2006.03.24 22:47
      안녕하세요. 최용일입니다. 기본적인 구조는 TDlgTemplate구조체와 TDlgItemTemplate구조체의 배열로 되...
    • 김현철
    • 2006.03.24 00:24
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 강경수
      2006.03.29 01:11
      제가 사용하는 방법에서 질문한 내용으로 변경해 적어봅니다. 도움이 되면 좋겠네요... procedure TFor...
    • 김홍철
      2006.03.24 03:32
      전에 프로그램 하나 만들면서 짯던 부분이 있는데, 같은 기능을 할거같네요.... 참조하세여.... <!...
    • 최용일
      2006.03.24 22:30
      안녕하세요. 최용일입니다. FindFirst/FindNext/FindClose함수를 이용해서 ShellTreeView에서 선택된 폴...
    • 하태희
      2006.03.25 02:27
      20개의 개체를 만들면서 Query1.FieldByName('name').AsString 을 개체명에 부여하는 것으로 하여야 할것...
    • 나그네
      2006.03.24 23:08
      m_name 이라는 Label 컴포넌트의 캡션을 바꾸려고 하는건가요? m_name.Caption := Query1.FieldByName('...
    • 송유철
      2006.03.23 23:42
      m_name 자체는 라벨 이름일텐데 넣는거 자체가 좀 말이 안되는거구요 어떤식을 원하는건지요?? 라벨 ...
    • 이승근
      2006.03.24 16:30
      질문이 좀 모자란듯 싶네요...^^;; 그러니깐 일종의 명세서 폼에 기입되는 QRLabel이 약 20여개 됩니다......
    • 착한천사
      2006.03.26 02:01
      착한천사 김경록입니다. 음.. 답변을 쓰신것도 조금 이해가 안되는군요.. 제가 보기엔 DB에 저장된 ...
    • 주재환
      2006.03.23 21:51
      먼저 왜 에러가 나는지 파악하셔야 할 것 같은데요... 데이터 문제 인 것 같은데...
    • 최용일
      2006.03.23 02:59
      안녕하세요. 최용일입니다 그 키는 문자열값이 아니라 문자열배열값이구요. 레지스트리 편집기로 열어보...
    • 남상훈
    • 2006.03.22 19:20
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 박면구
      2006.03.23 00:04
      오라클, mysql, msSql 등등 의 경우 파라메터를 이용하여 사용하는 것이 프로그램이 도움이 됩니다. d...
    • 방극선
      2006.03.22 21:01
      . 델파이는 파스칼 이라 string 을 구별하는데 ' ' 를 사용합니다. . 즉 'sss ddd  ffff'...
    • 송유철
      2006.03.22 20:54
      select * from MASTERM   where pid='001' 이걸 쓰신다면 dm.master_q.sql.Add('sele...
    • 남상훈
      2006.03.22 22:28
      정말 감사합니다. 머리에 쏙 들어오는 설명이었습니다. 한가지만 더 물어보겠습니다. select * fro...
    • 박지용
      2006.03.24 07:35
      ========================================== 질문의 핵심은 '' 묶을 때 좀 더낳은 방법을 찾는 것 같...
    • 송유철
      2006.03.23 01:16
      다른 분들 말들 처럼 파라미터값을 사용하는것도 한 방법인데요 일단은 적어 놓으신걸 기준으로 설명 ...