GARANTIR DESCONTO

Fórum Error Key Violation #471189

25/02/2014

0

Olá Pessoal,
Eu estou tentando inserir na tabela KIT e na tabela DETALLE_KIT. Eu até já consigo fazer isso porém só com um item no grid do detalhe, pois quando eu coloco mais de um detalhe para inserir na TABELA DETALLE_KIT ele da um erro de key violation.

ERRO:
Project CMS.exe raised exception class EDBClient with message 'Key violation.'.


OBS:
Se eu coloco somente 1 item no grid que vai ser inserido na tabela DETALLE_KIT não ocorre nenhum erro é só quando é mais de 1.

Primeiramente eu faço desta maneira:
1º O usuário clica no botão inserir que vai criar já um código no banco de dados na TABELA KIT inserindo somente a data dos dados existentes na TABELA.
procedure TF_FormKit.btnInserirClick(Sender: TObject);
begin
   DMPrin.cds_CadKit_Aux.Last;
   TClientDataSet(dtsCadastrarKit.DataSet).Append;
   dtsCadastrarKit.DataSet.FieldByName('fecha').AsDateTime := strtodate(formatdatetime('dd/mm/yyyy',now));
   TClientDataSet(dtsCadastrarKit.DataSet).ApplyUpdates(0);
   TClientDataSet(dtsCadastrarKit.DataSet).Close;
   TClientDataSet(dtsCadastrarKit.DataSet).Open;
end;


2º Eu insiro o resto dos dados na TABELA KIT (pois como podem ver no codigo anterior so foi inserido a data) e também insiro na TABELA DETALLE_KIT, onde eu criei a TABELA KIT anteriormente para poder pegar o ID da TABELA KIT para passar para a tabela DETALLE_KIT e é isso que eu faço na inserção. e o codigo na hora de salvar está dessa maneira:
procedure TF_FormKit.btnSalvarClick(Sender: TObject);
begin
  TClientDataSet(dtsCadastrarKit.DataSet).Last;
  cds_Itens.First;
  while not cds_Itens.Eof do
  begin
    TClientDataSet(dtsCadastrarDetalheKit.DataSet).Append;
    dtsCadastrarDetalheKit.DataSet.FieldByName('ID_PRODUCTO').AsInteger := dtsConsultarProduto.DataSet.FieldByName('ID_PRODUCTO').AsInteger;
    ShowMessage('1º ANTES' + dtsCadastrarKit.DataSet.FieldByName('ID_KIT').AsString);
    dtsCadastrarDetalheKit.DataSet.FieldByName('ID_KIT').AsInteger := dtsCadastrarKit.DataSet.FieldByName('ID_KIT').AsInteger;
    ShowMessage('2º DEPOIS' + dtsCadastrarKit.DataSet.FieldByName('ID_KIT').AsString);
    dtsCadastrarDetalheKit.DataSet.FieldByName('CANTIDAD').AsFloat := dtsItens.DataSet.FieldByName('QUANTIDADE').AsFloat;
    dtsCadastrarDetalheKit.DataSet.FieldByName('PRECIO_COSTO').AsFloat := dtsItens.DataSet.FieldByName('PRECO_COSTO').AsFloat;
    dtsCadastrarDetalheKit.DataSet.FieldByName('PRECIO_MEDIO').AsFloat := dtsItens.DataSet.FieldByName('PRECO_MEDIO').AsFloat;
    dtsCadastrarDetalheKit.DataSet.FieldByName('PRECIO_VENTA').AsFloat := dtsItens.DataSet.FieldByName('PRECO_VENTA').AsFloat;
    ShowMessage('3º FINAL' + dtsCadastrarKit.DataSet.FieldByName('ID_KIT').AsString);
    TClientDataSet(dtsCadastrarDetalheKit.DataSet).ApplyUpdates(0);
    cds_Itens.Next;
  end;
  TClientDataSet(dtsCadastrarKit.DataSet).Edit;
  dtsCadastrarKit.DataSet.FieldByName('NOMBRE').AsString := edtNomeKit.Text;
  dtsCadastrarKit.DataSet.FieldByName('VALOR_TOTAL').AsFloat := StrToFloat(edtTotalValorKit.Text);
  dtsCadastrarKit.DataSet.FieldByName('ID_FUNCIONARIO').AsInteger := dtsConsultarFuncionario.DataSet.FieldByName('ID_FUNCIONARIO').AsInteger;
  TClientDataSet(dtsCadastrarKit.DataSet).ApplyUpdates(0);

  limpar;
end;


Alguem poderia me ajudar o porque disso estar acontecendo? Eu acredito que seja por causa do ID_KIT mais eu preciso dele para a TABELA DETALLE_KIT.

Desde já agradecido!!
Edson Vilhalba

Edson Vilhalba

Responder

Posts

25/02/2014

Edson Vilhalba

Pessoal era o ID da tabela DETALLE_KIT que estava duplicando toda hora o id e por isso o key violation.

Então eu só tirei o ID dele que na verdade nem era necessário e funcionou normalmente!

Resolvido!
Responder

Gostei + 0

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

Aceitar