erro de index no dbgrid indexando
ola estou com o seguinte erro tenho uma rotina de index orderm o dbgrid
ela me da o seguinte erro index does not exist
vou passar a funca e o erro de tela
a rotina de index e esta
procedure Tctpc0501.DBGrid1TitleClick(Column: TColumn);
var
IndexDef : TIndexDef;
intIndex : integer;
strIndexName : string;
blnDescending : boolean;
begin
if Assigned(OldColumn) then
OldColumn.Title.Color := DBGrid1.FixedColor;
Column.Title.Color := $00408080;
OldColumn := Column;
blnDescending := False;
strIndexName := 'TEMP' + Column.Field.FieldName;
intIndex := dtm_forn.cdsfornecedor.IndexDefs.IndexOf(strIndexName);
//Recupera o numero do índice através do nome
if dtm_forn.cdsfornecedor.IndexName = strIndexName then
begin
// Se o indice escolhido já é o ativo
// muda pra descendente
IndexDef := dtm_forn.cdsfornecedor.IndexDefs.Find(strIndexName);
//método Find: Retorna
//o nome do indice ativo
blnDescending:=IndexDef.DescFields = '';
//Verifica se o indexDef.DescFields do índice é nulo
end; if intIndex >= 0 then
begin
// Se existir um índice para
//este campo, deletá-lo
dtm_forn.cdsfornecedor.DeleteIndex(strIndexName);
dtm_forn.cdsfornecedor.IndexDefs.Delete(intIndex);
end;
e o erro de tela
var
IndexDef : TIndexDef;
intIndex : integer;
strIndexName : string;
blnDescending : boolean;
begin
if Assigned(OldColumn) then
OldColumn.Title.Color := DBGrid1.FixedColor;
Column.Title.Color := $00408080;
OldColumn := Column;
blnDescending := False;
strIndexName := 'TEMP' + Column.Field.FieldName;
intIndex := dtm_forn.cdsfornecedor.IndexDefs.IndexOf(strIndexName);
//Recupera o numero do índice através do nome
if dtm_forn.cdsfornecedor.IndexName = strIndexName then
begin
// Se o indice escolhido já é o ativo
// muda pra descendente
IndexDef := dtm_forn.cdsfornecedor.IndexDefs.Find(strIndexName);
//método Find: Retorna
//o nome do indice ativo
blnDescending:=IndexDef.DescFields = '';
//Verifica se o indexDef.DescFields do índice é nulo
end; if intIndex >= 0 then
begin
// Se existir um índice para
//este campo, deletá-lo
dtm_forn.cdsfornecedor.DeleteIndex(strIndexName);
dtm_forn.cdsfornecedor.IndexDefs.Delete(intIndex);
end;
e o erro de tela
Jorge Barbosa
Curtidas 0
Respostas
Wesley Yamazack
12/01/2010
Olá amigo,
O que você esta querendo fazer é incluir um index que não existe no seu DataSet. Veja se este exemplo não lhe ajuda
Exemplo :
procedure TFrmCiente.DBPadraoTitleClick(Column: TColumn);
var
I: word;
begin
for I:=0 to DBGrid1.Columns.Count-1 do
begin
TDBGrid(Column.Grid).Columns.Items[I].Title.Caption:=
Trim(AnsiReplaceStr(TDBGrid(Column.Grid).Columns.Items[I].Title.Caption,'>>',''));
end;
Column.Title.Caption:= Column.Title.Caption + ' >>';
TClientDataSet (TDBGrid(Column.Grid).DataSource.DataSet).IndexFieldNames := Column.FieldName; { Index que você clicou, ou seja a coluna que você clicou possui um FieldName, e por ele que você ordena }
end;
Estou a disposição. Para qualquer dúvida
Um abraço
Wesley Y
O que você esta querendo fazer é incluir um index que não existe no seu DataSet. Veja se este exemplo não lhe ajuda
Exemplo :
procedure TFrmCiente.DBPadraoTitleClick(Column: TColumn);
var
I: word;
begin
for I:=0 to DBGrid1.Columns.Count-1 do
begin
TDBGrid(Column.Grid).Columns.Items[I].Title.Caption:=
Trim(AnsiReplaceStr(TDBGrid(Column.Grid).Columns.Items[I].Title.Caption,'>>',''));
end;
Column.Title.Caption:= Column.Title.Caption + ' >>';
TClientDataSet (TDBGrid(Column.Grid).DataSource.DataSet).IndexFieldNames := Column.FieldName; { Index que você clicou, ou seja a coluna que você clicou possui um FieldName, e por ele que você ordena }
end;
Estou a disposição. Para qualquer dúvida
Um abraço
Wesley Y
GOSTEI 0
Jorge Barbosa
12/01/2010
oi amigo
sua funcao e legal mas so falto inverter de
coloca em acedente e descendente
assuim realmente ela vai me ajudar
se vc repar o que eu te passei faz isso
ser que vc poderia me
orientar como fazer
nesta funcao
GOSTEI 0
Wesley Yamazack
12/01/2010
Olá amigo, segue abaixo o código para asc e desc.
procedure TFrmUF.DBGrid1TitleClick(Column: TColumn);
var
OrdenaDescAnt:Boolean;
Begin
If Not TClientDataSet(Column.Grid.DataSource.DataSet).Active Then
Abort;
// O índice já está em uso
TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.update;
if (Column.Field.FieldName=TClientDataSet(Column.Grid.DataSource.DataSet).IndexName) then
begin
OrdenaDescAnt := (ixDescending in TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.Find(Column.Field.FieldName).Options);
TClientDataSet(Column.Grid.DataSource.DataSet).DeleteIndex(Column.Field.FieldName);
end;
if OrdenaDescAnt then
TClientDataSet(Column.Grid.DataSource.DataSet).AddIndex(Column.Field.FieldName, Column.Field.FieldName, [], '', '', 0)
else
TClientDataSet(Column.Grid.DataSource.DataSet).AddIndex(Column.Field.FieldName, Column.Field.FieldName, [ixdescending], '', '', 0);
TClientDataSet(Column.Grid.DataSource.DataSet).IndexName := Column.Field.FieldName;
end;
Veja se resolve seu problema. Lembrando que funciona para qualquer DBGrid. Pois não tem dataset engessado
Um abraço
Wesley Y
procedure TFrmUF.DBGrid1TitleClick(Column: TColumn);
var
OrdenaDescAnt:Boolean;
Begin
If Not TClientDataSet(Column.Grid.DataSource.DataSet).Active Then
Abort;
// O índice já está em uso
TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.update;
if (Column.Field.FieldName=TClientDataSet(Column.Grid.DataSource.DataSet).IndexName) then
begin
OrdenaDescAnt := (ixDescending in TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.Find(Column.Field.FieldName).Options);
TClientDataSet(Column.Grid.DataSource.DataSet).DeleteIndex(Column.Field.FieldName);
end;
if OrdenaDescAnt then
TClientDataSet(Column.Grid.DataSource.DataSet).AddIndex(Column.Field.FieldName, Column.Field.FieldName, [], '', '', 0)
else
TClientDataSet(Column.Grid.DataSource.DataSet).AddIndex(Column.Field.FieldName, Column.Field.FieldName, [ixdescending], '', '', 0);
TClientDataSet(Column.Grid.DataSource.DataSet).IndexName := Column.Field.FieldName;
end;
Veja se resolve seu problema. Lembrando que funciona para qualquer DBGrid. Pois não tem dataset engessado
Um abraço
Wesley Y
GOSTEI 0
Jorge Barbosa
12/01/2010
esta me dando agora o seguinte erro
name not unique in this context.
quando se click em varias colunas
GOSTEI 0
Wesley Yamazack
12/01/2010
Olá amigo,
segue abaixo a alteração.
procedure TFrmUF.DBGrid1TitleClick(Column: TColumn);
var
OrdenaDescAnt:Boolean;
Idx:TIndexDef;
Begin
If Not TClientDataSet(Column.Grid.DataSource.DataSet).Active Then
Abort;
// O índice já está em uso
TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.update;
if (Column.Field.FieldName=TClientDataSet(Column.Grid.DataSource.DataSet).IndexName) then
begin
OrdenaDescAnt := (ixDescending in TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.Find(Column.Field.FieldName).Options);
TClientDataSet(Column.Grid.DataSource.DataSet).DeleteIndex(Column.Field.FieldName);
end;
if(TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.IndexOf(Column.Field.FieldName)) > -1 then
Idx := TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.Find(Column.Field.FieldName)
else
idx := nil;
if OrdenaDescAnt then
begin
if(Idx = nil)then
TClientDataSet(Column.Grid.DataSource.DataSet).AddIndex(Column.Field.FieldName, Column.Field.FieldName, [], '', '', 0)
else
idx.Options := idx.Options - [ixdescending];
end
else
begin
if(Idx = nil)then
TClientDataSet(Column.Grid.DataSource.DataSet).AddIndex(Column.Field.FieldName, Column.Field.FieldName, [ixdescending], '', '', 0)
else
idx.Options := idx.Options + [ixdescending];
end;
TClientDataSet(Column.Grid.DataSource.DataSet).IndexName := Column.Field.FieldName;
end;
Um abraço
Wesley Y
segue abaixo a alteração.
procedure TFrmUF.DBGrid1TitleClick(Column: TColumn);
var
OrdenaDescAnt:Boolean;
Idx:TIndexDef;
Begin
If Not TClientDataSet(Column.Grid.DataSource.DataSet).Active Then
Abort;
// O índice já está em uso
TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.update;
if (Column.Field.FieldName=TClientDataSet(Column.Grid.DataSource.DataSet).IndexName) then
begin
OrdenaDescAnt := (ixDescending in TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.Find(Column.Field.FieldName).Options);
TClientDataSet(Column.Grid.DataSource.DataSet).DeleteIndex(Column.Field.FieldName);
end;
if(TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.IndexOf(Column.Field.FieldName)) > -1 then
Idx := TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.Find(Column.Field.FieldName)
else
idx := nil;
if OrdenaDescAnt then
begin
if(Idx = nil)then
TClientDataSet(Column.Grid.DataSource.DataSet).AddIndex(Column.Field.FieldName, Column.Field.FieldName, [], '', '', 0)
else
idx.Options := idx.Options - [ixdescending];
end
else
begin
if(Idx = nil)then
TClientDataSet(Column.Grid.DataSource.DataSet).AddIndex(Column.Field.FieldName, Column.Field.FieldName, [ixdescending], '', '', 0)
else
idx.Options := idx.Options + [ixdescending];
end;
TClientDataSet(Column.Grid.DataSource.DataSet).IndexName := Column.Field.FieldName;
end;
Um abraço
Wesley Y
GOSTEI 0
Jorge Barbosa
12/01/2010
oi Wesley
to testando mas parece que resolveu o problema
seria pedir muito se vc me passa so
a linha para mudar de cor a columa
para saber qual coluna esta
ordernando
obrigado
GOSTEI 0
Jorge Barbosa
12/01/2010
oi Wesley
to testando mas parece que resolveu o problema
seria pedir muito se vc me passa so
a linha para mudar de cor a columa
para saber qual coluna esta
ordernando
obrigado
GOSTEI 0
Wesley Yamazack
12/01/2010
Olá amigo,
Infelizmente não poderei responder esta sua duvida neste chamado, pedirei que abra um novo chamado, e pode fazer solicitação para que eu responda o próximo chamado. OK ?
Pois para cada dúvida um chamado, tudo bem ?
Um abraço
Wesley Y
Infelizmente não poderei responder esta sua duvida neste chamado, pedirei que abra um novo chamado, e pode fazer solicitação para que eu responda o próximo chamado. OK ?
Pois para cada dúvida um chamado, tudo bem ?
Um abraço
Wesley Y
GOSTEI 0