Atualização Grid para o Banco de Dados

19/03/2013

1

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.
Responder

Posts

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
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
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
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
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
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
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
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
Danillo.


Meu email:

christiano.treib@hotmail.com.br


Meu sistema nao sera em rede.

valeu.
Responder
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
Estou no aguardo do email.

Abraços.
Responder
Estou no aguardo do email.

Abraços.


Olá Christiano.

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

Atenciosamente,
Responder
Olá Danillo.

Recebi sim.

Vou testar mais a noite.

Muito obrigado pela a atenção.
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira