Fórum AutoIncremento - Parte II #288006
13/07/2005
0
Há um tempo atrás, eu havia colocado este assunto em questão. Acabei resolvendo o problema do campo autoincremento graças às dicas de vcs, criando o generator e a trigger, e usando um insert no sqldataset para inserir os dados. Está funcionando, porém tentei criar uma aplicação usando o append, conforme codigos abaixo:
No botão gravar:
with cdsClientes do
begin
Append;
//eu nao coloquei aki o fieldbyname para o campo nome, pq ele sera gerado pela trigger
FieldByName(´CUSTOMER´).AsString := dbedit2.Text;
Applyupdates(0);
end;
Qdo clico no gravar, dá a mensagem ´key violation´, e nem mostra o valor gerado para o campo codigo.
Eu deixei a propriedade required false, mas mesmo assim não funcionou.
Alguem poderia me ajudar?
[]´s
Roger1976
Curtir tópico
+ 0Posts
14/07/2005
Beppe
T+
Gostei + 0
14/07/2005
Paullsoftware
faça um teste com um DbGrid e vc verá isso.
Gostei + 0
14/07/2005
Beppe
Gostei + 0
14/07/2005
Paullsoftware
Correto, como falei é a única diferença que vejo entre eles...
Gostei + 0
15/07/2005
Roger1976
Está aparecendo a seguinte mensagem:
field ´CODIGO´ must a value
O que eu não estou entendendo é que já tenha uma trigger e um generator, fiz o teste no banco e lá tá incrementando numa boa. O problema tá na aplicação. Deixei habilitado pra não passar o foco no campo codigo, mas qdo digito o nome e clico no gravar, aparece a mensagem referida acima, e o focu no campo codigo no dbgrid. Como disse antes, qdo uso o insert into... no sqldataset funciona, mas imagino numa tela de pedidos, onde o usuário vai digitando o item do pedido e à medida que vai acrescentando novos, vai aparecendo no dbgrid. Infelizmente, não estou conseguindo simular esta situação.
Espero mais uma vez contar com a dica de vcs, e desde já valeu pela força...
[]´s
Gostei + 0
16/07/2005
Eduardo Pereira
Eu costumo fazer da seguinte forma:
- No banco, existe uma SP que gera o identificador para a tabela desejada (através de um generator, como no trigger)
- No evento BeforeUpdateRecord do DataSetProvider, a SP é chamada e o valor gerado é atribuído à chave primária.
Ex.:
stpGeraID.ExecProc;
DeltaDS.FieldByName(´ID´).NewValue := stpGeraID.ParamByName(´ID´).AsInteger;
- IMPORTANTE: No DataSetProvider, em Options, poPropogateChanges deve estar em TRUE. Desta forma o valor atribuído ao campo ID é refletido no ClientDataSet.
[]´s
Eduardo Pereira
Gostei + 0
16/07/2005
Roger1976
Valeu kra pela dica...
[]´s
Gostei + 0
18/07/2005
Eduardo Pereira
Abaixo o código de uma SP usando o generator ´GEN_DOCUMENTO´:
CREATE PROCEDURE GERAIDDOCUMENTO RETURNS ( ID INTEGER) AS BEGIN ID = Gen_Id ( GEN_DOCUMENTO, 1 ); Suspend ; END
Qualquer dúvida estamos aí...
[]´s
Eduardo Pereira
Gostei + 0
14/08/2005
Roger1976
É isso aí kra,
[]´s
Rogeriio
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)