Fórum Loop dando erro de violação de key ao salvar segundo registro. #429300

21/11/2012

0

Galera, esta minha função abaixo está com um pequeno problema, no loop insere o primeiro registro e salva e gera um ID..o segundo registro insere, más ao salvar o segundo registro, dá um err de violation key..

begin
          DM.Cds_CadItensPedido.Close;
          DM.Cds_CadItensPedido.Open;
          FCadVendas.Cds_iten_Compra.First;
          while not FCadVendas.Cds_iten_Compra.eof do
          begin
            DM.Cds_CadItensPedido.Append;
//            DM.Cds_CadItensPedidoID_PEDIDO.Value := Cds_CadPedidoID_PEDIDO.Value;
            DM.Cds_CadItensPedidoID_PRODUTO.Value:= FCadVendas.Cds_iten_CompraID_PRODUTO.Value;
            DM.Cds_CadItensPedidoVLR_ITEM.AsFloat:= FCadVendas.Cds_iten_CompraPRECO.AsFloat;
            DM.Cds_CadItensPedidoQUANTIDADE.AsFloat:= FCadVendas.Cds_iten_CompraQNT.AsFloat;
            DM.Cds_CadItensPedidoVLR_TOTAL.AsFloat:= FCadVendas.Cds_iten_CompraVALORTOTAL.AsFloat;
            DM.Cds_CadItensPedidoVLR_DESCONTO.AsFloat := FCadVendas.Cds_iten_CompraDESCONTO.AsFloat;
            DM.Cds_CadItensPedidoCONTA_ITEM.Value := FCadVendas.Cds_iten_CompraID_ITEN.Value;
            DM.Cds_CadItensPedidoID_CLIENTE.Value := DMConsulta.Cds_Pesc_Pedido_ClienteID_CLIENTE.Value;
            DM.Cds_CadItensPedidoID_EMPRESA.Value := CodEmpresa;
            DM.Cds_CadItensPedido.Post;
            DM.Cds_CadItensPedido.ApplyUpdates(0);
            FCadVendas.Cds_iten_Compra.Next;
          end;
          DM. Cds_CadPedido.Post;
          DM.Cds_CadPedido.ApplyUpdates(0);
          DM. Cds_CadItensPedido.ApplyUpdates(0);
end;


Gilmar Moraes

Gilmar Moraes

Responder

Posts

21/11/2012

William

Colega qual campo está definido como chave primária nessa tabela ItensPedido?

Responder

Gostei + 0

21/11/2012

Gilmar Moraes

Colega qual campo está definido como chave primária nessa tabela ItensPedido?


por incrivel que parece nenhuma..

o campo é este aír debaixo e é auto incremento feito por tigers..uso firebird

ID_PEDIDO_ITEM
Responder

Gostei + 0

21/11/2012

Gilmar Moraes

Colega qual campo está definido como chave primária nessa tabela ItensPedido?


por incrivel que parece nenhuma..

o campo é este aír debaixo e é auto incremento feito por tigers..uso firebird

ID_PEDIDO_ITEM


só salva o primeiro registro, no llop a tabela dá novo insert e só quando salva que dá este erro.
poderia ser talves um problema na triqger ? uso clientDataset
Responder

Gostei + 0

21/11/2012

William

Acho difícil ser o trigger, fiz um teste montando uma tabela com 4 campos, sendo o ID auto_increment!!

Inserindo uns 20 registros, foi tranquilo sem erros!

Deve ser outro problema, como está configurado seu DataSetProvider?
Responder

Gostei + 0

21/11/2012

Gilmar Moraes

Acho difícil ser o trigger, fiz um teste montando uma tabela com 4 campos, sendo o ID auto_increment!!

Inserindo uns 20 registros, foi tranquilo sem erros!

Deve ser outro problema, como está configurado seu DataSetProvider?


Bom, conferí as configurações e esta tudo certo, exclui o datasetprovide, datasetclient e o sqldataset, tenho tenho 27 tabelas funcionando perfeitamente, más esta resolvel dá problema..acho que vou excluir a tabela PEDIDO_ITENS e refaze-la.
Responder

