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]