Index Out of Bounds (3)
Colegas..
Estou com um probleminhae não sei como resolver, já procurei aki e não achei nada..
É o seguinte : Tenho um Grid criado dinamicamente, pois ele é criado dentro de um componente (Senha), quando eu abro o client ligado ao datasource deste grid, chamo a seguinte rotina :
v_i := 0
l_grid.Columns.Clear;
for v_j := 0 to l_grid.DataSource.DataSet.FieldCount - 1 do
begin
l_grid.DataSource.DataSet.Fields[v_j].Visible := False;
end;
P_CreateColumn(l_grid, v_i, 15 ,´C_COD_CAMPO´, ´Código´, true,
taCenter, taCenter);
inc(v_i);
P_CreateColumn(l_grid, v_i, 7 ,´C_TABELA´, ´Tabela´, true,
taCenter, taCenter);
onde P_CreateColumn é
procedure TRELATORIO.P_CreateColumn(l_grid : TDBGrid; l_index, l_size : integer; l_campo,
l_desc : string; l_fixed : boolean; l_alinhamento_dados, l_alinhamento_titulo : TAlignment);
begin
l_grid.Columns.Add;
l_Grid.Columns.Items[l_index].FieldName := l_campo;
l_grid.Columns.Items[l_index].Field.DisplayWidth := l_size;
l_grid.Columns.Items[l_index].Field.DisplayLabel := l_desc;
l_grid.Columns.Items[l_index].Alignment := l_alinhamento_dados;
l_grid.Columns.Items[l_index].Title.Alignment := l_alinhamento_titulo;
if l_fixed then
begin
l_grid.Columns.Items[l_index].ReadOnly := true;
end;
end;
assim só mostro o quê quero (campos), o problema está quando edito este client, aí dou um close e um open no mesmo client..
retorna o erro : ´List index out of bounds(3)´;
mas só acontece quando dou um OPEN pela 2ª vez..
alguém sabe o quê está acontecendo??
sem mais
Agradeço a atenção de todos..
Cabelo
Estou com um probleminhae não sei como resolver, já procurei aki e não achei nada..
É o seguinte : Tenho um Grid criado dinamicamente, pois ele é criado dentro de um componente (Senha), quando eu abro o client ligado ao datasource deste grid, chamo a seguinte rotina :
v_i := 0
l_grid.Columns.Clear;
for v_j := 0 to l_grid.DataSource.DataSet.FieldCount - 1 do
begin
l_grid.DataSource.DataSet.Fields[v_j].Visible := False;
end;
P_CreateColumn(l_grid, v_i, 15 ,´C_COD_CAMPO´, ´Código´, true,
taCenter, taCenter);
inc(v_i);
P_CreateColumn(l_grid, v_i, 7 ,´C_TABELA´, ´Tabela´, true,
taCenter, taCenter);
onde P_CreateColumn é
procedure TRELATORIO.P_CreateColumn(l_grid : TDBGrid; l_index, l_size : integer; l_campo,
l_desc : string; l_fixed : boolean; l_alinhamento_dados, l_alinhamento_titulo : TAlignment);
begin
l_grid.Columns.Add;
l_Grid.Columns.Items[l_index].FieldName := l_campo;
l_grid.Columns.Items[l_index].Field.DisplayWidth := l_size;
l_grid.Columns.Items[l_index].Field.DisplayLabel := l_desc;
l_grid.Columns.Items[l_index].Alignment := l_alinhamento_dados;
l_grid.Columns.Items[l_index].Title.Alignment := l_alinhamento_titulo;
if l_fixed then
begin
l_grid.Columns.Items[l_index].ReadOnly := true;
end;
end;
assim só mostro o quê quero (campos), o problema está quando edito este client, aí dou um close e um open no mesmo client..
retorna o erro : ´List index out of bounds(3)´;
mas só acontece quando dou um OPEN pela 2ª vez..
alguém sabe o quê está acontecendo??
sem mais
Agradeço a atenção de todos..
Cabelo
Cabelo
Curtidas 0
Respostas
Jsaraujo
12/07/2004
Boa tarde,
este problema deve estar acontecendo pq quando vc abre a tabela pela segunda vez ela tenta carregar todos o campos e a grid não tem campos para todos eles daí o erro, então seria melhor a cada vez que vc abrir a tabela deverá realizar o mesmo procedimento que é feito quando a tabela é aberta pela 1º vez, ou seja, destruir a grid e cria-la novamente.
Espero ter sido útil...
este problema deve estar acontecendo pq quando vc abre a tabela pela segunda vez ela tenta carregar todos o campos e a grid não tem campos para todos eles daí o erro, então seria melhor a cada vez que vc abrir a tabela deverá realizar o mesmo procedimento que é feito quando a tabela é aberta pela 1º vez, ou seja, destruir a grid e cria-la novamente.
Espero ter sido útil...
GOSTEI 0
Lucas Silva
12/07/2004
Que título mais criativo esse seu heim, cabelo. :lol:
No proximo post seu ae, coloca um título que explique a sua dúvida!
T+,
Lucas!
No proximo post seu ae, coloca um título que explique a sua dúvida!
T+,
Lucas!
GOSTEI 0
Nildo
12/07/2004
Cabelo, eu editei o título dessa mensagem, por favor não use títulos fora do contexto da mensagem...
GOSTEI 0
Rômulo Barros
12/07/2004
Fiz uns teste aqui em casa e, tirando as linhas abaixo não dá erro.
[color=red:8ce29cf485]//l_grid.Columns.Items[l_index].Field.DisplayWidth := l_size;
//l_grid.Columns.Items[l_index].Field.DisplayLabel := l_desc;[/color:8ce29cf485]
[color=red:8ce29cf485]//l_grid.Columns.Items[l_index].Field.DisplayWidth := l_size;
//l_grid.Columns.Items[l_index].Field.DisplayLabel := l_desc;[/color:8ce29cf485]
GOSTEI 0
Cabelo
12/07/2004
Caros Colegas
Muito obrigado pelas dicas, mas a dica que melhor serviu foi a do jsaraujo..
mesmo assim obrigado a todos..
Já ao amigo Lucas só tenho a dizer, que se vc deseja ser um moderador, não é assim que será o caminho, já ao amigo Nildo, posso dizer que muito obrigado pela dica..
sem mais
Cabelo
Muito obrigado pelas dicas, mas a dica que melhor serviu foi a do jsaraujo..
mesmo assim obrigado a todos..
Já ao amigo Lucas só tenho a dizer, que se vc deseja ser um moderador, não é assim que será o caminho, já ao amigo Nildo, posso dizer que muito obrigado pela dica..
sem mais
Cabelo
GOSTEI 0