Mais de um usuario alterando o mesmo registro

Bom dia.

No scriptcase tem algo que mostra quantos usuários estão editando o mesmo registro?

Pois a intenção é bloquear a alteração se um usuário ja estiver editando o registro.

@Lucila, não tem e pior …

Aplicações de formulário perdem os dados quando o mesmo registro é editado em telas diferentes.
Sempre reclamei a respeito aqui.

Mas tem como você controlar isso via código e alguns macetes.

@InfinitusWeb

Tem algum macete que você pode compartilhar conosco?

No Scriptcase, não conheço uma maneira específica para isso, mas no Banco de Dados você pode realizar um INSERT ou UPDATE de forma segura, garantindo que a operação anterior seja concluída antes de prosseguir. Teria que ler a documentação do seu Banco de Dados.

Uma alternativa seria usar uma variável de sessão (variável global) para controlar a edição. Se alguém estiver alterando o registro, você pode bloquear o acesso (mudando uma coluna no banco ou algo parecido) para edição até que a operação seja finalizada ou algo parecido.

2 Curtidas

Exemplo 1:
Um deles é usar uma controle e vc desenvolve o código de salvamento, verificando claro as questões multiusuário, ou seja só realizando update nos campos que foram efetivamente alterados.

Exemplo 2:
Criar tabela: com campos: tabela, registro_id

Ao entrar no formulário em modo de edição gravar um registro nessa tabela (com nome da tabela, e o registro sendo editado), caso não haja registro para essa tabela com id em questão, se houver, emite mensagem : Registro sendo editado em outro terminal e feche a aplicação.
Claro que outros controles serão necessários, como por exemplo criar um evento que limpe a tabela na madrugada, quando o sistema não é utilizado, e uma tela para manutenção nessa tabela, caso usuário fecha aplicação pelo browser.

Al salvar o registro ou ao sair da aplicação remover o registro em questão.

Exemplo 3:
Tem como 2 ou mais usuários editarem o mesmo registro, mas o controle é mais complexo e requer conhecimento avançado.

1 Curtida

Deixe isso a critério do gerenciador.
Não sei qual é o teu banco de dados, mas no PostgreSQL poderia utilizar
algumas abordagens possíveis para resolver o problema,
como utilizar select for update com skip locked.

O select for update é uma forma de realizar um lock pessimista no banco de dados.
Basicamente você está dizendo para o banco de dados que você está recuperando um
registro que será alterado dentro da mesma transação e, por esse motivo,
o banco de dados deve forçar a espera de todos os outros que estão fazendo a mesma
coisa para o mesmo registro.

Exemplo>
CREATE TABLE IF NOT EXISTS queue (
id SERIAL PRIMARY KEY,
status VARCHAR
);

INSERT INTO queue (status)
SELECT ‘NEW’ FROM generate_series(1,10000);

begin transaction
SELECT *
FROM queue as queue1
JOIN queue as queue2
ON queue1.id = queue2.id
WHERE queue2.status = ‘NEW’
ORDER BY queue1.id
LIMIT 1
FOR UPDATE OF queue1 SKIP LOCKED;

UPDATE queue SET status = ‘DONE’ WHERE id = :id AND status = ‘NEW’;
(:id precisa ser substituído pelo id da linha retornada acima)

commit;

1 Curtida

:thinking::thinking::thinking::thinking::thinking:

Desde quando um formulário do SCRIPTCASE faz isso?

Segue um roteiro para impedir a edição de um registro já editado ou em edição por outro usuário

Considere as duas tabelas a seguir, que a princípio existem no seu sistema.

Criar 3 aplicações:
1 consulta(grid) com a tabela dados para listar apenas os registros não editados ou editados pelo usuario logado (o campo user update preenchido pelo usuário logado ou vazio);

1 controle que fará a validação:
Se o id selecionado não tem o campo user update preenchido,
Então seta esse campo com o usuário logado (login) e redireciona para o form de edição
Se caso já tiver o campo user update preenchido,
Então exibe uma mensagem de erro (este registro já foi ou está sendo editado)

1 form de edição:
Valida e Edita apenas o registro que tiver o campo user update preenchido pelo usuário atual.