Múltiplos acessos simultâneos à mesma tabela - problema
Olá a todos.
Estou trabalhando em um projeto de cadastro de pedidos remoto, ou seja, o representante cadastra o pedido da casa dele acessando o nosso banco de dados(oracle) pela internet, porém estou enfrentando um problema que ocorre às vezes: estão ocorrendo conflitos entre o pedido de um representante e outro q está digitando ao mesmo tempo.
O sistema funciona da seguinte maneira: qdo o repres. termina a parte de dados do pedido e o salva, o sistema busca na tabela de pedido o nº do último e soma mais um, assim todos os itens desse pedido(na tabela de itens) usam esse nº(a chave primária).
Porém, as vezes um repres. preenche itens do pedido do cliente de outro repres., o q é uma falha grave. O estranho é que algumas vezes digitam-se diversos pedidos ao mesmo tempo e nem sempre isso ocorre.
[b:9a0db92271]Eu gostaria de saber que medidas de segurança eu poderia adotar para impedir que isso ocorra. As tabelas contêm chaves estrangeiras, e mesmo assim acontece isso. Eu NÃO utilizo o componente ´session´, por acaso ele ajuda a controlar as conexões ao BD?[/b:9a0db92271]
Sou ainda inexperiente nessa área, qualquer ajuda será bem-vinda, obrigado!
Estou trabalhando em um projeto de cadastro de pedidos remoto, ou seja, o representante cadastra o pedido da casa dele acessando o nosso banco de dados(oracle) pela internet, porém estou enfrentando um problema que ocorre às vezes: estão ocorrendo conflitos entre o pedido de um representante e outro q está digitando ao mesmo tempo.
O sistema funciona da seguinte maneira: qdo o repres. termina a parte de dados do pedido e o salva, o sistema busca na tabela de pedido o nº do último e soma mais um, assim todos os itens desse pedido(na tabela de itens) usam esse nº(a chave primária).
Porém, as vezes um repres. preenche itens do pedido do cliente de outro repres., o q é uma falha grave. O estranho é que algumas vezes digitam-se diversos pedidos ao mesmo tempo e nem sempre isso ocorre.
[b:9a0db92271]Eu gostaria de saber que medidas de segurança eu poderia adotar para impedir que isso ocorra. As tabelas contêm chaves estrangeiras, e mesmo assim acontece isso. Eu NÃO utilizo o componente ´session´, por acaso ele ajuda a controlar as conexões ao BD?[/b:9a0db92271]
Sou ainda inexperiente nessa área, qualquer ajuda será bem-vinda, obrigado!
Andrey
Curtidas 0
Respostas
Marconi
20/02/2004
O seu sistema é interessante.
Para estes casos eu utilizo o seguinte. Quando o pedido esta sendo gerado ele ainda não existe, então deixo que cada vendedor monte o seu pedido em um arquivo provisório que tem o nome do próprio vendedor e apenas um registro. Ex. Jose.db. Quando ele confirma o pedido, aí então o programa tenta gerar um registro já numerando. Neste caso eu utilizo try até conseguir. Depois que o registro já numerado está reservado para este vendedor, copio os dados do arquivo provisorio.
Quando o jose quiser fazer um novo pedido, o seu arquivo, jose.db será aberto, todos os registros deletados e ele poderá recomeçar.
O mesmo pode se aplicar na hora de montar notas fiscais.
Marconi
Para estes casos eu utilizo o seguinte. Quando o pedido esta sendo gerado ele ainda não existe, então deixo que cada vendedor monte o seu pedido em um arquivo provisório que tem o nome do próprio vendedor e apenas um registro. Ex. Jose.db. Quando ele confirma o pedido, aí então o programa tenta gerar um registro já numerando. Neste caso eu utilizo try até conseguir. Depois que o registro já numerado está reservado para este vendedor, copio os dados do arquivo provisorio.
Quando o jose quiser fazer um novo pedido, o seu arquivo, jose.db será aberto, todos os registros deletados e ele poderá recomeçar.
O mesmo pode se aplicar na hora de montar notas fiscais.
Marconi
GOSTEI 0
Marconi
20/02/2004
Para proteger os clientes de um determinado representante eu coloco sempre a escolha do cliente em uma combobox que vem de uma query, que está filtrada para apenas os clientes do determinado vendedor.
Ele poderia até cadastrar o cliente de novo e se colocar-se como representante, mas o número do CNPJ é requisito básico e se já existir no cadastro ele não conseguirá.
Marconi
Ele poderia até cadastrar o cliente de novo e se colocar-se como representante, mas o número do CNPJ é requisito básico e se já existir no cadastro ele não conseguirá.
Marconi
GOSTEI 0
Andrey
20/02/2004
Muito obrigado pelas dicas!
Vou analisar a viabilidade da criação de tabelas temporárias.
Até mais, e obrigado novamente!
Vou analisar a viabilidade da criação de tabelas temporárias.
Até mais, e obrigado novamente!
GOSTEI 0