ApplyUpdates não grava no banco

Delphi

09/03/2007

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.


Clafa

Clafa

Curtidas 0

Respostas

Clafa

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

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

Rosianeterra

09/03/2007

Não estou conseguindo montar o xml, alguem teria um exemplo
agradeço.


GOSTEI 0
POSTAR