lico1707 0 Denunciar post Postado Agosto 12, 2016 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
pokee 2 Denunciar post Postado Agosto 12, 2016 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
Gabriel Heming 766 Denunciar post Postado Agosto 12, 2016 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
lico1707 0 Denunciar post Postado Agosto 15, 2016 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