GARANTIR DESCONTO

Fórum UpdateStatus #289470

26/07/2005

0

Ola Amigos.
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

Emerson Azevedo

Responder

Posts

26/07/2005

Kotho

Tente usar ClientDataSet.ChangeCount... que retorna a quantidade de alterações constantes no log...


Responder

Gostei + 0

26/07/2005

Emerson Azevedo

Ja tentei , não retorna nada pois não tem alteraçao no cahe , mas o UpdateStatus continua como usInserted , estranho né , tente ai , coloque dois Qry , 2 Dsp , 2 CDS , altere o estado do Detalhe , chame o metodo cancel e teste o UpdateStatus , ele vai permanecer alterado ( mesmo que vc chame o metodo cancel pelo nome do CDS , no caso do for i.... da na mesma) deve ser bug . Preciso saber como liberar o UpdateStatus diretamente , talvez passando pelo ancestrau ( TCustomClientDataset ).[/i]


Responder

Gostei + 0

26/07/2005

Kotho

Você não entendeu o que eu quiz dizer... use o ChangeCount na sua função para verificar se tem alterações pendentes...


Responder

Gostei + 0

26/07/2005

Emerson Azevedo

Caro Amigo.
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?


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar