Fórum Incluir Itens de uma venda #372801

27/07/2009

0

Amigos,
Estou novamente aqui pedindo um socorro a voces. Acredito que até ja deve haver a resposta ao meu questionamento no forum, porém estou postando porque não encontrei. Se alguem souber, por favor mande o link.
Mas indo direto ao assunto, meu problema é o seguinte:
Tenho uma tela de vendas (ligada a tabela vendas) e nesta tela tenho um DBGrid ligado a tabela itens. Já fiz as ligações mestre-detalhe e coloquei o item_cod (PK da tabela itens) como autoincremento. Tambem já informei o item_venda_cod como sendo FK apontado para o venda_cod (PK da tabela vendas).
O problema é que quando informo o código do produto para ser incluido na tabela itens, retorna mensagem [field ´item_cod´ must have a value].
E na tabela itens nõ está gravando nada. Também o DBGrid fica somente com o primeiro campo preenchido.
Os comandos de inserção eu dou no botao Inserir Item.
Para facilitar, coloquei abaixo a imagem da minha tela de vendas.
Se alguem puder me ajudar, desde já agradeço.
Rlacerda.
http://img255.imagevenue.com/img.php?image=68979_venda_122_197lo.jpg


Rlacerda

Rlacerda

Responder

Posts

27/07/2009

Guinther

Bom-dia

Provavelmente você está usando um auto-incremento do Firebird certo (com trigger e genereator). O problema é que esse valor vai ser atribuido somente quando o registro chegar ao BD. Quando você der um post no Delphi, esse valor ainda está nulo, e o DataSet não vai aceitar. O que fazemos é atribuir um valor temporário para o ID até que o registro seja efetivado no banco de dados e receba o autoinc real. Existem várias formas de fazer isso, vc pode no OnNewRecord setar o valor do campo para um número aleatório ou uma contagem negativa progressiva (exemplo -1, -2, -3, -4), o que garantirá a sua indentidade baseada em todos os recs em memória. Se estiver usando um ClientDataSet, fica fácil, basta ler o RecordCount, atribuir ao ID, e deixar ele negativo.

Att

Guinther Pauli
guintherpauli.blogspot.com
twitter.com/guintherpauli


Responder

Gostei + 0

27/07/2009

Rlacerda

Guinther,
Uso o MySql como BD. Olha só, acho que entendi a parte sobre ´Se estiver usando um ClientDataSet, fica fácil, basta ler o RecordCount, atribuir ao ID, e deixar ele negativo.´, porém como faria isso na prática? Tem como postar um exemplo?
Vlw e desculpe a ignorância..... he he he


Responder

Gostei + 0

29/07/2009

Guinther

Então, o RecordCound é a contagem de registros no buffer, se vc criar um novo registro, e tiver 5 no buffer do CDS, vc atribuirá 6 negativo ao ID baseado no RecordCount ;)

Att,

Guinther


Responder

Gostei + 0

03/09/2009

Thiagoangra2

Amigos, Estou novamente aqui pedindo um socorro a voces. Acredito que até ja deve haver a resposta ao meu questionamento no forum, porém estou postando porque não encontrei. Se alguem souber, por favor mande o link. Mas indo direto ao assunto, meu problema é o seguinte: Tenho uma tela de vendas (ligada a tabela vendas) e nesta tela tenho um DBGrid ligado a tabela itens. Já fiz as ligações mestre-detalhe e coloquei o item_cod (PK da tabela itens) como autoincremento. Tambem já informei o item_venda_cod como sendo FK apontado para o venda_cod (PK da tabela vendas). O problema é que quando informo o código do produto para ser incluido na tabela itens, retorna mensagem [field ´item_cod´ must have a value]. E na tabela itens nõ está gravando nada. Também o DBGrid fica somente com o primeiro campo preenchido. Os comandos de inserção eu dou no botao Inserir Item. Para facilitar, coloquei abaixo a imagem da minha tela de vendas. Se alguem puder me ajudar, desde já agradeço. Rlacerda. http://img255.imagevenue.com/img.php?image=68979_venda_122_197lo.jpg


amigo gostaria de fazer a msm coisa que vc, so que com a tabela de produtos! tipo fazer uns kits de produtos, vc poderia me dar uma ajuda talvez ate passando o codigo, ou os forms com codigo pra dar uma olhada e fazer o meu. vlw abraços
da uma força ae


Responder

Gostei + 0

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

Aceitar