ClientDataSet e ApplyUpdates
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
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
Curtidas 0
Respostas
Cbritojunior
17/03/2004
Não vejo muito sentido em usar o Post + ApplyUpdates.
Experimente utilizar o ApplyUpdates(0).
Experimente utilizar o ApplyUpdates(0).
GOSTEI 0
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...
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
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
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
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