Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Dificuldade para gerar código


Thiago_P

Pergunta

Bom dia Galera,

Não sei se aqui é o local certo para a minha pergunta. Estou fazendo um sistema PMS (Gestão de projetos), onde tenho cadastro de Orçamento.

O cadastro possui um código e um prefixo (Ex. 1-A). No SQL eu tinha colocado o código como identity e fiz outra coluna para o prefixo.

Quando o usuário altera um orçamento (código 1-A), ele deve ser gravado como 1-B, pois os dois cadastros devem ficar no banco, porém como a coluna código estava como identity não gravou corretamente. Gostaria de saber se possui alguma forma para fazer o controle?

Pensei em tirar o identity e usar um "select Max + 1" no momento de inserir num novo cadastro, mas se o programa for utilizado por mais de um usuário simultaneamente, ele pode pegar o mesmo código para os dois usuários. Gostaria de saber se tem algum tipo de controle identity com prefixo? não sei! :wacko:

Ou se vocês sabem a melhor maneira de resolver este problema!

Desde já agradeço a Ajuda. :rolleyes:

Thanks

Editado por Thiago_P
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Bom dia Thiago.

Na sua idéia inicial, "Pensei em tirar o identity e usar um "select Max + 1" no momento de inserir num novo cadastro", dá para implementar sim!!!

O problema é igual você falou: se tiver mais de um usuário simultaneamente, o aplicativo poderá pegar dados iguais.

Uma solução para que isso não ocorra: você criará uma PROCEDURE no SQL, fazendo o "select Max + 1" --> a procedure não executa simultaneamente. Sendo assim, mesmo tendo usuários simultâneos, a procedure executará uma de cada vez. As demais execuções serão enfileiradas. você terá que criar uma tabela de controle, onde toda vez q realizar a chamada da procedure, você incrementa o valor do dado nesta tabela de controle (este incremento deverá ser implementado na procedure também).

Retire o identity da tabela e coloque um índice único, com o(s) campo(s) q compunham o identity (isso para garantir a unicidade dos dados).

Espero ter ajudado..... :.)

Qualquer dúvida, posta ai!!!

Link para o comentário
Compartilhar em outros sites

  • 0
Bom dia Thiago.

Na sua idéia inicial, "Pensei em tirar o identity e usar um "select Max + 1" no momento de inserir num novo cadastro", dá para implementar sim!!!

O problema é igual você falou: se tiver mais de um usuário simultaneamente, o aplicativo poderá pegar dados iguais.

Uma solução para que isso não ocorra: você criará uma PROCEDURE no SQL, fazendo o "select Max + 1" --> a procedure não executa simultaneamente. Sendo assim, mesmo tendo usuários simultâneos, a procedure executará uma de cada vez. As demais execuções serão enfileiradas. você terá que criar uma tabela de controle, onde toda vez q realizar a chamada da procedure, você incrementa o valor do dado nesta tabela de controle (este incremento deverá ser implementado na procedure também).

Retire o identity da tabela e coloque um índice único, com o(s) campo(s) q compunham o identity (isso para garantir a unicidade dos dados).

Espero ter ajudado..... :.)

Qualquer dúvida, posta ai!!!

Obrigado mano, deu certo! Qualquer problema eu posto ai!

[]'s

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...