Fórum Ordenar consulta #366789

06/12/2008

0

E ai Galera! Sou novo no forum e to fazendo uma consulta onde o usuario digita num edit e vai filtrando os nomes de acordo com o nome digitado, com esse codigo:

ClientDataSet1.Close;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.ADD(´select * from PRESTADOR WHERE NOME LIKE ´´´ + Edit1.Text + ´¬´´´);
ClientDataSet1.Open;

porém to ordenando os campos ao clicar no Title do DBGrid. Os erros(ClientDataSet1: Index ´NOME´ not found ou ClientDataSet1: Index ´COD_PRESTADOR´ not found-de acordo com o campo ordendo) acontece quando ordeno uma coluna qualquer e tento digitar no edit pra pesquisar, se alguem puder ajudar. Essa é a função q to usando:

procedure OrdenaDataSetGrid(var CDS: TClientDataSet; Column: TColumn; var dbgPrin: TDBGrid);
const
idxDefault = ´DEFAULT_ORDER´;
var
strColumn : string;
i : integer;
bolUsed : boolean;
idOptions : TIndexOptions;
begin

strColumn := idxDefault;

if Column.Field.FieldKind in [fkCalculated, fkLookup, fkAggregate] then
Exit;

if Column.Field.DataType in [ftBlob, ftMemo] then
Exit;

for i := 0 to dbgPrin.Columns.Count -1 do
dbgPrin.Columns[i].Title.Font.Style := [];

bolUsed := (Column.Field.FieldName = CDS.IndexName);

CDS.IndexDefs.Update;
for i := 0 to CDS.IndexDefs.Count - 1 do
begin
if CDS.IndexDefs.Items[i].Name = Column.Field.FieldName then
begin
strColumn := Column.Field.FieldName;
case (CDS.IndexDefs.Items[i].Options = [ixDescending]) of
true : idOptions := [];
false : idOptions := [ixDescending];
end;
end;
end;

if (strColumn = idxDefault) or (bolUsed) then
begin
if bolUsed then
CDS.DeleteIndex(Column.Field.FieldName);
try
CDS.AddIndex(Column.Field.FieldName, Column.Field.FieldName, idOptions, ´´, ´´, 0);
strColumn := Column.Field.FieldName;
except
if bolUsed then
strColumn := idxDefault;
end;
end;

try
CDS.IndexName := strColumn;
Column.Title.Font.Style := [fsbold];
except
CDS.IndexName := idxDefault;
end;
end;


Ednilson Campos

Ednilson Campos

Responder

Posts

06/12/2008

Silveriosepulveda

Cara, olha só, tem uma forma muito mais fácil de ordenar, usa a propriedade IndexFildeNames do ClientDataSet, ex.:
No evento OnTitleClick do DBGrid você põe:
ClientDataSet.IndexFieldNames := Collum.FieldName;
ai ele ordena automaticamente, de repente isso resolva.
espero que tenha ajudado, pois também sou novato no fórum.


Responder

Gostei + 0

06/12/2008

Ednilson Campos

Cara deu certo,foi rapido uai. Com sua dica troquei uma uma função por linha de código valew msm. flw brigadão!


Responder

Gostei + 0

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

Aceitar