Ir para conteúdo

POWERED BY:

Arquivado

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

Obiwan Kenoby

Gravação de registros Delphi x SQL Server

Recommended Posts

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, :wacko:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, essa operação q você está querendo fazer é um pouco mais complexa do que isso.Primeiro: você está utilizando um banco de dados SQL, que suponho eu, seja compartilhado com outros usuários. Se você for selecionar o UltimoCodigo+1 você corre o sério risco de ter problemas de consistencias na sua tabela, além de ter um trabalho imenso para controlar tudo isso. A minha sugestão é de que você utilize na sua tabela uma coluna AutoIncrement, ou seja, cada vez que você executar um INSERT na sua tabela, o SQL se responsabiliza de adicionar +1 no seu campo chave.Segundo: Pela mensagem de erro que o programa gerou, você está utilizando os métodos insert, edit e post de algum componente de dados (BDE, DBExpress etc). Sinceramente isso também não é uma 'boa prática de programação', principalmente se o seu sistema crescer, pois esse métodos precisam de lock de tabela e coisas do tipo que só tornam mais complexo o desenvolvimento em rede. Tente utilizar somente o SQL para gerenciar suas tabelas. Use e abuse de 'INSERT INTO Tabela...', 'UPDATE Tabela SET...' E 'DELETE FROM...'. Consulte alguma documentação sobre como trabalhar com instruções na linguagem SQL.Terceiro: Se você achar os dois passos acima muito maçante, procure utilizar o componente de atualização de tabelas TUpdateSQL. Ele faz tudo em SQL, mas você continua utilizando insert, edit e post em seus componentes de dados.p.s.: o erro "Could't perform the edit because another user deleted or moved the record" ocorreu pq provavelmente o componente de dados q você está utilizando, "se perdeu" no ponteiro da tabela quando o segundo usuário gravou seu registro. Essa é uma das inconveniências que ocorrem quando usamos esse método de programação em um ambiente multi-usuário. Em uma aplicação stand-alone até que funciona bem.flw..

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom, nao desfazendo do conselho de nosso membro deu acima, pois foi bem explicativo, mas o que resolveria temporariamente seria você colocar um query pra acessar a mesma tabela, liga-lo, e no ato em q se grava o registro você pegar o codigo "max", daeh acredito que resolveria, pois eh quase impossivel duas pessoas gravarem o mesmo registro no mesmo milesimo de segundo.........um abraço............

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estava com mesmo problema com o seu, o que para mim resolveu foi utilizar a propriedade BeforePost da table, nesta propriedade eu faço a busca do código e atribuo ao meu campo de chave.

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.