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:
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.
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:
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!!
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
Curtir tópico
+ 0
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!
Então eu só tirei o ID dele que na verdade nem era necessário e funcionou normalmente!
Resolvido!
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)