Olá a todos, estou enfrentado difícil de solucionar, pelo menos pra mim... Vou 
colocar o código de como estou trabalhando com o clientdataset, quem puder me 
ajudar agradeço.

Resumo do problema: Tenho um formulário de pedido que trabalho com duas tabelas 
no firebird que são: ("pedido" e "pedido_item") eu uso stored procedure para 
insert e update nessas tabelas. No form de cadastro de pedido tenho um dbgrid 
que é adcionado os items do pedido. Quando eu registro um novo pedido ele salva 
noramalmente, ai logo em seguida se eu clicar em localizar um pedido e 
seleciona-lo e logo em seguido clicar em novo, eu começo a inserio o produto 
ele 
puxa os produtos que foi inserido no pedido anterior não estou entendo mais 
nada. Vou postar algus código, se alguém já passou por isso e puder me ajudar. 
Agradeço.

{: Procedure para inserir o pedido e os items} 
procedure TDMPrincipal.InsertPedido;
var
  idPed: Integer;
begin
  // verifica se escolheu produtos
  if cdsPedidoItem.IsEmpty then
  raise Exception.Create('É necessário escolher os produtos!');

    idPed:= qSequence.FieldByName('VLRSEQ').AsInteger + 1;

    Start;
  // Adiciona o pedido
  try
    with spPedido do
    begin
      Params[0].AsInteger:= cdsPedidoPED_COD.AsInteger;
      Params[1].AsInteger:= cdsPedidoFUNC_COD.AsInteger;
      Params[2].AsDate:= cdsPedidoPED_DATA.AsDateTime;
      Params[3].AsBCD:= cdsPedidoItemTOTALGERAL.AsVariant;
      Params[4].AsInteger:= cdsPedidoFORN_COD.AsInteger;

      ExecProc;
      Commit;
      //idPed:= Params[4].AsInteger;
    end;
  Except
    Rollback;
  end;

  // Adiciona os items
  try
    Start;
    cdsPedidoItem.First;
    while not cdsPedidoItem.Eof do
    begin
      with spPedidoItem do
      begin
        Params[0].AsInteger:= idPed;
        Params[1].AsInteger:= cdsPedidoItemPROD_COD.AsInteger;
        Params[2].AsInteger:= cdsPedidoItemQUANTIDADE.AsInteger;
        Params[3].AsBCD:= cdsPedidoItemVALOR.AsCurrency;
        ExecProc;
      end;
      cdsPedidoItem.Next;
    end;
    Commit;
  Except
    DeletePedido(idPed);
    Rollback;
  end;
end;

No evendo afterpost do clientdataset eu chamo essa procedure;
No evendo onnewrecord eu para 0 para o código do pedido.


No formulário de pedido tenho os botões de "novo" "salvar" "alterar" "localizar"

Novo:
  DataSource1.DataSet.Open;
  DataSource1.DataSet.Insert;

Salvar:
  {: salvo as dados se os campos estiverem preenchidos}
  if FieldsWrithe(DataSource1) and (DataSource1.State in [dsEdit, dsInsert]) 
then
  begin
    DMPrincipal.cdsPedido.Post;
    MessageDlg(MSG_OK, mtInformation, [mbOK], 0);
  end;
  DMPrincipal.cdsPedido.Close;
  DMPrincipal.cdsPedidoItem.Close;

Alterar:
  {: habilita/desabilita os componentes e verifica permissões/restrições }
  if not DataSource1.DataSet.IsEmpty then
  begin
    DataSource1.DataSet.Edit;
    DataSource2.DataSet.Edit;
    EnableDisableControls(True);
  end
  else
  begin
    raise Exception.Create('Nenhum pedido foi selecionado!');
  end;

Localizar:
  {: verifica se esta em modo de edição ou inserção}
  if DataSource1.State in [dsEdit, dsInsert] then
    case MessageDlg('Deseja salvar as alterações realizados no Cadastro?', 
mtConfirmation, [mbYes,mbNo,mbCancel], 0) of
     mrYes: btnSalvar.Click;
     mrNo: DataSource1.DataSet.Cancel;
    end
  else
    Application.CreateForm(TfrmBuscaPedido, frmBuscaPedido);
    frmBuscaPedido.ShowModal;

Vlw Pessaol... Ajudem ai please

 Ricardo Messias da Silva Rocha
Bacharel em Ciência da Computação


      

[As partes desta mensagem que não continham texto foram removidas]

Responder a