Preciso de Dicas de como controlar itens em Master/Detalhes

Delphi

08/10/2009

Amigos, utilizo utilizo o relacionamento master/detalhes, para acesso ao banco utilizo os componentes da dbexpres com clientdataset. Minha dúvida é: qual a melhor forma de controlar os lançamentos na tabela itens, para evitar duplicação de chave, no meu sistema a tabela ´item ´ possui duas chaves estrangeiras que tbm é chave primária (idproduto e idvenda), o problema que quando estou incluindo um item se eu adicionar um item já incluso este item tambem é adicionado (metodo post) sem aparecer o erro de violação de chave, esse erro só aparece quando aplico o metodo (ApplyUpdates(0)). Qual a melhor forma de eu controlar esse erro na hora da inclusão do item?

Deu pra entender.?

Obrigado.


Ant.neto

Ant.neto

Curtidas 0

Respostas

Osocram

Osocram

08/10/2009

Bom eu trabalho um pouco diferente
eu teria uma chave Id_venda e um Id_Venda_Item (incremental) e deixo o id_produto apenas como unique se necessário.

Bom a solução é a seguinte, (uma das soluções, existem várias). Assim que o usuario preencher o codigo do produto, vc faz um cloneCursor do seu dataSet detalhe para não perder o ponteiro de inserção e verifica se existe aquele produto ou não, se existir vc avisa que ja existe. Desta maneira vc avisa o usuário no ato que preencher o produto.
Outra maneira mas eu acho errado seria no beforePost vc verificar se o produto ja existe ou não e avisar o usuário.

Pq eu aconselho não deixar o id_produto como chave, bom ja aconteceu do clientes nossos que exigiram que pudessem colocar o mesmo produto mais de uma vez. E que so fizesse o somatorio deles qdo gerasse nota.
Outros pediram que se adicionar o mesmo produto deveria automaticamente somar a qtd no primeiro produto adicioinado.

Então o Id_produto pode ser ou não uma variável. O bom é que as PK fiquem livre disso.

Flw.


GOSTEI 0
Ant.neto

Ant.neto

08/10/2009

Valew Osocram,
Como a base de dados ja está criada... e ja existe movimentaçoes de dados na base de dados, vou deixar o id do protudo como chave, mas achei interessante sua dica de eliminar o id do produto da chave.

Em relação a minha dúvida vou dar uma verificada de como funciona o cloneCursor. Ainda n trabalhe com ele, e como falei anteriormente, eu tratava este erro amntes do applyUp...

Vc. tem algum exemplo de como trabalhar com cloneCursor.

Obrigado.

Bom eu trabalho um pouco diferente eu teria uma chave Id_venda e um Id_Venda_Item (incremental) e deixo o id_produto apenas como unique se necessário. Bom a solução é a seguinte, (uma das soluções, existem várias). Assim que o usuario preencher o codigo do produto, vc faz um cloneCursor do seu dataSet detalhe para não perder o ponteiro de inserção e verifica se existe aquele produto ou não, se existir vc avisa que ja existe. Desta maneira vc avisa o usuário no ato que preencher o produto. Outra maneira mas eu acho errado seria no beforePost vc verificar se o produto ja existe ou não e avisar o usuário. Pq eu aconselho não deixar o id_produto como chave, bom ja aconteceu do clientes nossos que exigiram que pudessem colocar o mesmo produto mais de uma vez. E que so fizesse o somatorio deles qdo gerasse nota. Outros pediram que se adicionar o mesmo produto deveria automaticamente somar a qtd no primeiro produto adicioinado. Então o Id_produto pode ser ou não uma variável. O bom é que as PK fiquem livre disso. Flw.



GOSTEI 0
Osocram

Osocram

08/10/2009

da uma procurada aqui no forum mesmo...
Eu mesmo ja postei em um topico um exemplo usando cloneCursor, e ja vi outros exemplos tbm.

flw.


GOSTEI 0
Ant.neto

Ant.neto

08/10/2009

da uma procurada aqui no forum mesmo... Eu mesmo ja postei em um topico um exemplo usando cloneCursor, e ja vi outros exemplos tbm. flw.


Grande osocram.. valew.. deu certo... utilize a função clone.. brigadão


GOSTEI 0
Osocram

Osocram

08/10/2009

Opa, blz

Que bom que resolveu.
boa sorte ae no seu projeto.


GOSTEI 0
POSTAR