구창민님의 홈페이지 팁/강좌란에서 읽은 팁입니다.
실행을 하니까 그리드의 타이틀을 클릭하는 대로 쿼리가 sorting되었습니다.
그런데 문제는.. 제가 만든 테이블로 실행을 하면 타이틀을 클릭할때마다
sorting이 되기는 되는데 결과문은 전혀 변함이 없었습니다.
원인을 분석해 보려고 하지만 중간의
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
Query1.SQL[1] := Column.FieldName;
Query1.Close;
Query1.Open;
end;
부분에서 SQL[1]이 무엇을 가르키는 것인지 모르겠습니다.
꼭 좀 알려주세요.
부탁드립니다.
[팁]DBGrid에서 컬럼 헤더의 클릭에 따른 인덱스키
DBGrid에서 컬럼 헤더의 클릭에 따른 인덱스키
윈도우 탐색기나 찾기(파일, 컴퓨터)를 통해 볼 수 있는 결과 자료에서 각 컬럼의 필드 헤더를 클릭하는
것에 따라 그 컬럼 필드를 기준으로 정렬되는 것을 볼 수 있는데, 이것을 단지 윈도우 95의 기능이라고
지나치면 안된다. 우리가 사용자에게 데이터를 보여주는 형식도 이와 거의 유사하기 때문에 이러한 기능
은 매우 효과적이면서, 실무자들에게도 유용한 기능이 될 수 있다. 구현 방법은 델파이 3.0에서 추가된
컬럼 헤더의 클릭 이벤트로 쉽게 처리할 수 있는데, 사용자가 모든 필드를 대상으로 인덱스를 요구할 것
이므로 동적인 인덱스키를 지정하는 방법보다는 간단히 SQL문의 ORDER BY를 사용하는 것이 더 좋을 것
같다. 다음은 DBDEMOS 알리아스에 있는 CUSTOMER 테이블로 데모를 만든 것이다.
procedure TForm1.FormCreate(Sender: TObject);
begin
DBGrid1.Options := [dgTitles,dgIndicator,dgColLines,
dgRowLines,dgTabs,dgConfirmDelete,dgCancelOnExit];
end;
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
Query1.SQL[1] := Column.FieldName;
Query1.Close;
Query1.Open;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
with Query1 do begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM CUSTOMER ORDER BY ');
SQL.Add('CUSTNO');
Open;
end;
end;
오늘은 날씨가 별로 좋지 않네요. 하지만 이런 날씨가 더 좋은것 같습니다.
왜냐하면 어제는 너무 더웠거든요. 닭병 걸려서 고생이 이만 저만이 아닙니다.
구창민님의 소스를 토대로 ....
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
Query1.SQL[1] := Column.FieldName;
Query1.Close;
Query1.Open;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
with Query1 do begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM CUSTOMER ORDER BY ');
SQL.Add('CUSTNO');
Open;
end;
end;
위소스에서 보면 FormShow에서 SQL문장을 만들었는데 만드는 방법을 보면
알 수 있듯이 Add를 두번 쓰잖아요. 그러면 그게 SQL[0], SQL[1] 으로 들어
가게 되는 것입니다. 물론 세번 쓰면 SQL[2]에 들어 가겠죠 ...
그래서 Title을 누를 경우 필드명많 교체하는 것이지요.
당연히 필드명만 교체하면 해당 필드별로 소트가 가능 하구요...
그럼 즐거운 하루가 되세요.....
강지영 wrote:
> 구창민님의 홈페이지 팁/강좌란에서 읽은 팁입니다.
> 실행을 하니까 그리드의 타이틀을 클릭하는 대로 쿼리가 sorting되었습니다.
> 그런데 문제는.. 제가 만든 테이블로 실행을 하면 타이틀을 클릭할때마다
> sorting이 되기는 되는데 결과문은 전혀 변함이 없었습니다.
> 원인을 분석해 보려고 하지만 중간의
>
> procedure TForm1.DBGrid1TitleClick(Column: TColumn);
> begin
> Query1.SQL[1] := Column.FieldName;
> Query1.Close;
> Query1.Open;
> end;
>
> 부분에서 SQL[1]이 무엇을 가르키는 것인지 모르겠습니다.
> 꼭 좀 알려주세요.
> 부탁드립니다.
>
>
>
> [팁]DBGrid에서 컬럼 헤더의 클릭에 따른 인덱스키
> DBGrid에서 컬럼 헤더의 클릭에 따른 인덱스키
> 윈도우 탐색기나 찾기(파일, 컴퓨터)를 통해 볼 수 있는 결과 자료에서 각 컬럼의 필드 헤더를 클릭하는
> 것에 따라 그 컬럼 필드를 기준으로 정렬되는 것을 볼 수 있는데, 이것을 단지 윈도우 95의 기능이라고
> 지나치면 안된다. 우리가 사용자에게 데이터를 보여주는 형식도 이와 거의 유사하기 때문에 이러한 기능
> 은 매우 효과적이면서, 실무자들에게도 유용한 기능이 될 수 있다. 구현 방법은 델파이 3.0에서 추가된
> 컬럼 헤더의 클릭 이벤트로 쉽게 처리할 수 있는데, 사용자가 모든 필드를 대상으로 인덱스를 요구할 것
> 이므로 동적인 인덱스키를 지정하는 방법보다는 간단히 SQL문의 ORDER BY를 사용하는 것이 더 좋을 것
> 같다. 다음은 DBDEMOS 알리아스에 있는 CUSTOMER 테이블로 데모를 만든 것이다.
>
> procedure TForm1.FormCreate(Sender: TObject);
> begin
> DBGrid1.Options := [dgTitles,dgIndicator,dgColLines,
> dgRowLines,dgTabs,dgConfirmDelete,dgCancelOnExit];
> end;
>
> procedure TForm1.DBGrid1TitleClick(Column: TColumn);
> begin
> Query1.SQL[1] := Column.FieldName;
> Query1.Close;
> Query1.Open;
> end;
>
> procedure TForm1.FormShow(Sender: TObject);
> begin
> with Query1 do begin
> Close;
> SQL.Clear;
> SQL.Add('SELECT * FROM CUSTOMER ORDER BY ');
> SQL.Add('CUSTNO');
> Open;
> end;
> end;
>
>