Q&A

  • Dbgrid사용시 자료가 원상복귀... 살려주세요..
안녕하세요...
델파이 초보입니다.
정말 급해서 그러는데 답변좀 부탁드립니다.
DBGrid를 사용합니다.

(데이타를 처음 보여 줄때 - DBGrid)
   aaa     bbb     ccc     ddd
     1       2       1      10
     1       2       1      30
     0       0       0       0

(처리내용)
1) ccc := bbb - aaa;
2) ddd := ccc * 10;

(bbb열에서 Enter Key를 수정후 (3번째행은 2를 입력) - DBGrid)
   aaa     bbb     ccc     ddd
     1       2       1      10
     1       2       1      30  <-- 10으로 수정되었다가 원상복귀
     0       2       2      20  <-- bbb에 2를 입력

bbb열의 첫번째와 두번째행은 Enter만 치고 내려왔고
3번째행에서 2를 입력하면 두번째행의 ddd가 원상복귀됨.

코딩 : procedure Tform1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
       begin
         if Key = #13 then
           begin
             if DBGrid1.SelectedIndex = 1 then
               begin
                 aaa;
               end;
             DBGrid1.Perform(WM_KEYDOWN,VK_DOWN,0);
             Key := #0;
           end;
       end;

       procedure Tform1.aaa;
       begin
         query1.fieldbyname('ccc').asfloat := query1.fieldbyname('bbb').asFloat -
                                              query1.fieldbyname('aaa').asfloat;
         query1.fieldbyname('ddd').asfloat := query1.fieldbyname('ccc').asfloat * 10;
       end;

DBGrid 옵션 -> dgAlwaysShowEditor, dgRowSelect, dgMuktiSelect 만 False
               나머지 옵션은 True
query1 옵션 -> CachedUpdates, RequestLive : True
(query Component는 zeos, 델파이 버젼은 6)

설명은 길지만 제대로 했는지 모르겠네요.. ^^;;;
꼭 답변좀 부탁드립니다.

4  COMMENTS
  • Profile
    허학송 2005.04.09 17:36
    Query1 의 CachedUpdate속성을 False로 바꿔보시고
    처리해 보세요.

  • Profile
    한윤식 2005.04.09 18:07
    죄송합니다.
    해보았는데 마찬가지 입니다.
    다시한번 답변바랍니다.

  • Profile
    Crazy™ 2005.04.09 18:40
                    query1.Edit;
                    query1.Post ;
    Edit와 Post를 한번 추가해보세요.
    조금 불확실한 답변이네요..쩝
    그리고 Enter 키를 입력하지 않고 숫자만 입력후 마우스로 필드를 이동시키면
    ccc, ddd는 계산안됩니다.. 아시죠??
    그래서 가능하면 aaa 프로시저는 Query1의 해당하는 필드들 change에 주는게 좋을듯 합니다.
    그리고 Query1 의 CachedUpdate속성은 True로 주세요.

  • Profile
    한윤식 2005.04.09 20:09
    답변해 주신 모든분들에게 감사드립니다.
    정말 고맙습니다.