Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lico1707

Sistema com multi usuários

Recommended Posts

Bom dia.

Quero fazer um formulário de cadastro que possa ser utilizado por vários usuários ao mesmo tempo.

Bom, quando um usuário entra na página do form, ele realiza o cadastro normalmente e grava as informações no BD. Agora não sei como proceder quando várias pessoas estão realizando cadastros ao mesmo tempo.

Preciso de ajuda para resolver esse problema.

Vou exemplificar.

Cada cadastro realizado irá ocupar um ID gerado pelo SGBD. Agora preciso saber o seguinte.

Um usuário abre um novo um cadastro que irá ter o id 1 por exemplo, caso seja o primeiro a ser salvo. O usuário 2 tbm abre um novo cadastro e salva, e assim por diante. E se eu quiser fazer um "reserva" desse id, de forma que eu abra um novo cadastro e não salve no BD ainda e neste momento, o usuário 2 abra um novo cadastro e salve no BD. Imagino eu que como o segundo usuário salvou primeiro, então ele irá ocupar o id na sequência do BD, e o que não salvou ainda,ao salvar, ficará logo após este. Não é isso que preciso.

Tem alguma forma de "reservar" esse id quando o usuário 1 abrir um novo cadastro, de forma que independente de quantos cadastros forem abertos após este, o mesmo id se mantenha para o usuário 1?

Pensei talvez em abrir o cadastro e imediatamente gravar no BD para que seja gerado um novo id, e depois a página retorna esse form com esse id para ser alterado(fazer update no registro) e não fazer um insert. Mas não sei como proceder. Se puderem me ajudar nessa eu agradeço e muito. Já procurei um vários lugares e não achei a resposta, ou talvez eu não saiba fazer a pergunta correta.

Obrigado, vlw.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lendo a sua pergunta, a unica maneira que imaginei pra fazer isso é a que você mesmo já tinha pensando.

Quando abrir o form já grava o registro no BD pra salvar o id e quando você enviar o form ele só faz o UPDATE.

Porém isso irá gerar outro erro. Imagina se o usuário abre a form, salva o ID e depois fecha a form e não usa mais, isso pode gerar vários registro em branco no seu BD

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, tem. Mas depende do SGBD e também do uso. Por exemplo:

- PostgreSQL possui a função nextval;

- Oracle possui as pseudo colunas nextval e curval.

Mas, por que você precisa reservar? A maioria dos SGBDs são implementados para não sofrerem a condição de corrida. Se você precisa utilizar o ID inserido para alguma chave estrangeira, boa parte dos SGBDs lhe retornarão o último ID inserido no método PDO::lastInsertId().

Caso, por algum motivo, você ainda queira utilizar um sistema de reservas de chave estrangeira (para um SGBD que não suporta um), você pode implementar:

http://www.microshell.com/database/mysql/emulating-nextval-function-to-get-sequence-in-mysql/

O artigo acima, além de ser antigo, possui alguns "erros", mas foram corrigidos nos comentários.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pelas respostas. Estou buscando uma forma eficiente de resolver isso sem que gere problemas futuros. Vou pesquisar sobre a função nextval() do PostgreSql e se for a solução, troco de SGBD pois ainda estou desenvolvendo o sistema.

Só a fins de esclarecimentos, imaginem um sistema de Ocorrências usado pelas Polícias. Quando acontece um crime, a central abre um novo boletim de ocorrencia, informa o numero ao policial para que este, com o numero em mãos, finalize a ocorrencia preenchendo os dados necessários.

Seria dessa forma que gostaria de implantar, mas não sei como foi feito esse sistema. .

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.