Q&A

  • cashedupdate 이용하는 코딩... 방법을 몰라서요..
query컴포넌트와 dbgrid컴포넌트를 이용해서 작업을 하고 있습니다..

현재 bde상태는 SQLPASSTHRU MODE=SHARED AUTOCOMMIT 이렇게 되어 있습니다.

이러한 상태를 변경할수는 없습니다..



1월에서 12월까지 데이타를 조회하는것인데..

그러니깐 조회되는 데이타의 수는 언제나 12건입니다..

만약 해당데이타가 존재하지 않는다면 1월에서 12월까지의 데이타를

임의로 생성시켜서 있는것 처럼 dbgrid에 보여 주고 다른 값들을 사용자가 수정하도록

프로그램을 만들려고 합니다...

그런데 1월에 해당하는 데이타를 수정하고, 2월의 데이타 수정하고,

수정하고자 하는 데이타를 모두 수정한 후 일괄저장 처리를 하려고 합니다..

그런데 autocommit으로 되어 있으므로 한 row를 수정하고 다음row로 이동하면 자동으로

저장이 되는것 같습니다..

처음에 조회할 당시 데이타가 존재하지 않을 경우 강제로 12건의 데이타를 append시켜 주는데

이때에도 append후 commit을 하지 않고 종료하는데도 11건의 데이타는 db에 반영되어 있습니다.

commit을 하지 않으면 12건 모두 없는 상태로 돌아가야 하는데..

그렇게 되지 않습니다...

query의 cashedupdate를 True로 하고 이러한 작업들을 수행하려고 합니다...

이러한 작업이 가능하도록 코딩하는 법을 자세히 알려주세요...

제발...

2  COMMENTS
  • Profile
    타락천사 2001.02.06 00:27
    안녕하세여..타락임다..^^



    해보지 않았지만, TSession 을 추가하고



    TQuery의 AutoSession을 True로 하면 될거 가튼데여..ㅠㅠ



    함 방법을 차자 보시구..



    구래두 안되면, 다시 질문 주세여..^^;;



    즐푸하세여...^^



    타락천사...

  • Profile
    조덕진 2001.02.06 00:15
    델고수를 꿈꾸는 초봅니다.



    DBGrid를 사용해서는 님께서 하려는 작업을 할 수 없는 것으로 알고 있습니다.

    StringGrid를 사용해서 각각의 셀의 값을 수정/저장해야 할 것 같습니다.

    StringGrid에 값을 넣기 위한 Query1과 수정작업에 사용할 Query2를 만드시고

    각각의 SQL문을 넣어 주시면 됩니다.



    StringGrid에 TQuery의 값을 넣는 방법입니다.



    :

    Query1.Prepare;

    Query1.Open; //또는 Query1.Active := True;

    with Query1 do

    begin

    First;

    nLoop := 1;

    GridGet.RowCount := 13; // 첫번째 행에 제목을 넣기위해 13으로 설정

    while not Eof do

    begin

    GridGet.Cells[ 0, nLoop] := FieldByName('field_1').AsString;

    GridGet.Cells[ 1, nLoop] := FieldByName('field_2').AsDateTime;

    GridGet.Cells[ 2, nLoop] := FieldByName('field_3').AsInteger;

    :

    nLoop := nLoop + 1;

    Next;

    end;

    First;

    end;





    StringGrid의 값을 DB로 저장하는 방법입니다.



    :

    for nLoop := 1 to GridGet.RowCount do

    begin

    with Query2 do

    begin

    ParamByName('field_1').AsString := GridGet.Cells[ 0, nLoop];

    ParamByName('field_2').AsString := GridGet.Cells[ 1, nLoop];

    ParamByName('field_3').AsString := GridGet.Cells[ 2, nLoop];

    :

    Prepare;

    ExecSQL;

    end;

    end;



    더욱 자세한 내용은 검색에서 스트링그리드 또는 StringGrid 로 검색하시면 많은 답변이

    있습니다.



    초보 wrote:

    > query컴포넌트와 dbgrid컴포넌트를 이용해서 작업을 하고 있습니다..

    > 현재 bde상태는 SQLPASSTHRU MODE=SHARED AUTOCOMMIT 이렇게 되어 있습니다.

    > 이러한 상태를 변경할수는 없습니다..

    >

    > 1월에서 12월까지 데이타를 조회하는것인데..

    > 그러니깐 조회되는 데이타의 수는 언제나 12건입니다..

    > 만약 해당데이타가 존재하지 않는다면 1월에서 12월까지의 데이타를

    > 임의로 생성시켜서 있는것 처럼 dbgrid에 보여 주고 다른 값들을 사용자가 수정하도록

    > 프로그램을 만들려고 합니다...

    > 그런데 1월에 해당하는 데이타를 수정하고, 2월의 데이타 수정하고,

    > 수정하고자 하는 데이타를 모두 수정한 후 일괄저장 처리를 하려고 합니다..

    > 그런데 autocommit으로 되어 있으므로 한 row를 수정하고 다음row로 이동하면 자동으로

    > 저장이 되는것 같습니다..

    > 처음에 조회할 당시 데이타가 존재하지 않을 경우 강제로 12건의 데이타를 append시켜 주는데

    > 이때에도 append후 commit을 하지 않고 종료하는데도 11건의 데이타는 db에 반영되어 있습니다.

    > commit을 하지 않으면 12건 모두 없는 상태로 돌아가야 하는데..

    > 그렇게 되지 않습니다...

    > query의 cashedupdate를 True로 하고 이러한 작업들을 수행하려고 합니다...

    > 이러한 작업이 가능하도록 코딩하는 법을 자세히 알려주세요...

    > 제발...