안녕하세요! 또 궁굼한게 있어서 .... (^[^;; 죄송.
테이블에 저장된 DATA들을 읽어서 트리뷰에 가지고 오고 싶은데 어떻게 하면 되죠!
문제는 SORT 라는 필드에 1, 11, 111, 1111,....
2, 21, 211, 2111....... DATA가 저장되어 있읍니다.
이 DATA를 트리뷰에 --- + 1
| |--- + 11
| | |--- + 111
| | | |--- 1111
| | | |--- 1112
| | |--- + 112
| | |--- 1121
| |
| |--- + 12
|
|
--- + 2
| |--- + 21
|
이렇게 나타내고 싶은데요 !
SELECT 했서 트리로 넘기니 DATA가 루트에만 붙어서 나오더라구요....
고수님의 한수 부탁하겠읍니다.
델파이 시작한지가 얼마안되서 그러는데.. 상세하게 알켜주심 더할나위 없이
고맙겠읍니다. 그럼 좋은 하루 되세요....
> 안녕하세요! 또 궁굼한게 있어서 .... (^[^;; 죄송.
>
> 테이블에 저장된 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;