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

Gravação De Registros No Sql X Delphi


Obiwan Kenobi

Pergunta

Boa tarde,

Estou com a seguinte situação em um software que estou desenvolvendo, tenho uma tabela em um banco de dados SQL para cadastro de clientes, a chave primaria é do tipo integer e tenho uma query que traz para mim o valor do código automaticamente no programa, abaixo segue a sintaxe da query :

select max(entcodseq)+1 as codigo from entidades

Então dois usuários vão fazer o cadastro, é retornado por exemplo o código 1 para um usuário e o código 2 para o outro usuário, até está tdo bem o problema é que se o usuário que está com o código 2 gravar o registro dele primeiro que o usuário que cerebeu o código 1, este não consegue mais gravar o registro dele, aparecendo a seguinte mensagem de erro quando "Coudn't perform the edit because another user deleted or moved the record"

Por favor se alguém puder me auxiliar sobre este problema fico muito grato

Abraços a todos,

Murilo (Obiwan)

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
select max(entcodseq)+1 as codigo from entidades

Obiwan Kenobi, você obtem o novo código em que momento? Após um insert ou append? Se for o caso, talvez fosse mais seguro executar este procedimento no evento BeforePost da sua tabela.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá!

Eu já passei por esta situação de várias formas... em Delphi (usando o SQL da BDE com tabelas .dbf Visual dBase e também tabelas .dbf do Visual FoxPro e .db Paradox) e em Clipper, com tabelas .dbf do próprio Clipper (com índices .ntx - CA e índices .mdx - Visual dBase) .

Hoje, uso campos tipo autoincremento nas tabelas manipuladas pela BDE (SQL em Delphi).

Por exemplo, três usuários iniciam o cadastro de uma nova ficha de cliente, exatamente ao mesmo tempo, em uma aplicação de televendas por exemplo... os três recebem uma ficha em branco com o mesmo número (o último número + 1); por exemplo: 09842.

Considerando que apenas dois usuários concretizem os pedidos que estão negociando e confirmem os dados das fichas que abriram, ambos irão gravar seus registros, através de uma query, como esta:

insert into 'cadcli.dbf'

(nome,endereco,municipio,uf,telefone,cpf)

values

('joao','rua a 448','juiz de fora','mg','3232-4422','58748429233')

Em seguida, o programa localiza o registro novo pelo cpf ou cnpj (permitidos somente um deles na tabela, sendo que antes de ser iniciado um novo cadastro o sistema verifica se não existe um registro com aquele cpf ou cnpj).

select codigo

from 'cadcli.dbf'

where cpf='58748429233'

e mostra para o usuario o codigo correto atribuido à sua ficha e ele pode confirmar o resto de sua operacao...

Em Clipper, utilizei (e utilizo) o "travamento externo". Esse modo consiste na gravação de um arquivo texto pelo usuário que está "salvando" os seus dados... Este arquivo permanece bloqueado até o término da gravação... então, o outro usuário (ou outros usuários) vão gravando seus dados, sequencialmente...

Neste caso, uma função tenta abrir o arquivo que controla a numeração... Se conseguir, verifica o próximo número e trava o arquivo, enquanto grava os dados do cliente no banco de dados... Ao final, fecha o arquivo, que fica liberado para outro usuário...

Preferi usar estes métodos para não ter que me preocupar com os travamentos de arquivos na hora de gravar informações...

Uso o SQL para praticamente tudo, inclusive para os antigos programas em Clipper, e sempre com tabelas Visual dBase (índices com múltiplas chaves em um só arquivo .MDX).

Espero ter ajudado!

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,3k
    • Posts
      652,2k
×
×
  • Criar Novo...