Incluir Itens de uma venda
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
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
Curtidas 0
Respostas
Guinther
27/07/2009
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
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
GOSTEI 0
Rlacerda
27/07/2009
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
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
GOSTEI 0
Guinther
27/07/2009
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
Att,
Guinther
GOSTEI 0
Thiagoangra2
27/07/2009
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
GOSTEI 0