Q&A

  • Transaction의 시작 시점과 Commit or Rollback 시점에 대하여
안녕하세요.

여러 고수님들에게 자문을 구하고자 합니다.

현재 저는 Delphi5와 Interbase6을 사용하여 프로그램을 만들고 있습니다.



Data의 입력, 수정, 삭제등을 DBGrid를 이용하여 하고자 하는데 궁금한 점이 있어

고수님들의 자문을 구하려고 있곳의 문을 두드렸습니다.

먼저 Form상에 DataSource, IBTable, DBGrid 만을 가져다 놓은뒤 간단히 테스트

해보려고 위의 3가지 Component들을 연결하여 실행을 해보니 화면상에서는 데이타의

입력이 된듯하나 Commit이 되지 않아 실제적인 데이타의 변동사항은 발생하지 않아요.

단순히 간략하게 나마 이렇게 만들어 보았지만 Transaction의 시작 시점을 어디서

해야 할지 다소 막막하더군요. 단순한 저의 생각으론 DBGrid의 Event에서 이 문제를

해결해야 될지 않을까 하지만 많은 고수님들의 고견을 듣고 싶습니다.

가장 효율적인 방법은 어떤 방법이 될런지요?

Event를 활용한다면 어떤 Component의 어떠한 Event를 이용해야 하는지요?



원래 저의 계획은 각 Database Table간의 연결이 많아 IBQuery를 이용하여 DBGrid

를 활용할 계획이었지만 IBQuery를 이용한 DBGrid에서는 데이타의 입력, 수정, 삭제가

되지 않는다고 하여 IBTable를 이용하게 되었습니다.

IBQuery를 이용하여 DBGrid에서 이 문제를 해결할수 있다면 더없이 좋겠지만, 현재

로선 달리 방법이 없군요. 혹 고수님들 중에 명쾌한 해결방을 제시해 주실분이 계신

다면 무지 무지 고맙겠숩니다.



아울러 Data의 등록, 수정, 삭제가 이루어진 이후에 DBGrid의 내용을 Refresh해야

되는 시점도 가르쳐 주시면 고맙겠습니다.



1  COMMENTS
  • Profile
    강호규 2001.02.09 22:09
    질문의 범위가 너무 크군요...

    우선 RDB에서 TTable을 직접 사용하시는 것은 좋지 않은

    방법입니다. 락이 걸려 다른 유저의 프로그램이 홀딩될 수 있기 때문입니다.

    RDB 측에서는 테이블로 참조하기 때문에 부하도 늘어나구요.

    TQuery와 DBGrid를 이용하는 방법이 전혀없는 것은 아닙니다.

    TUpdateSQL 컴포넌트를 이용하면 가능합니다.

    전에 제가 해본 경험에 의하면 TUpdateSQL 컴포넌트의 업데이트에 대한

    신뢰도가 낮기 때문에 TUpdateSQL을 통해서

    DBGrid에서 수정만 가능하도록하고

    실제 수정은

    별도의 TQuery를 통해 업데이트를 한 기역이 나눈군요.



    일반적으로 DBGrid대신에 Grid를 이용하여

    메모리상에서 수정한 후에

    그 결과를 Query를 통해 업데이트하는 방법이 가장 좋을 것 같습니다.

    코딩에 따른 부담은 있지만, 멀티유저 환경에서는 안정적인 코딩 방법

    입니다.





    궁금증 wrote:

    > 안녕하세요.

    > 여러 고수님들에게 자문을 구하고자 합니다.

    > 현재 저는 Delphi5와 Interbase6을 사용하여 프로그램을 만들고 있습니다.

    >

    > Data의 입력, 수정, 삭제등을 DBGrid를 이용하여 하고자 하는데 궁금한 점이 있어

    > 고수님들의 자문을 구하려고 있곳의 문을 두드렸습니다.

    > 먼저 Form상에 DataSource, IBTable, DBGrid 만을 가져다 놓은뒤 간단히 테스트

    > 해보려고 위의 3가지 Component들을 연결하여 실행을 해보니 화면상에서는 데이타의

    > 입력이 된듯하나 Commit이 되지 않아 실제적인 데이타의 변동사항은 발생하지 않아요.

    > 단순히 간략하게 나마 이렇게 만들어 보았지만 Transaction의 시작 시점을 어디서

    > 해야 할지 다소 막막하더군요. 단순한 저의 생각으론 DBGrid의 Event에서 이 문제를

    > 해결해야 될지 않을까 하지만 많은 고수님들의 고견을 듣고 싶습니다.

    > 가장 효율적인 방법은 어떤 방법이 될런지요?

    > Event를 활용한다면 어떤 Component의 어떠한 Event를 이용해야 하는지요?

    >

    > 원래 저의 계획은 각 Database Table간의 연결이 많아 IBQuery를 이용하여 DBGrid

    > 를 활용할 계획이었지만 IBQuery를 이용한 DBGrid에서는 데이타의 입력, 수정, 삭제가

    > 되지 않는다고 하여 IBTable를 이용하게 되었습니다.

    > IBQuery를 이용하여 DBGrid에서 이 문제를 해결할수 있다면 더없이 좋겠지만, 현재

    > 로선 달리 방법이 없군요. 혹 고수님들 중에 명쾌한 해결방을 제시해 주실분이 계신

    > 다면 무지 무지 고맙겠숩니다.

    >

    > 아울러 Data의 등록, 수정, 삭제가 이루어진 이후에 DBGrid의 내용을 Refresh해야

    > 되는 시점도 가르쳐 주시면 고맙겠습니다.

    >