Jump to content
joaocarlos07

C# Ajuda - Auto Incrementar

Recommended Posts

joaocarlos07

Bom dia a todos ,

Estou a criar um software em C# com SQLCE pois é para PDA , e o SQLCE não traz a definição para auto-incrementar o id , então eu tive de fazer um codigo de auto-incrementar que me funciona so que agora vi que tem um problema que ainda não consegui resolver :x

É o seguinte com o codigo que tenho se apagar um registo como ele conta quantos tem la volta a adicionar um reptido , ou seja , eu tenho 3 produtos o 1, 2 e 3 se eu apagar o 2 ele vai-me contar que tem 2 registos e adiciona o 3 de novo , se alguem me puder ajudar agradecia

Vou deixar aqui o codigo que tenho :

// Incrementar 1 ao id (auto increment)
            SqlCeCommand cm = liga.CreateCommand();
            SqlCeCommand conta = liga.CreateCommand();
            conta.CommandText = "select count (id) from vendas ";
            int quant = Convert.ToInt32(Convert.ToString(conta.ExecuteScalar()));
            long resultado;
            resultado = quant + 1;


Um Abraço,João Carlos Pinto

Share this post


Link to post
Share on other sites
kongas

Não é uma solução que seja perfeita,

mas se comparares com o último ID que tens inserido na BD acrescentas 1 e ficas com um novo ID...

Eu só digo que não é perfeito porque se tiveres o 7, se o apagares, o novo será 7 tb, mas se não precisares de ter uma noção de quantos registos tens nessa tabela, podes perfeitamente fazer assim...

Abraço.

Share this post


Link to post
Share on other sites
joaocarlos07

Podes me dar um exemplo por favor ?

Obrigado


Um Abraço,João Carlos Pinto

Share this post


Link to post
Share on other sites
Andrepereira9

Boas

O count apenas conta o número de registos

O Max retorna o valor mais alto do campo indicado

Utiliza o  MAX

conta.CommandText = "select MAX(id) from vendas ";

         


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Share this post


Link to post
Share on other sites
joaocarlos07

Ok acho que assim ja resolvo o problema , obrigado pela ajuda ::(


Um Abraço,João Carlos Pinto

Share this post


Link to post
Share on other sites
softklin

Por motivos de relação entre tabelas, não deverias gerar os ID's dessa forma pelas razões que já te foram explicadas. Por exemplo, podias seguir a abordagem do SQLite, que cria uma tabela dedicada para os autoincrements, e guarda sempre o próximo valor. Ou seja ficaria algo assim:

obter o proximo Id:

SELECT id FROM autoincrements WHERE tabela='vendas'

e obtias o id correspondente, seja 'id'. Depois, resta-te a operação de adição do registo:

INSERT INTO vendas (id, produto) VALUES (id, 'nomeproduto')

Por fim, tens de incrementar uma unidade ao registo dos autoincrements:

UPDATE autoincrements SET id=id+1 WHERE tabela='vendas'

Se usares acesso concorrente à base de dados, convém que estes passos estejam todos dentro de uma transacção para evitar conflitos de dois id's por serem actualizados ao mesmo tempo.

Assim, se tiveres um registo 9 e o apagares, esse id 9 não volta a ser utilizado, porque poderia estar, incorrectamente, referenciado noutra tabela. Na tabela autoincrements, ficaria o valor 10, para ser utilizado na próxima inserção.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
joaocarlos07

Siim vou exprimentar assim , so uma correção é SQLCE e nao SQLite ,

Ou seja , tenho de criar um tabela autoincrements certo ?


Um Abraço,João Carlos Pinto

Share this post


Link to post
Share on other sites
softklin

Eu dei o exemplo do SQLite, porque é esse o sistema que eles implementam para o autoincrement, por isso podes fazer o mesmo em SQLCE, a diferença é que não é automático.

Sim, simplesmente é criar uma tabela onde armazenas sempre o próximo ID a usar para o campo ID das tabelas. Tens sempre o linha do tipo <proximoId, tabela>, por isso, podes usar essa tabela autoincrements para gerir outros ID's de outras tabelas também.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
joaocarlos07

Obrigado pelas respostas , ja esta resolvido :(


Um Abraço,João Carlos Pinto

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.