Q&A

  • DBGrid 에서 순번 매기는거..
게시판에서 순번 매기는 거에 대해서 찾아보니깐.
CalcFields를 사용해서 하면 잘 나온다 해서 했는데요..
이상하게 나옵니다 ㅜ.ㅜ

procedure TForm1.Button1Click(Sender: TObject);
begin
    with Query1 do begin
        Close;
        Sql.Clear;
        Sql.Add('Select * from p028sal_tbl');

        open;
    end;
end;

procedure Query1CalcFields(DataSet: TDataSet);
begin
Query1.FieldByName('aaaa').AsInteger := Query1.RecNo;
end;

이렇게 하니깐 순번이 죄~~다 '-1'로만 나오네요..
어찌된것인지..
제가 뭘 잘못했는지요..
코딩(?)은 위에 저게 다~ 인데..
뭔가 다르게 설정해 줘야 하는게 있나요??

사용하는 디비는 SQL7.0, DB2 이 두개 디비에서 순번 매기는걸 해야하는데요.

속터져 두글것 같아요 ㅜ.ㅜ

잠시후...
procedure TForm1.Button1Click(Sender: TObject);
begin
    iCnt := 1; //전역변수로 잡았어요 ^^
    with Query1 do begin
        Close;
        Sql.Clear;
        Sql.Add('Select * from p028sal_tbl');

        open;
    end;
end;

procedure Query1CalcFields(DataSet: TDataSet);
begin
       query1.FieldByName('aaa').Asinteger := icnt;
       icnt := icnt + 1;
end;

이렇게 멋대로 고쳐놓구..
실행시켜 봤더니!! 1,2,3,4,.....64(데이타 64개여요)이렇게 잘 나왔는데요.
역시 전 부족함이 많은가 봅니다 ㅜ.ㅜ
디비그리드의 스크롤을 올렸다 내렸다 하니 숫자가 무쟈게 증가하더군요..

잠시나마 해결해따.. ㅜ.ㅜ 이러구 자만에 빠져있었는뎅..
이건 또 왜 이러나요 ㅜ.ㅜ
이거 해야지 잘 수 있는뎅..
부탁 드립니다.

4  COMMENTS
  • Profile
    열심히 2003.01.22 11:54
    매겨진 순번을 저장해야 하는것인지

    아니면 그냥 보여주기만 하면 되는것인지 모르겠네요..

    먼저 이벤트에 대해서 언제 타는지 파악을 하시는게 중요할거 같구요..

    CalField에 저렇게 넣으면 엄청나게 많이 탈겁니다..

    시점은 자료가 입력 될떄 겠지요...

    아래처럼 코딩하지 마시고..AfterInsert 이벤트에다가 전역변수를 +1씩해주는

    걸 넣어 주심 될거 같네요..하지만 이렇게 하면 문제가 많을것 같습니다...

    지금 자료가 부족해서 제대로 설명해드리긴 힘들겠구요..

    좀더 아시고 싶으심 MSN으로 메세지 날리셈...~~~


  • Profile
    이영진 2003.01.22 23:09
    제가 할려는 작업은 단순히 화면에 데이터만 뿌려주는 거구요.

    그 데이터를 dbgrid에 뿌려줄때 순번을 매기려하는 겁니다.

    인서트나 업데이트 이런작업은 전~~~혀 이뤄나지 않습니다.

    query1.FieldByName('aaa').Asinteger := icnt;
    -->요기서 'aaa' 필드는 Query1에서 NewField로 생긴겁니당
         당연히 아시는 거겠죠 ^^

    AfterInsert..이건 뭐죠??
    찾아바도 자료가 별로 없어요 ㅡㅡ;
    이걸 이용하면 할 수 있는건가요??
    예제같은 것이 있음 알려주세요 ^^;;




  • Profile
    박성훈 2003.01.24 05:12

    안녕하세요?
    파라독스로 해봤는데 아래거는 되더군요.
    Calculate필드 추가해서 아래처럼 해보세요.

    procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
      Field: TField; State: TGridDrawState);
    begin
        if Field=Table1No then
        begin
           DBGrid1.Canvas.TextOut(Rect.Left+2, Rect.Top+2, IntToStr(Table1.RecNo));
        end;
    end;

    참고하셔서 해결하시기 바랍니다.
  • Profile
    이영진 2003.01.25 02:03
    우선은 제 글을 봐주셔서 감솨 합니다..

    저두 파라독스에서 해 봤는데..
    거기선 되더라구요,.( RecNo.. 요게 먹어요 ^^)

    그냥 우선은 DBgrid를 썻던걸 StringGrid로 바꿨습니다. ^^
    약간의 노가다성인 작업이 이뤄지긴 했지만..
    어쨌는 답은 나오니깐 문제는 엄네요 ㅎㅎㅎ

    DB2 & SQL7,0에서 dbgrid에 순번매기는거..
    어떻게 해서든 꼭 해볼랍니다 ㅡㅡ;;

    수고하세요 ^^