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;
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
Curtir tópico
+ 0
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.
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
Clique aqui para fazer login e interagir na Comunidade :)