Fórum Problema com campos agregados e reordenação de dados. #366103
12/11/2008
0
Dentro de alguns de meus clientDataSets utilizo de campos agregados.
Até ai tudo bem, eles mostram os dados certos até a hora que mando reordenar os ClientDatasets.
Para reordenar o ClientDataSet utilizo o evento OnTitleClick dos meus dbGrids com a seguinte rotina.
procedure tFrm.DbGridTitleClick(Column: TColumn); var indice: string; existe: boolean; clientdataset_idx: tclientdataset; begin if Column.Grid.DataSource.DataSet is TClientDataSet then begin clientdataset_idx := TClientDataset(Column.Grid.DataSource.DataSet); if clientdataset_idx.IndexFieldNames = Column.FieldName then begin indice := AnsiUpperCase(Column.FieldName+´_INV´); try clientdataset_idx.IndexDefs.Find(indice); existe := true; except existe := false; end; if not existe then with clientdataset_idx.IndexDefs.AddIndexDef do begin Name := indice; Fields := Column.FieldName; Options := [ixDescending]; end; clientdataset_idx.IndexName := indice; end else clientdataset_idx.IndexFieldNames := Column.FieldName; end; end;
Quando faço essa reordenação os totais somados nos campos agregados ou duplicam ou zeram, somente voltando ao normal quando do um close e um open no meu ClientDataSet.
Alguém saberia me explicar um método de contornar isso?
Agradeço desde já atenciosamente Vitor Araújo Alcântara
Vitor Alcantara
Curtir tópico
+ 0Posts
13/11/2008
Vitor Alcantara
Gostei + 0
13/11/2008
Joaoshi
ClientDataSet.IndexName := ´´;
Parece que não tem nada a ver né?
Espero ter ajudado.
Gostei + 0
14/11/2008
Vitor Alcantara
Gostei + 0
14/11/2008
Vitor Alcantara
Garimpando pela internet achei esse tópico [url]http://qc.codegear.com/wc/qcmain.aspx?d=1712[/url] da onde retirei esse procedimento
type TCrackCDS = class(TCustomClientDataSet); procedure ResetAggFieldsAndAggs(CDS:TClientDataSet); var i: integer; Agg: TAggregate; begin // do the AggFields ... for i := 0 to CDS.AggFields.Count - 1 do begin Agg := (CDS.AggFields[i] as TAggregateField).Handle; if (Agg <> nil) and Agg.Active then begin Agg.Active := False; Agg.Active := True; end; end; // do the Aggs ... for i := 0 to CDS.Aggregates.Count - 1 do begin Agg := CDS.Aggregates[i]; if Agg.Active then begin Agg.Active := False; Agg.Active := True; end; end; TCrackCDS(CDS).DataEvent(deRecordChange, 0); end;
Só que após reindexar o meu clientdataset eu disparo o evento ResetAggFieldsAndAggs(MeuDataSet), as vezes ele mostra o resultado no meu DbText e as vezes ele oculta.
Pelo menos ele não ta mais dando o valor errado.
Alguém ai teria alguma idéia de como contornar isso?
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)