Fórum Seguranca na Informacao processado pelo programa (dado) #12729

08/12/2009

0

Como podemos congelar uma informacao do banco de dados ou enviar um aviso que o registro esta sendo utilizado ou atualizado por outro usuario ?   Exemplo:   saldo de estoque  componente cdsclient mais banco de dados Microsoft SQL   produto: A  estoque 100   usuario 1  consultou saldo em estoque e obtive retorno de 100                  a rotina continua a gravar os registros na tabela de movimentacao de estoque e depois atualiza a coluna saldo em outra tabela.   Neste momento o usuario 2 consulta o estoque e o saldo ainda consta como 100   É possivel alguma acao ou tratamento pelo codigo do Delphi para efetuar um LOCK no registro do banco de dados pelo usuario 1 ?  (sem a utilizacao de recursos como por exemplo uma coluna status na tabela)      
Edival Lira

Edival Lira

Responder

Posts

09/12/2009

Wesley Yamazack


Olá amigo,  Bom dia !!!
  O Lock existe sim, porém não sei se existe no SQL Server(Não conheço o mesmo), você pode dar um Lock no registro, e quando o Delphi com o CDS for tentar acessar este registro provavelmente irá dar um Exception, porém se você locar o registro ninguem poderá usar ele até ser liberado.

No Delphi com ClientDataSet, tem como você na hora de gravar um registro e outra pessoa estiver com ele aberto, e for gravar também, ele pede uma especie de Merge, porém não é teu caso, você quer simplesmente avisar ao usuário que o registro esta em uso, certo ?

Se for podemos ver como no banco dar um Lock no registro, e o delphi quando subir a Exception nos tratamos ela, dando uma mensagem para o usuário. Na teoria o Delphi teria que dar erro, na teoria!!!


Um abraço

Wesley Y
Responder

Gostei + 0

10/12/2009

Edival Lira

Wesley Y, Bom dia!     Sim, no meu caso eu quero dar um lock na linha e se estiver em uso exibir a mensagem avisando que já tem outro usuário usando.   Abraço.  
Responder

Gostei + 0

10/12/2009

Wesley Yamazack

Olá amigo,
   Infelizmente não poderei lhe ajudar muito, pois em Delphi, andei procurando e não tem como você fazer um Lock no registro apenas pelo banco de dados, você faz um Lock Pessimista(como os DBA's chamam este recurso), e no momento que for acessar este registro por outro usuário, o próprio sistema irá dar uma exception, dai você consegue tratar a mesma.
   Você pode trabalhar também com transações na tua aplicação na hora de alguem gravar o registro se ele tiver com Lock irá dar o erro no banco, e sua transação vocÊ pode dar o Rollback, porém não tem escapatória sem ser pelo banco de dados infelizmente.
   Estou aqui para ajudar, no que precisar, porém tratando de banco de dados desta forma o sistema de consultoria já não aborda estas situações especificas, infelizmente.

Um abraço

Wesley Y
Responder

Gostei + 0

18/12/2009

Wesley Yamazack

Olá amigo, consegui ver algo no banco de dados, sobre locar o registro

Um abraço

Wesley Y
Responder

Gostei + 0

22/12/2009

Devmedia

Edival,
podemos encerrar o chamado?
Responder

Gostei + 0

28/12/2009

Devmedia

Edival,
por falta de retorno estamos encerrando o chamado. CASO AINDA TENHA DÚVIDAS, É SÓ POSTAR AQUI NOVAMENTE QUE O CONSULTOR VOLTA A LHE ATENDER E O CHAMADO SERÁ REABERTO.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar