전 InterbaseExpress와 dbExpress만 사용해봤고 zeos를 사용해보지 않았기 때문에 정확한 답은 아닐 수 있습니다만..
기본적으로 인터베이스/파이어버드에서 모든 SQL 작업은 트랜잭션 안에서 이루어진다는 것을 이해할 필요가 있습니다.
인서트/업데이트/딜리트 뿐만 아니라 셀렉트조차도 그렇습니다.
인터베이스에서는 모든 쿼리를 실행하기 직전에 현재 트랜잭션 상태가 아니면 내부적으로 트랜잭션을 시작시킵니다.
따라서 기본 상태에서 한쪽 클라이언트에서 셀렉트를 하고 나면 이미 트랜잭션 안에 있기 때문에 다른 트랜잭션에서
수정하거나 삽입한 레코드가 보이지 않을 수 있을 겁니다. 내부적으로 트랜잭션을 시작했는데 커밋 혹은 롤백하지 않았기
때문입니다 (ReadCommited).
IBExpert를 써보셨으면 금방 이해하실 겁니다.
단순히 셀렉트만 했더라도 그 창을 닫으려고 하면 트랜잭션을 커밋하겠느냐고 묻지요.
이런 현상은 InterbaseExpress에서는 반드시 그렇게 보이고, dbExpress에서는 트랜잭션을 시작하지 않은 상태에서
셀렉트하면 그 바로 직전에 내부적으로 트랜잭션을 열고 실행 후에는 트랜잭션을 커밋해주기 때문에 이런 인터베이스
계열 디비의 특성은 dbExpress에서는 느껴지지 않게 됩니다.
그런데 zeos에서는 어떻게 하는지 모르기 때문에 장담할 수는 없지만, 만약 SongDel님의 말씀대로라면 zeos도 똑같은
것으로 생각됩니다. 모든 셀렉트문의 전후에서 트랜잭션을 열고 닫고 해보시면 될 겁니다.
그럼...
SongDel 님이 쓰신 글 :
: zeos 를 사용했구요
: 서버 에 4대의 클라이언트를 사용중입니다.
: 4대 다 sysdba 로 로그인했구요
: 이상하게 zquery1.post 해도 로그아웃했다 다시 로그인하지 않으면 다른 컴에서 새로 생성된 데이터를 볼수가 없네요.
: 할 수 없이 저장후 매번 다시 로그아웃,로그인 해버렸습니다. 그러면 보이네요.
: 유저를 따로따로 사용해서 그런거 같지는 않은데...
: 로그아웃하지 않고 다른 컴퓨터에서도 새 내용을 볼 수 있는 방법을 알고 싶고요...
: 단순히 zTable.open
: zTable.....
: zTable.post 또는 zQuery 도 같은방식으로 사용중입니다.
:
: 그리고 저장하자마자 비정상 종료가 가끔 되네요.(Access Violation...)
: 왜그런지...
: 인터베이스를 급하게 처음 쓰는 바람에 잘 몰라서 환장하겠습니다.
: 의외로 자료도 많이 없고...
: 고수분들 도와주시기 바랍니다.
|