|
안녕하세요 만해입니다.
어제 오프 갔다 와서 해롱 해롱 하네요 쩝~
우선 제가 아는것 만 애기 드리면요
화니화니 님이 쓰신 글 :
: 우선 DB에서 select문을 이용 특정 필드의 data를 불러 왔습니다.
: Root와 Level 2 까지의 노드는 제가 직접 값을 미리 만들었구여
: 문제는 노드 level 3 부터는 디비에서 값을 가져와서 level 2 에 자식노드로 붙일려고 하는데..
: 생각처럼 되지가 않네여...좋은 방법이나 힌트좀 주세여...
:
: 소스 입니다.
:
: AnsiString InputString;
:
: /Computer테이블의 필드 모두 호출
: Query2->Active=false;
: Query2->SQL->Clear();
: Query2->SQL->Add("Select * from Computer");
여기에서 Query2->SQL 은 Selece * from Computer 인 상태인데
:
: //WorkStation 노드 만들고
: Node = TreeView3->Items->AddChild(RootNode,"WorkStation");
: TTreeNode *WorkStationNode =TreeView3->Items->Item[1];
: TreeView3->Items->Item[1]->ImageIndex = 1;
:
: //이제 특정 필드를 불러 와서 스트링에 집어 넣고
: Query2->SQL->Add("Select count(Name) from Computer where Name=:Name");
: Query2->ParamByName("Name")->AsString =InputString;
여기서 바로 Query2->SQL->Add()를 통해 쿼리를 집어 넣었네요
그럼 위에서 넣은 Query가 남아 있는 상태서 덧붙여 지기 때문에
Query가 제대로 실행이 안될것 같네요
Query->SQL->Add()를 하기 전에는 꼭
Query->SQL->Close();
Query->SQL->Clear();
해주세요 안 그러면 이전에 입력해 놓은 쿼리가 그대로 남아 있어서
제데로된 쿼리가 전달이 안됩니다.
:
: //여기서 문제 가 발생합니다. 아무런 값도 트리에 출력되지 않거든여..
: //무엇이 잘못 된건지..스트링이라서 그런가...? 힌트좀 주세여..ㅠ_ㅠ
:
:
: Node=TreeView3->Items->AddChild(WorkStationNode,InputString);
: TreeView3->Items->Item[2]->ImageIndex = 2;
:
:
여기도 쿼리의 초기화 부분이 필요 하겠네요
: Query2->SQL->Add("Select count(Sys_User) from HW_WorkStation where Sys_User=:Sys_User");
: Query2->ParamByName("Sys_User")->AsString= InputString;
: Node=TreeView3->Items->AddChild(WorkStationNode,InputString);
: TreeView3->Items->Item[3]->ImageIndex = 3;
:
:
: //책 보고 이리저리 해 본건데..여기서 더이상 진전이 없네여.. 초보라서..
: //잘 모르거든여.. 무슨 방법을 써야 하는지...알려주세여..
:
: Query2->ExecSQL();
: Query2->Active=true;
그리고
Query->Open();
Query->ExecSQL();
둘의 차이점을 조금 애기 드리면요
그냥 간단히 자료입력이나 삭제 혹은 수정과 같이 기존의 자료에 대한 변경이 가해지면
Query->ExeSQL();을 사용하셔야 하고요
기존의 자료를 변경이 아닌 정렬이나 그런 쿼리라면
Query->Open();을 사용하세요
위의 경우는 대표적인게 Create Table, Insert, Delete, Update 같은게 있겠고요
아래의 경우는 Select가 가장 대표적이지요
그리고요 Query->Active의 경우는 대부분 쿼리의 활성화여부를 판단하기 위해
If ( Query->Active ) <- 이런식으로 많이 쓰인답니다.
그럼 이만~
|