Pessoal boa noite, estou tendo um problema em gravar no banco os produtos de uma venda, é o seguinte, tenho um tabela venda_cabeçalho, uma venda_detalhe e uma produtos, na tabela venda_detalhe as pks são formadas pelas pks de venda_cabeçalho(venda_cod) e produtos(prod_cod), quando vou gravar os produtos na venda_detalhe, gera o erro de integridade devido a duplicidade do codigo da venda(venda_cod) que será repetido nas linhas referentes aos produtos. Como posso gravar esses dados na venda_detalhe sem dar essa restrição?
Gravar produtos vendidos
7 Respostas
Não existem PKs (no plural) em uma tabela o que existe é uma PK, no seu caso composta que será venda_cod e prod_cod se só uma ou outra for a PK vai dar problema mesmo, e outra coisa nessa tabela venda_detalhe você precisa de pelo menos mais um atributo que é a quantidade a menos que o cliente possa comprar apenas um de cada produto por compra.
Ainda tenho mais 3 atributos (qtd, vlUnit, vltotal), markin1 como devo criar então esta tabela venda_detalhe para poder inserir o cod_venda e o cod_produto, sem dar duplicidade de chaves, deveria ficar assim na tabela:
cod_venda - cod_produto - qtd - vlUnit - vlTotal
1 2 4 2.5 10.0
1 3 2 1.5 3.0
1 6 1 3.0 3.0
2 1 1 2.0 2.0
2 2 2 2.5 5.0
acho que eu poderia tirar o vlUnit, e buscá-lo na tabela produto duranta a consulta, vc concorda?
Eu acho melhor vc deixar o valor unitário também na tabela detalhe porque pode ser que os produtos vendidos hoje mudem de preço amanhã e você não pode cobrar o que foi vendido hoje no preço de amanhã.
Entendeu?
Eu acho melhor vc deixar o valor unitário também na tabela detalhe porque pode ser que os produtos vendidos hoje mudem de preço amanhã e você não pode cobrar o que foi vendido hoje no preço de amanhã.Entendeu?
Isso mesmo, entendi, markin1 e como devo criar esta tabela…
como assim?
cod_venda e cod_produto como PK composta e o resto dos atributos.
como assim?cod_venda e cod_produto como PK composta e o resto dos atributos.
Mas ela já está composta, veja:
/*==============================================================*/
/* Table: VENDADET */
/*==============================================================*/
create table VENDADET
(
VENDA_COD int not null,
PROD_COD int not null,
VENDA_DET_QTD int,
VENDA_DET_VL_UNIT double,
VENDA_DET_VL_TOTAL double,
constraint PK_VENDADET primary key clustered (VENDA_COD, PROD_COD)
);
e o INSERT está sendo feito assim:
"insert into vendaDet (venda_cod,prod_cod,venda_det_qtd,"
+ "venda_det_vl_unit,venda_det_vl_total) values (?,?,?,?,?)";
está certo?
markin1 agradeço sua ajuda, meu erro foi no algorítmo para inserir no banco, estava repetindo o código do produto, obrigado.