Fórum UpdateStatus #289470
26/07/2005
0
Alguém sabe Como cancelar o UpdateStatus do CDS ?
Mesmo usando .Cancel ou .CancelUpdates o status do CDS permanece em [usDeleted, usInserted, usModified].
Não tinha percebido isto até hoje , mas preciso de multiplos CDS numa tela e escrevi uma rotina generica de verificação de troca de PageIndex em um PageControl e aí apareceu o problema.
Vejam bem :
1ª Rotina : Botão Cancel :
for i := 0 to Self.ComponentCount - 1 do if (Components[i] is TClientDataSet) then
if (Components[i] as TClientDataSet).Active then if (Components[i] as TClientDataSet).UpdateStatus in [usDeleted, usInserted, usModified] then
begin (Components[i] as TClientDataSet).CancelUpdates; (Components[i] as TClientDataSet).Cancel; (Components[i] as TClientDataSet).Refresh; end;
LigarControlesNavegacao;
2ª Rotina : PageControlPadraoChanging (Sender: TObject;
var AllowChange: Boolean);
for i := 0 to Self.ComponentCount - 1 do if (Components[i] is TClientDataSet) then
if (Components[i] as TClientDataSet).Active then if (Components[i] as TClientDataSet).UpdateStatus in [usDeleted, usInserted, usModified] then
begin ShowMessage(´Você deve Salvar ou Cancelar os Dados antes de Mudar de Página´); AllowChange := False end;
Bom , deveria funcionar que nem relogio , o usuário não poderia mudar de página sem cancelar ou aplicar as mudanças , mas não funciona , o UpdateStatus não retorna ao state unModified com o cancelamento.
Alguém tem uma dica ou já passou por isto.
Desde já sou grato.
Emerson Azevedo
Curtir tópico
+ 0Posts
26/07/2005
Kotho
Gostei + 0
26/07/2005
Emerson Azevedo
Gostei + 0
26/07/2005
Kotho
Gostei + 0
26/07/2005
Emerson Azevedo
Obrigado pela atenção.
Entendi o que você propôs.
A opção .Changecount retorna 0 ( zero ) e eu já tinha tentado.
As outras opções tentadas foram .RevertRecord , .CancelUpdates , TCustomClientDataset.CancelUpdates e (TDataSetProvider.DataSet as TClientDataSet).Cancel.
Nenhuma delas libera o Status do CDS ou seja , retorna ele ao estado usUnModified.
Parece bug .
Temos que tentar outra opção ou sempre que precisarmos de loop de liberação , vamos ficar com pending = true Ok?
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)