Seguranca na Informacao processado pelo programa (dado)
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
Curtidas 0
Respostas
Wesley Yamazack
08/12/2009
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
GOSTEI 0
Edival Lira
08/12/2009
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.
GOSTEI 0
Wesley Yamazack
08/12/2009
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
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
GOSTEI 0
Wesley Yamazack
08/12/2009
Olá amigo, consegui ver algo no banco de dados, sobre locar o registro
Um abraço
Wesley Y
Um abraço
Wesley Y
GOSTEI 0
Devmedia
08/12/2009
Edival,
podemos encerrar o chamado?
podemos encerrar o chamado?
GOSTEI 0
Devmedia
08/12/2009
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.
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.
GOSTEI 0