ClientDataSet e ApplyUpdates

Delphi

17/03/2004

Estou com uma dúvida que está me dando dor de cabeça.
Estou usando o Database+Query(BDE)+DataSetProvider+ClientDataSet para fazer acesso a um banco de dados.
As consultas estão sendo feitas de forma correta, sem problemas. Mas na hora de incluir, editar ou apagar um registro ele dá o erro:

cdsprodutos: Must apply updates before refreshing data

O erro é devido a cached updates, diz que eu tenho que dar um applyupdates antes do refresh, mas estou fazendo isso, dá uma olhada no código abaixo que está no botão confirma:

begin
try
if Application.MessageBox(´Confirmar operação corrente?´,
mb_YesNo+mb_IconQuestion) = idYes then
begin
dtmcadastros.dtbpdvfw.StartTransaction;
dtmcadastros.cdsfuncionarios.Post;
dtmcadastros.cdsfuncionarios.ApplyUpdates(-1);
dtmcadastros.dtbpdvfw.Commit;
if dtmcadastros.cdsfuncionarios.State in [dsInsert] then
begin
dtmcadastros.cdsfuncionarios.Append;
dbedtcodigo.SetFocus;
end
else
frmNovoFuncionario.Close;
end;
except
dtmcadastros.dtbpdvfw.Rollback;
end;

As alterações não são gravadas no Banco de dados e fica mostrando o erro já mencionado quando dou um refresh.

A cached updates da Query está desabilitada, mas mesmo habilitando apresenta o mesmo problema

Alguém tem alguma idéia do que possa ser?

Valeu.

Braytiner


Braytiner Heggendorn

Braytiner Heggendorn

Curtidas 0

Respostas

Cbritojunior

Cbritojunior

17/03/2004

Não vejo muito sentido em usar o Post + ApplyUpdates.
Experimente utilizar o ApplyUpdates(0).


GOSTEI 0
Danielclubedelphi

Danielclubedelphi

17/03/2004

Antes de tudo queria dizer que ja que vc esta usando Clientdataset, poderia passar a usar o DBExpress... apesar de ser mais ´difícil´ não precisa mais do BDE.

Como nunca usei clientdataset com BDE posso estar errado, mas acho que o problema é que esta faltando um componente de atualização... acho que o nome é updatesql... algo assim... aquele componente que tem um mais(+) la na paleta do BDE...


GOSTEI 0
Braytiner Heggendorn

Braytiner Heggendorn

17/03/2004

Bom eu uso o Mysql e faço acesso através de ODBC o que implica em usar o BDE.
Mas o problema refere-se ao fato de que a Query estava com RequestLive=False o que impossibilitava a Query de atualizar os dados. Logo após defini a propriedade ResolveToDataset como True o que indica ao povider que a Query irá atualizar os dados.

Braytiner


GOSTEI 0
Marcosalex

Marcosalex

17/03/2004

Bom eu uso o Mysql e faço acesso através de ODBC o que implica em usar o BDE. Mas o problema refere-se ao fato de que a Query estava com RequestLive=False o que impossibilitava a Query de atualizar os dados. Logo após defini a propriedade ResolveToDataset como True o que indica ao povider que a Query irá atualizar os dados. Braytiner


Voce pode usar o DBExpress pra acessar o MySQL, daí não precisa de ODBC e fica muito mais rápido. As próximas versões do Delphi só vão aceitar BDE para Dbase e Paradox.


GOSTEI 0
POSTAR