Olá galera, nesta Quick Tips irei mostrar como descobrir o State de um DataSet (ClientDataSet, por exemplo), o State seria o estado em que o DataSet se encontra, veja os tipos definidos :

  • TDataSetState
    • dsInactive
    • dsBrowse
    • dsEdit
    • dsInsert
    • dsSetKey
    • dsCalcFields
    • dsFilter
    • dsNewValue
    • dsOldValue
    • dsCurValue
    • dsBlockRead
    • dsInternalCalc
    • dsOpening

Agora como descobrir o State que se encontra o DataSet ? Já ouviram falar ou já usaram a unit TypInfo, nela temos uma function GetEnumName(TypeInfo: PTypeInfo; Value: Integer): string;, onde esta retorna a string representada pelo Enumerado declarado, no caso TDataSetState.

Vamos a construção do Exemplo.

  • Adicione ;
    • 1 ClientDataset, CDSState ( Construí um XML, porém nada lhe impede de usar uma base própria )
    • 1 DataSource, DSState
    • 1 DBGrid
    • 1 DBNavigator
Exemplo
Exemplo.

Agora iremos dar uses em TypInfo, e logo em seguida criar uma function RetornaEstado


        function TFrmPrincipal.RetornaEstado(DataSet: TDataSet): String;

        begin

        Result := Format('Estado: %s', [GetEnumName(TypeInfo(TDataSetState),

        Ord(DataSet.State))]);

        end;
        

Nossa function já esta pronta, vamos agora usar a mesma, geralmente usamos o evento AfterScrol (ClientDataSet), onde os State do DataSet é modificado quando o mesmo entra em Edição, Inserção, e por ai vai.

  • CDSState : AfterScroll

        procedure TFrmPrincipal.CDSStateAfterScroll(DataSet: TDataSet);

        begin

        Caption := RetornaEstado(CDSState);

        end;
        

Fico por aqui e na próxima Quick Tips espero que tenham gostado e peço que mandem e-mail com sugestões para as Quick Tips.

Um abraço