안녕하세요 언제나 질문만 하게됨니다...
다름이 아니라 LAN 에서 2개의 컴이 같은테이블을 띄워사용함니다..
A컴 에서는 새로은 레코드를 추가 하고 B컴에서는 그 추가한 레코드에 자료를 입력하는 작업입니다..
그런데 A컴에서 추가한 자료에 포커스가 있는상태에서 B컴에서 추가한자료를 수정 저장하니까 에러가 나더군요....
레코드 락이 걸렸다나????
B컴에서 수정 저장하게전에 그 테이블의 레코드가 락인지 아닌지 알수있는 함수가 있나요?
아니면 저장해야 하는데 다른 대처방법은 없나요?
그러니까 테이블의 전체가아닌 하나의 레코드가 락인지 아닌지를 알수있는방법좀 갈켜 주세요....
제발.........
http://www.borland.com/searchsite/
에서 "record lock" 으로 검색해 보시면 참고가 되실겁니다
function fDbiIsRecordLocked(Table: TTable): Boolean;
var
Locked: BOOL;
hCur: hDBICur;
rslt: DBIResult;
ByAnyone: boolean;
begin
Table.UpdateCursorPos;
// Is the record locked by the current session...
Check(DbiIsRecordLocked(Table.Handle, Locked));
Result := Locked;
// If the current session does not have a lock and the ByAnyone varable is
// set to check all sessions, continue check...
{ Always do this, so works with all current calls. }
ByAnyone := True;
if (Result = False) and (ByAnyone = True) then
begin
// Get a new cursor to the same record...
Check(DbiCloneCursor(Table.Handle, False, False, hCur));
try
// Try and get the record with a write lock...
rslt := DbiGetRecord(hCur, dbiWRITELOCK, nil, nil);
if rslt <> DBIERR_NONE then
begin
// if an error occured and it is a lock error, return true...
if HiByte(rslt) = ERRCAT_LOCKCONFLICT then
Result := True
else
// If some other error happened, throw an exception...
Check(rslt);
end
else
// Release the lock in this session if the function was successful...
Check(DbiRelRecordLock(hCur, False));
finally
// Close the cloned cursor...
Check(DbiCloseCursor(hCur));
end;
end;
end;