Fórum IBDATASET x DBGRID #173605
07/08/2003
0
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
Curtir tópico
+ 0Posts
08/08/2003
Siro
Gostei + 0
09/08/2003
Siro
Gostei + 0
10/08/2003
Siro
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]..
Gostei + 0
11/08/2003
Fava
Gostei + 0
11/08/2003
Siro
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;
Gostei + 0
18/08/2003
Siro
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)