Dicas - Verificar se o registro está travado

Veja nessa dica, como saber se o registro da tabela está travado.

Verificar se o registro está travado

Inclua a unit DBITYPES na clausula uses do seu formulário.

 

function TForm1.IsRecordLocked(Table: TTable; ByAnyone: boolean): Boolean;

var

  Locked: BOOL;

  hCur: hDBICur;

  rslt: DBIResult;

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...

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;

 

Utilize a função assim:

 

procedure TForm1.Button1Click(Sender: TObject);

begin

  If IsRecordLocked(Table1, True) then

Showmessage('Registro Travado!');

end;

 

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados