안녕하세요.
IBCConnection.AutoCommit 의문점이 있어서 문의를 드립니다.
문의사항
=>
IBCConnection.AutoCommit = true
IBCQuery.AutoCommit = true
으로 설정 한 후 버튼1을 클릭하였을 경우 'lock conflict on wait transaction'이 발생됩니다.
제가 버튼1에 'transaction'을 호출하거나 설정하지 않았는데 오류가 발생합니다.
혹시 AutoCommit도 내부적으로 'transaction'이 진행되는건가요?
그리고 PC1과 PC2에서 버튼1을 클릭하였을 경우 TEST테이블에 INSERT를 병행할수 는 없는건가요?
ex) 2008.05.29 / 1 / pc1
2008.05.29 / 2 / pc1
2008.05.29 / 3 / pc2
2008.05.29 / 4 / pc2
2008.05.29 / 5 / pc1
2008.05.29 / 6 / pc2
.....
오류메세지
=> lock conflict on wait transaction
테스트과정
=>
PC1과 PC2에서 버튼1을 동시에 클릭하거나
PC1에 버튼1을 클릭하여 For~Loop를 진행하는 동안
PC2에 버튼2을 크릭하면 오류발생.
작업환경
=> 서버: Firebird 2.1
테이블: TEST
컬럼: TESTDATE(PK)
TESTNO(PK) -> triggers에 Insert Before의하여
SELECT INVL(MAX(TESTNO), 0) + 1 FROM TEST
WHERE TESTDATE = NEW.TESTDATE
TESTNAME
개발툴: DELPHI 2007
컴포넌트: IBCConnection, IBCQuery
코딩
=> // 버튼1을 클릭 이벤트(TEST테이블에 INSERT)
For IntLoop := 1 to 1000 Do
begin
IBCQuery.Close;
IBCQuery.ParamByName('I_DATE').AsDate := Date;
IBCQuery.ParamByName('I_NAME').AsString := Edit1.Text;
IBCQuery.ExecSQL;
end; // For..Do
|