Gostei + 0

21/11/2012

William

Acredito que não seja problema na tabela, pode ter passado alguma configuração no conjunto de componentes:
TSQLQUERY+DATASETPROVIDER+CLIENTDATASET+DATASOURCE

Responder

Gostei + 0

21/11/2012

Gilmar Moraes

Acho difícil ser o trigger, fiz um teste montando uma tabela com 4 campos, sendo o ID auto_increment!!

Inserindo uns 20 registros, foi tranquilo sem erros!

Deve ser outro problema, como está configurado seu DataSetProvider?


Bom, conferí as configurações e esta tudo certo, exclui o datasetprovide, datasetclient e o sqldataset, tenho tenho 27 tabelas funcionando perfeitamente, más esta resolvel dá problema..acho que vou excluir a tabela PEDIDO_ITENS e refaze-la.


vou fazer um debug usando showmessage (rsrsrs)
Responder

Gostei + 0

21/11/2012

Gilmar Moraes

Acho difícil ser o trigger, fiz um teste montando uma tabela com 4 campos, sendo o ID auto_increment!!

Inserindo uns 20 registros, foi tranquilo sem erros!

Deve ser outro problema, como está configurado seu DataSetProvider?


Bom, conferí as configurações e esta tudo certo, exclui o datasetprovide, datasetclient e o sqldataset, tenho tenho 27 tabelas funcionando perfeitamente, más esta resolvel dá problema..acho que vou excluir a tabela PEDIDO_ITENS e refaze-la.


vou fazer um debug usando showmessage (rsrsrs)


o problema realmente esta no em alguma parte que aciona o generator do banco de dados. fiz um função de captura o generatos do banco de dados e atribuí ete valor ao campo ID auto incremento e assim funciona sem problemas.. vou tentar resolver analizando os bancos de dados, más se não der vou deixar como está..rrsr
Responder

Gostei + 0

22/11/2012

Bruno Leandro

Ola Gilmar eu dei uma olhada no seu codigo se voce tentar executar o comando abaixo eu coloquei o post e applyupdates do DM.Cds_CadPedido antes do while e removi o comentario que voce deveria informar o id_pedido

begin
DM.Cds_CadItensPedido.Close;
DM.Cds_CadItensPedido.Open;
DM.Cds_CadPedido.Post;
DM.Cds_CadPedido.ApplyUpdates(0);
FCadVendas.Cds_iten_Compra.First;
while not FCadVendas.Cds_iten_Compra.eof do
begin
DM.Cds_CadItensPedido.Append;
DM.Cds_CadItensPedidoID_PEDIDO.Value := Cds_CadPedidoID_PEDIDO.Value;
DM.Cds_CadItensPedidoID_PRODUTO.Value:= FCadVendas.Cds_iten_CompraID_PRODUTO.Value;
DM.Cds_CadItensPedidoVLR_ITEM.AsFloat:= FCadVendas.Cds_iten_CompraPRECO.AsFloat;
DM.Cds_CadItensPedidoQUANTIDADE.AsFloat:= FCadVendas.Cds_iten_CompraQNT.AsFloat;
DM.Cds_CadItensPedidoVLR_TOTAL.AsFloat:= FCadVendas.Cds_iten_CompraVALORTOTAL.AsFloat;
DM.Cds_CadItensPedidoVLR_DESCONTO.AsFloat := FCadVendas.Cds_iten_CompraDESCONTO.AsFloat;
DM.Cds_CadItensPedidoCONTA_ITEM.Value := FCadVendas.Cds_iten_CompraID_ITEN.Value;
DM.Cds_CadItensPedidoID_CLIENTE.Value := DMConsulta.Cds_Pesc_Pedido_ClienteID_CLIENTE.Value;
DM.Cds_CadItensPedidoID_EMPRESA.Value := CodEmpresa;
DM.Cds_CadItensPedido.Post;
DM.Cds_CadItensPedido.ApplyUpdates(0);
FCadVendas.Cds_iten_Compra.Next;
end;
end;
Responder

Gostei + 0

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

Aceitar