Ver Mensaje Individual
  #3  
Antiguo 11-07-2007
Avatar de nuk3zito
nuk3zito nuk3zito is offline
Miembro
 
Registrado: ago 2003
Ubicación: "Z" Land
Posts: 244
Reputación: 21
nuk3zito Va por buen camino
Pues debes iniciar una transacción cuando pretendan editar el registro.
Luego haces un update sencillo para que se bloquee, por ejemplo:
Código:
AdoConnection1.BeginTrans;
with AdoQuery1 do
begin
  SQL.Close;
  SQL.Clear;
  SQL.Add('update Clientes');
  SQL.Add('set Id_Cliente = Id_Cliente');
  SQL.Add('where Id_Cliente = ' + IntToStr(iCliente));
  ExecSQL;
end;
Con esto garantizas que se genera un bloqueo, y a los demás usuarios que intenten entrar a modificar este registro, les marcará el error de "tiempo de espera" mientras no hayas confirmado o cancelado la transacción.

Luego, al momento de guardar, haces tus updates yliberas el bloqueo (confirmando la transacción):
Código:
with AdoQuery1 do
begin
  SQL.Close;
  SQL.Clear;
  SQL.Add('update Clientes');
  SQL.Add('set Nombre = :Nombre,');
  ...
  SQL.Add('where Id_Cliente = ' + IntToStr(iCliente));
  ExecSQL;
end;

AdoConnection1.CommitTrans;
El inconveniente es que, si el usuario da click al botón de "modificar" y se va y se toma un café (o hay quienes duran 30 minutos cuando van al baño) el bloqueo estará ahí, esperando a que el usuario lo libere o alguien con acceso al SQL Server lo mate. Sin embargo, eso es lo que hay de bloqueos para SQL Server.
__________________
Tiempo y ocasión acontecen a todos!
Responder Con Cita