GARANTIR DESCONTO

Fórum IBDATASET x DBGRID #173605

07/08/2003

0

Pessoal estou com o seguinte problema com mestre/detalhe quando tendo inseir um produto atravéz
de um grid, e não consegui uma solução:

Tenho um Tabela denominada ´PEDIDO´ (mestre) e outra denominada ´ITENS_PEDIDO´(detalhe).
ligadas da seguinte forma:

[b:c601003ee3]ITENS_PEDIDO ´datasource´ = datasource_pedido;[/b:c601003ee3]

no sql do dataset ITENS_PEDIDO: ´select * from ITENS_PEDIDOS WHERE ID=:ID´


Acontece que quando tento incluir [b:c601003ee3]´MAIS DE UM ITEM´ [/b:c601003ee3]do pedido, atraves de um [b:c601003ee3] dbgrid[/b:c601003ee3](datasource_item_pedido), após digitar
o segundo item, [b:c601003ee3]quando gravo[/b:c601003ee3], o primeiro produto digitado e repetido no segundo item([b:c601003ee3]simplesmente repete[/b:c601003ee3])
, e quando digito mais de dois itens, toda vez que insiro um novo item o anterior [b:c601003ee3]repete o primeiro item [/b:c601003ee3]
digitado, e assim suscessivamente. Se após incluir 10 registros, todos eles [b:c601003ee3]repetem o primeiro item inserido.[/b:c601003ee3]
não sei o que fazer..


utilizo as instruções abaixo para um novo pedido..

// Cria/Atualiza Novo valor para esta pedido

dmBaseDados.IBControleSequencia.close;
dmBaseDados.IBControleSequencia.SelectSQL.Clear;
dmBaseDados.IBControleSequencia.SelectSQL.Add(´UPDATE Controle_sequencia´+
´ Set NUM_PEDIDO = NUM_PEDIDO + 1´);
dmBaseDados.IBControleSequencia.ExecSQL;

// seleciona linha a para buscar novo Numero do novo pedido

dmBaseDados.IBControleSequencia.close;
dmBaseDados.IBControleSequencia.SelectSQL.Clear;
dmBaseDados.IBControleSequencia.SelectSQL.Add(´Select * from controle_sequencia´);
dmBaseDados.IBControleSequencia.open;
Numero_Pedido:=dmBaseDados.IBControleSequencia.FieldByname(´NUM_PEDIDO´).asinteger;

IBDataSet.close;
IBDataSet.SelectSQL.Clear;
IBDataSet.SelectSQL.Add(´INSERT INTO PEDIDOS ´+
´(ID) ´+´ VALUES(:Num_Pedido)´);
IBDataSet.Parambyname(´Num_Pedido´).asinteger:=Numero_Pedido;
IBDataSet.ExecSQL;


IBDataSet.active:=false;
IBItensPedidos.Active:=False;


IBDataSet.SelectSQL.Clear;
IBDataSet.SelectSQL.Add(´Select * from PEDIDOS ´+
´ Where ID= ´+IntToStr(Numero_Pedido));


IBDataSet.active:=true;
IBItensPedidos.Active:=true;

IBDataSet.Edit;
IBItensPedidos.Edit;


Siro

Siro

Responder

Posts

08/08/2003

Siro

SOBE


Responder

Gostei + 0

09/08/2003

Siro

Sobe


Responder

Gostei + 0

10/08/2003

Siro

Poxa!!!!! será que ninguem vai me axiliar????

Pessoal, preciso fazer fazer um mestre/detalhe com [b:9f82e17594]IBDATASET,[/b:9f82e17594] e poder inserir em um grid registros na tabela detalhe, pois preciso navegar pelo dataset (next, prior, etc.. como um mestre detalhe com IBTABlE).

Da forma que fiz, consigo navegar pelos registros, mas estou com [b:9f82e17594]problemas para inserir dados na tabela detalhe[/b:9f82e17594]..


Responder

Gostei + 0

11/08/2003

Fava

Se você está com problemas na inserção do detalhe você deveria postar o código de inserção do detalhe (itens) e não do metre (pedido).


Responder

Gostei + 0

11/08/2003

Siro

Se você está com problemas na inserção do detalhe você deveria postar o código de inserção do detalhe (itens) e não do metre (pedido).




NO evendo OnNewRecord do IbItensPedidos ulilizo
IBItensPedidosID.AsInteger:=IBDataSetID.AsInteger;


No evento [b:e513cd2a90]ColExit[/b:e513cd2a90] do grid estou ulilizando o procedimento listado abaixo, mas após a inserção do primeiro registro, todos dos demais que tentar incluir e [b:e513cd2a90]repete o primeiro item inserido[/b:e513cd2a90], [u:e513cd2a90]tentei utilizar um
botão[/u:e513cd2a90] com o procedimento (abaixo da procedure do grid), mas continuou na mesma situação..


[b:e513cd2a90]procedure TFormPedidos.grdProdutosColExit(Sender: TObject);
begin[/b:e513cd2a90]
if(IBItensPedidos.State = dsinsert) or (IBItensPedidos.State = dsedit) then
begin

