Duplica Registro ao Atualizar

21/08/2008

1

Bom dia a todos(as)!

Tenho uma tela onde o usuário registra uma Apac (Solicitação de Exame) para um paciente. Cada Apac contém um ou mais procedimentos. A inclusão da Apac e procedimentos está ok. Agora, quando faço uma atualização de um procedimento, ao verificar na tabela constato que o registro foi duplicado (na tabela da Apac isso não acontece).

Segue abaixo a rotina que grava o procedimento da Apac (estou utilizando Delphi 2005 - dbExpress - Sql Server 2000):

No onshow do form:
with dmAtendimento.cdsAtenApacProc do
begin
close;
params[0].AsInteger := dmAtendimento.cdsAtenApacAT_APAC_COD.AsInteger;
open;
end;

No botão Ok:

PageControl2.TabIndex := 0;
if not ValidaCampos then
exit;
GravaApac;
CarregaAtendimentos;
MessageDlg(´APAC gravada com sucesso!´, mtInformation, [mbOk], 0);
ControlaComponentes(dsEdit);

GravaApac:

// Grava a Apac
with dmAtendimento.cdsAtenApac do
begin
close;
params[0].AsInteger := dmAtendimento.vAten_cod_At;
open;
if vEstadoDS = dsInsert then
Append
else
Edit;
FieldByName(´ATEN_COD´).AsInteger := dmAtendimento.vAten_cod_At;
FieldByName(´AT_APAC_PROF_NOM´).AsString := cmbbxProfSolic.Text;
FieldByName(´AT_APAC_SOLIC_DAT´).AsString := FormatDateTime(´dd/mm/yyyy´, strtodate(mskedtDataSolic.Text));
FieldByName(´AT_APAC_CID10_PRI_COD´).AsString := edtCidPri.Text;
FieldByName(´AT_APAC_CID10_SEC_COD´).AsString := edtCidSec.Text;
FieldByName(´AT_APAC_CID10_CAU_COD´).AsString := edtCidCau.Text;
FieldByName(´AT_APAC_RES_EXA_FIS´).AsString := mmResExFis.Text;
FieldByName(´AT_APAC_JUST_PROC´).AsString := mmJustProc.Text;
Post;
ApplyUpdates(0);
Refresh;
if vEstadoDS = dsInsert then
dm.vProcedCod := dm.MostraCodigo;
end;
// Grava os procedimentos da Apac
GravaProcedApac(cmbbxProcPriCod.Text, edtProcPriQtde.Text, ´S´, lblCodProc);
{
GravaProcedApac(cmbbxProcSecCod1.Text, edtProcSecQtde1.Text, ´N´, lblCodProc1);
GravaProcedApac(cmbbxProcSecCod2.Text, edtProcSecQtde2.Text, ´N´, lblCodProc2);
GravaProcedApac(cmbbxProcSecCod3.Text, edtProcSecQtde3.Text, ´N´, lblCodProc3);
GravaProcedApac(cmbbxProcSecCod4.Text, edtProcSecQtde4.Text, ´N´, lblCodProc4);
GravaProcedApac(cmbbxProcSecCod5.Text, edtProcSecQtde5.Text, ´N´, lblCodProc5);
}
end;


Grava procedimento da apac:

procedure TfrmApac.GravaProcedApac(vProcCod, vQtde, vFlag: string; vCodigo: TLabel);
begin
if (Length(Trim(vProcCod)) <> 0) and (Length(Trim(vQtde)) <> 0) then
begin
with dmAtendimento.cdsAtenApacProc do
begin
if vCodigo.Caption = ´´ then
begin
Append;
//FieldByName(´AT_APAC_COD´).AsInteger := dm.vProcedCod;
end
else
begin
Filtered := false;
Filter := ´´;
Filter := ´AT_AP_PROC_COD = ´ + vCodigo.Caption;
Filtered := true;
Edit;
end;
FieldByName(´AT_APAC_COD´).AsInteger := dm.vProcedCod;
FieldByName(´PROC_COD´).AsInteger := strtoint(vProcCod);
FieldByName(´AT_AP_PROC_QTDE´).AsInteger := strtoint(vQtde);
FieldByName(´AT_AP_PROC_PRI´).AsString := vFlag;
Post;
ApplyUpdates(0);
if vCodigo.Caption = ´´ then
vCodigo.Caption := inttostr(dm.MostraCodigo);
Refresh;
end;
end;
end;

Com certeza devo estar comendo bola em alguma parte do código, agora tá duro de achar onde (kkkkkkk).

Agradeço desde já pela atenção.

[]´s


Responder

Posts

21/08/2008

Roger1976

Amigos(as), encontrei a solução. Eu apaguei o clientdataset cdsAtenApacProc , salvei o projeto, fechei, abri novamente e refiz. Funcionou, acho que o clientdataset estava bichado kkkkkk


Responder