MS SQL에서 RECORD에 LOCK을 거는 방법 부탁합니다. TQuery을 사용해서..
SQL driver는 optimistic locking을 사용한다는데.. 자세한 설명 부탁합니다.
정확한 사용의도는 각각의 thread들이 다른 레코드들을 읽어와 처리후 삭제 또는 update할려구 합니다.
근데 다른 레코드들을 읽을려면 레코드에 READ LOCK을 걸어야 하지 않을까요??
여러 스레드를 뛰어놓고 TQuery를 동적 생성했습니다. 각각 다른 Session과 database를
사용했구요..
#define SESSION_NAME(i) ("Ss" + IntToStr(i))
#define DATABASE_NAME(i) ("DB" + IntToStr(i))
qrySEND = new TQuery(NULL);
try
{
qrySEND->SessionName = SESSION_NAME (Chan);
qrySEND->DatabaseName = DATABASE_NAME (Chan);
}
catch (const EDatabaseError&)
{
delete qrySEND; qrySEND = NULL;
throw;
}
이렇게 하구 SQL문에 검색내용 넣고 Query open 했습니다.
DbiGetRecord(.. 하기 전 DbiIsRecordLocked를 먼저 실행해 보았더니
이미 LOCK이 걸려 있다고 합니다.
Check(DbiCloneCursor(qrySEND->Handle, false, false, hCur));
Check(DbiIsRecordLocked(qrySEND->Handle, Locked));
같은 session을 써야 하는 것인지.. 전체적인 조언 부탁드립니다...
기초가 부족합니다. C++ Builder site에 올렸으나 답변이 없어 여기에 올립니다.
자세한 질문은 못 되지만 예제도 함께 보았으면 합니다.
감사합니다.