Atualização Grid para o Banco de Dados

19/03/2013

0

Bom dia Pessoal.


Criei um modulo de cadastro de unidades de medida.
Nele tenho uma Grid que nela mesmo eu insiro as informaçoes na tabela (Unidades), com os campos CODIGO e DESCRICAO.
O campo CODIGO é auto incremento.
E os componentes para conexao que utilizo é SQLConection, ClientDataSet, DataSetProvider, SQLTable.
Agora o que esta acontecendo:

Quando eu insiro uma nova unidade no campo descrição ( na Grid), o campo CODIGO nao se auto enumera, mas se eu deixo a nova descrição la, como UN (exemp.), e fecho todo o sistema, a informação vai pro banco e quando eu abro o sistema novamente o cadastro esta feito e o campo esta numerado.

O que eu quero que ocorra:
Que quando eu inserir a nova unidade de medida, o campo CODIGO, tem que auto enumerar quando eu der seta pra baixo, para cadastrar uma nova unidade. Ao inves de eu ter que ficar abrindo e fechando o sistema.

Fico grato a qualquer ajuda.

Obrigado.
Christiano Treib

Christiano Treib

Responder

Posts

19/03/2013

Danillo Camargo

Bom dia Pessoal.


Criei um modulo de cadastro de unidades de medida.
Nele tenho uma Grid que nela mesmo eu insiro as informaçoes na tabela (Unidades), com os campos CODIGO e DESCRICAO.
O campo CODIGO é auto incremento.
E os componentes para conexao que utilizo é SQLConection, ClientDataSet, DataSetProvider, SQLTable.
Agora o que esta acontecendo:

Quando eu insiro uma nova unidade no campo descrição ( na Grid), o campo CODIGO nao se auto enumera, mas se eu deixo a nova descrição la, como UN (exemp.), e fecho todo o sistema, a informação vai pro banco e quando eu abro o sistema novamente o cadastro esta feito e o campo esta numerado.

O que eu quero que ocorra:
Que quando eu inserir a nova unidade de medida, o campo CODIGO, tem que auto enumerar quando eu der seta pra baixo, para cadastrar uma nova unidade. Ao inves de eu ter que ficar abrindo e fechando o sistema.

Fico grato a qualquer ajuda.

Obrigado.


Boa tarde Christiano Treib. Tudo bem?

Tenta fazer o seguinte no evento "AfterPost" do seu clientdataset:

procedure TForm1.ClientDataSet1AfterPost(DataSet: TDataSet);
begin
  ClientDataSet1.ApplyUpdates(0);
end;


Qualquer dúvida estou à disposição,
Atenciosamente,
Responder

19/03/2013

Christiano Treib

Boa tarde Danillo.

Primeiramente muito obrigado pela sua resposta.

Poderei te dizer se deu certo mais a noite.
Pois meu projeto esta em casa e estou no trabalho no momento.

Mas deixo aqui meu Obrigado.

Em breve te dou uma resposta.
Responder

19/03/2013

Danillo Camargo

Boa tarde Danillo.

Primeiramente muito obrigado pela sua resposta.

Poderei te dizer se deu certo mais a noite.
Pois meu projeto esta em casa e estou no trabalho no momento.

Mas deixo aqui meu Obrigado.

Em breve te dou uma resposta.


Ok, fico no aguardo.

Segue uma correção no código do post acima:

procedure TForm1.ClientDataSet1AfterPost(DataSet: TDataSet);
begin
 ClientDataSet1.ApplyUpdates(0);
 ClientDataSet1.Refresh;
end;


Atenciosamente,
Responder

19/03/2013

Christiano Treib

Danillo meu caro.

Deu certo, era exatamente isso.
Porem surgiu mais um probleminha rsrs.

Digamos que o meu Codigo parou no 12, quando eu excluo esse registro, e insiro um novo, o novo registro acaba sendo o 13 e nao o 12.

O que pode ser isso?

Valeu.
Responder

20/03/2013

Danillo Camargo

Danillo meu caro.

Deu certo, era exatamente isso.
Porem surgiu mais um probleminha rsrs.

Digamos que o meu Codigo parou no 12, quando eu excluo esse registro, e insiro um novo, o novo registro acaba sendo o 13 e nao o 12.

O que pode ser isso?

Valeu.


Você está trabalhando com o campo auto incremento do banco de dados certo?

Caso esteja, é uma característica do auto incremento do próprio banco de dados. Não vou saber te informar se é possível alterar essa situação.
Caso precise "resetar" o incremento, segue comando para o banco SQL Server:

DBCC CHECKIDENT ('nome_tabela', RESEED, numero_inicial)

onde:
nome_tabela = nome da tabela que será alterada;
numero_inicial = número que será iniciado o incremento;

Uma sugestão é fazer um rotina de geração de chaves pegando a chave do último registro da tabela e somando um. Assim ficaria da forma que você precisa!

Qualquer dúvida estou à disposição,
Atenciosamente,
Responder

20/03/2013

Christiano Treib

Entao eu vou fazer o seguinte.

Na minha tabela eu vou tirar o auto-incremento do campo e no meu comando quando eu inserir um novo registro, o seu codigo sera o ultimo + 1.

Certo?

Valeu.
Responder

20/03/2013

Danillo Camargo

Entao eu vou fazer o seguinte.

Na minha tabela eu vou tirar o auto-incremento do campo e no meu comando quando eu inserir um novo registro, o seu codigo sera o ultimo + 1.

Certo?

Valeu.


Boa tarde Christiano,

Sim, minha sugestão é criar uma rotina que, antes de salvar os registro no banco de dados, consulte qual é a última chave do banco de dados e acrescente + 1 a ela.

Se prefirir, me passa seu e-mail que mando um exemplo.

Qualquer dúvida estou à disposição,
Atenciosamente,
Responder

20/03/2013

Perivaldo Martins

Só uma pequena observação, tome cuidado quanto a implementação de tal procedimento, pois se seu sistema for rodar em rede, pode ser que haja duplicidade quanto ao ID.


Boa sorte bons códigos!
Responder

20/03/2013

Christiano Treib

Danillo.


Meu email:

christiano.treib@hotmail.com.br


Meu sistema nao sera em rede.

valeu.
Responder

20/03/2013

Danillo Camargo

Só uma pequena observação, tome cuidado quanto a implementação de tal procedimento, pois se seu sistema for rodar em rede, pode ser que haja duplicidade quanto ao ID.


Boa sorte bons códigos!


Boa noite Martins. Tudo bem?
Muito boa observação, obrigado por se atentar.

Aplico a rotina de geração de chave no evento "BeforeUpdateRecord" do datasetprovider. Assim a geração acontece na camada "servidora" (camada de negócio) no caso de sistema em rede.

Mais uma vez obrigado pela atenção,
Bons códigos,
Atenciosamente,

Responder

21/03/2013

Christiano Treib

Estou no aguardo do email.

Abraços.
Responder

21/03/2013

Danillo Camargo

Estou no aguardo do email.

Abraços.


Olá Christiano.

Enviei na hora do almoço, não chegou?

Atenciosamente,
Responder

21/03/2013

Christiano Treib

Olá Danillo.

Recebi sim.

Vou testar mais a noite.

Muito obrigado pela a atenção.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar