ApplyUpdates não grava no banco
Boa tarde pessoal. Estou iniciando desenvolvimentos em Delphi 7 com Dbx. Uso como banco o Firebird 2.0. Estou com um problema que deve ser fácil de resolver mas ainda não consegui. Uso os componentes TSqlQuery + TDataSetProvider + TClientDataSet. Eu consigo inserir registros novos sem problema, mas na edição estou com problemas. Não consigo editar... minha tabela tem poucos campos e só consigo editar um campo BLOB da mesma. O applyupdates não retorna erro, então não entra no reconcileerror.
Abaixo seguem algumas rotinas que estou implementando.
with dmodMalotes do
begin
Mlt_Emissora := edtFil_Malote.Text;
Mlt_Numero := StrToInt(edtMalote.Text);
Mlt_Ano := edtAno_Malote.Text;
if not Localizar then
cdsManutencao.Insert
else
cdsManutencao.Edit;
cdsManutencaoFIL_MALOTE.AsString := edtFil_Malote.Text;
cdsManutencaoNRO_MALOTE.AsInteger := StrToInt(edtMalote.Text);
cdsManutencaoANO_MALOTE.AsString := edtAno_Malote.Text;
cdsManutencaoDT_EMISSAO.AsDateTime := edtDt_Emissao.Date;
cdsManutencaoEMITIDO_POR.AsString := edtEmitido_Por.Text;
cdsManutencaoBANCO.AsString := edtCd_Banco.Text;
cdsManutencaoAGENCIA.AsString := edtCd_Agencia.Text;
cdsManutencaoCONTA.AsString := edtCd_Conta.Text;
cdsManutencaoSTATUS.AsString := ´DG´;
cdsManutencaoLACRE.Value := edtLacres.Text;
cdsManutencaoOBS_DIVERSAS.Value := mmoObservacoes.Text;
cdsManutencaoOPERADOR.AsString := sSnh_NmUsuario;
cdsManutencaoDT_ALTERACAO.AsDatetime := SysUtils.Now;
cdsManutencao.Post;
end;
essa e a rotina para inserção e edição. em meus datamodulos tenho herdado as selects, por isso passo somente as propriedades e chama a rotina localizar. Abaixo segue a rotina do afterpost.
if dmodPrincipal.dtbConexaoBancoDBX.TransactionsSupported and
Not dmodPrincipal.dtbConexaoBancoDBX.InTransaction then
dmodPrincipal.dtbConexaoBancoDBX.StartTransaction(dmodPrincipal.Transacao);
try
cdsManutencao.ApplyUpdates( 0);
if dmodPrincipal.dtbConexaoBancoDBX.TransactionsSupported and
dmodPrincipal.dtbConexaoBancoDBX.InTransaction then
dmodPrincipal.dtbConexaoBancoDBX.Commit(dmodPrincipal.Transacao);
except
cdsManutencao.CancelUpdates;
if dmodPrincipal.dtbConexaoBancoDBX.TransactionsSupported and
dmodPrincipal.dtbConexaoBancoDBX.InTransaction then
dmodPrincipal.dtbConexaoBancoDBX.Rollback(dmodPrincipal.Transacao);
end;
e a do reconcile error.
ShowMessage(E.Message);
Action := HandleReconcileError(DataSet, UpdateKind, E);
Pus as duas intencionalmente pra saber se alguma iria retornar erro.
no applyupdates já fiz a seguinte chegagem: if applyupdates(0) > 0 then ... mas não resolveu. Só o que consigo editar é meu campo OBS_DIVERSAS que é BLOB.
Alguém pode me ajudar?
Agradeço a atenção.
Abaixo seguem algumas rotinas que estou implementando.
with dmodMalotes do
begin
Mlt_Emissora := edtFil_Malote.Text;
Mlt_Numero := StrToInt(edtMalote.Text);
Mlt_Ano := edtAno_Malote.Text;
if not Localizar then
cdsManutencao.Insert
else
cdsManutencao.Edit;
cdsManutencaoFIL_MALOTE.AsString := edtFil_Malote.Text;
cdsManutencaoNRO_MALOTE.AsInteger := StrToInt(edtMalote.Text);
cdsManutencaoANO_MALOTE.AsString := edtAno_Malote.Text;
cdsManutencaoDT_EMISSAO.AsDateTime := edtDt_Emissao.Date;
cdsManutencaoEMITIDO_POR.AsString := edtEmitido_Por.Text;
cdsManutencaoBANCO.AsString := edtCd_Banco.Text;
cdsManutencaoAGENCIA.AsString := edtCd_Agencia.Text;
cdsManutencaoCONTA.AsString := edtCd_Conta.Text;
cdsManutencaoSTATUS.AsString := ´DG´;
cdsManutencaoLACRE.Value := edtLacres.Text;
cdsManutencaoOBS_DIVERSAS.Value := mmoObservacoes.Text;
cdsManutencaoOPERADOR.AsString := sSnh_NmUsuario;
cdsManutencaoDT_ALTERACAO.AsDatetime := SysUtils.Now;
cdsManutencao.Post;
end;
essa e a rotina para inserção e edição. em meus datamodulos tenho herdado as selects, por isso passo somente as propriedades e chama a rotina localizar. Abaixo segue a rotina do afterpost.
if dmodPrincipal.dtbConexaoBancoDBX.TransactionsSupported and
Not dmodPrincipal.dtbConexaoBancoDBX.InTransaction then
dmodPrincipal.dtbConexaoBancoDBX.StartTransaction(dmodPrincipal.Transacao);
try
cdsManutencao.ApplyUpdates( 0);
if dmodPrincipal.dtbConexaoBancoDBX.TransactionsSupported and
dmodPrincipal.dtbConexaoBancoDBX.InTransaction then
dmodPrincipal.dtbConexaoBancoDBX.Commit(dmodPrincipal.Transacao);
except
cdsManutencao.CancelUpdates;
if dmodPrincipal.dtbConexaoBancoDBX.TransactionsSupported and
dmodPrincipal.dtbConexaoBancoDBX.InTransaction then
dmodPrincipal.dtbConexaoBancoDBX.Rollback(dmodPrincipal.Transacao);
end;
e a do reconcile error.
ShowMessage(E.Message);
Action := HandleReconcileError(DataSet, UpdateKind, E);
Pus as duas intencionalmente pra saber se alguma iria retornar erro.
no applyupdates já fiz a seguinte chegagem: if applyupdates(0) > 0 then ... mas não resolveu. Só o que consigo editar é meu campo OBS_DIVERSAS que é BLOB.
Alguém pode me ajudar?
Agradeço a atenção.
Clafa
Curtidas 0
Respostas
Clafa
09/03/2007
só complementando, uso updatemode como upWhereKeyOnly e em todos meus fields em providerflags eu setei pfupdate e nos que eram chave primaria setei tambem pfKey.
GOSTEI 0
Clafa
09/03/2007
consegui resolver... eram os options do provider... estavam ativos os options poFetchBlobsOnDemand e poFetchDetailsOnDemand. Desativei e funcionou... vou estudar um pouco melhor os options do provider e ver o que necessito realmente. []´s
GOSTEI 0
Rosianeterra
09/03/2007
Não estou conseguindo montar o xml, alguem teria um exemplo
agradeço.
agradeço.
GOSTEI 0