if(( grdProdutos.SelectedIndex = 2) and (grdProdutos.Fields[2].AsString <> ´´)) then
begin
// query localizando o produto em estoque
dmBaseDados.IBQryProduto.close;
dmBaseDados.IBQryProduto.SQL.Clear;
dmBaseDados.IBQryProduto.SQL.Add(´Select * from PRODUTOS ´+
´Where ID =:pID´);
dmBaseDados.IBQryProduto.parambyname(´pID´).AsInteger:=grdProdutos.Fields[2].AsInteger;
dmBaseDados.IBQryProduto.Open;
IF dmBaseDados.IBQryProduto.RecordCount = 0 then
begin
Mensagem(´Código produto Inválido - favor corrigir´);
grdProdutos.SetFocus;
grdProdutos.SelectedIndex:=2;
end
else
Begin
IBItensPedidosID.AsInteger:=IBDataSetID.AsInteger;
IBItensPedidosID_PRODUTO.AsInteger:= dmBaseDados.IBQryProdutoID.AsInteger;
IBItensPedidosCODIGO_BARRAS.AsString:= dmBaseDados.IBQryProdutoCODIGO_DE_BARRAS.AsString;
IBItensPedidosDESCRICAO_PRODUTO.AsString:= dmBaseDados.IBQryProdutoDESCRICAO_ABREVIADA.AsString;
IBItensPedidosVALOR_UNITARIO.AsFloat:= dmBaseDados.IBQryProdutoVALOR_VENDA.AsFloat;
IBItensPedidosICMS.AsFloat:=dmBaseDados.IBQryProdutoICMS_SAIDA.AsFloat;
IBItensPedidosIPI.AsFloat:=dmBaseDados.IBQryProdutoIPI_SAIDA.AsFloat;
//IBItensPedidosQUANT_PRODUTO.AsInteger:=1;
grdProdutos.SelectedIndex:= 5;
end;
end;


if(( grdProdutos.SelectedIndex = 5) and (grdProdutos.Fields[5].AsString <> ´´)) then
begin
IBItensPedidosVALOR_TOTAL.AsFloat:=IBItensPedidosVALOR_UNITARIO.AsFloat * IBItensPedidosQUANT_PRODUTO.AsInteger;
end;

if(( grdProdutos.SelectedIndex = 6) and (grdProdutos.Fields[6].AsString <> ´´)) then
begin
IBItensPedidosVALOR_TOTAL.AsFloat:= IBItensPedidosQUANT_PRODUTO.AsInteger * IBItensPedidosVALOR_UNITARIO.AsFloat;
//grdProdutos.SelectedIndex:= 4;
end;
end;


end;



PROCEDIMENTO UTILIZADO NO BOTÃO:

[b:e513cd2a90]procedure TFormPedidos.btn_IncluirItemClick(Sender: TObject);[/b:e513cd2a90]var

begin
Application.CreateForm(TFormInclusaoProdutosSaidas,FormInclusaoProdutosSaidas);
try
if FormInclusaoProdutosSaidas.ShowModal = mrok then
Begin

IBItensPedidos.Insert;
//IBItensPedidos.Append;

//IBItensPedidos.FieldByname(´ID´).asinteger:=Numero_Pedido;

IBItensPedidosID.AsInteger:=IBDataSetID.AsInteger;

IBItensPedidos.FieldByname(´ID_PRODUTO´).AsString :=dmBaseDados.IBQryProduto.FieldByname(´ID´).AsString;
IBItensPedidos.FieldByname(´CODIGO_BARRAS´).AsString :=dmBaseDados.IBQryProduto.FieldByname(´CODIGO_DE_BARRAS´).AsString;
IBItensPedidos.FieldByname(´ICMS´).asfloat := StrToFloat(FormInclusaoProdutosSaidas.edtIcms.Text);
IBItensPedidos.FieldByname(´DESCRICAO_PRODUTO´).asstring :=dmBaseDados.IBQryProduto.FieldByname(´DESCRICAO_ABREVIADA´).asstring;
IBItensPedidos.FieldByname(´QUANT_PRODUTO´).asinteger :=StrToInt(FormInclusaoProdutosSaidas.edtQuantidade.Text);
IBItensPedidos.FieldByname(´VALOR_UNITARIO´).asfloat :=Valor_de_venda;
IBItensPedidos.FieldByname(´VALOR_TOTAL´).asfloat :=Valor_de_venda*StrToInt(FormInclusaoProdutosSaidas.edtQuantidade.Text);
IBItensPedidos.FieldByname(´NUM_ITEM´).asinteger :=Num_sequencia_item_vendido;

IBItensPedidos.Post;

grdProdutos.SetFocus;
END;
finally
FormInclusaoProdutosSaidas.Free;
end;

END;


Responder

Gostei + 0

18/08/2003

Siro

Sobe


Responder

Gostei + 0

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

Aceitar