Erro ao Fechar Aplicação
Pessoal, estou com um problema com matrizes que ainda não consegui identificar o erro, é o seguinte:
tenho uma tabela com dois campos
Nome da Tabela: Mestre
Campos: QTDE_SEGMENTOS
MEDIDA
Minha intenção é criar um array dinâmico com n linhas e duas colunas, a quantidade de linhas é obtida pelo numero dos registros da tabela Mestre, e alimentado com um loop para se obter os valores dos registros. Coloquei um memo para ter certeza que a matriz está sendo alimentada. A aplicação funciona, mas quando é encerrada ela libera um erro fatal com a mensagem "RUNTIME ERROR 216 AT 0040342A", segue o código abaixo para vocês testarem
var
Linha : array of array of Integer;
NumRegistros, I : Integer;
begin
NumRegistros:=Form1.CDS_Mestre.RecordCount;
SetLength(Linha,NumRegistros,2);
Memo1.Clear;
I:=0;
CDS_Mestre.First;
while not CDS_Mestre.Eof do
begin
Linha[I,1]:=Form1.CDS_MestreQTDE_SEGMENTOS.AsInteger;
Linha[I,2]:=Form1.CDS_MestreMEDIDA.AsInteger;
memo1.Lines.Append(inttostr(Linha[I,2]));
I:=I+1;
CDS_Mestre.Next;
end;
Agradeço qualquer ajuda.
tenho uma tabela com dois campos
Nome da Tabela: Mestre
Campos: QTDE_SEGMENTOS
MEDIDA
Minha intenção é criar um array dinâmico com n linhas e duas colunas, a quantidade de linhas é obtida pelo numero dos registros da tabela Mestre, e alimentado com um loop para se obter os valores dos registros. Coloquei um memo para ter certeza que a matriz está sendo alimentada. A aplicação funciona, mas quando é encerrada ela libera um erro fatal com a mensagem "RUNTIME ERROR 216 AT 0040342A", segue o código abaixo para vocês testarem
var
Linha : array of array of Integer;
NumRegistros, I : Integer;
begin
NumRegistros:=Form1.CDS_Mestre.RecordCount;
SetLength(Linha,NumRegistros,2);
Memo1.Clear;
I:=0;
CDS_Mestre.First;
while not CDS_Mestre.Eof do
begin
Linha[I,1]:=Form1.CDS_MestreQTDE_SEGMENTOS.AsInteger;
Linha[I,2]:=Form1.CDS_MestreMEDIDA.AsInteger;
memo1.Lines.Append(inttostr(Linha[I,2]));
I:=I+1;
CDS_Mestre.Next;
end;
Agradeço qualquer ajuda.
Luis Neto
Curtidas 0
Respostas
André Silveira
28/03/2011
Nessa parte ao invés de:
Linha[I,1]:=Form1.CDS_MestreQTDE_SEGMENTOS.AsInteger;
Linha[I,2]:=Form1.CDS_MestreMEDIDA.AsInteger;
memo1.Lines.Append(inttostr(Linha[I,2]));
I:=I+1;
CDS_Mestre.Next;
não seria:
Linha[I,0]:=Form1.CDS_MestreQTDE_SEGMENTOS.AsInteger;
Linha[I,1]:=Form1.CDS_MestreMEDIDA.AsInteger;
memo1.Lines.Append(inttostr(Linha[I,1]));
I:=I+1;
CDS_Mestre.Next;
Lembre-se de que nos vetores o primeiro item é o 0.
Linha[I,1]:=Form1.CDS_MestreQTDE_SEGMENTOS.AsInteger;
Linha[I,2]:=Form1.CDS_MestreMEDIDA.AsInteger;
memo1.Lines.Append(inttostr(Linha[I,2]));
I:=I+1;
CDS_Mestre.Next;
não seria:
Linha[I,0]:=Form1.CDS_MestreQTDE_SEGMENTOS.AsInteger;
Linha[I,1]:=Form1.CDS_MestreMEDIDA.AsInteger;
memo1.Lines.Append(inttostr(Linha[I,1]));
I:=I+1;
CDS_Mestre.Next;
Lembre-se de que nos vetores o primeiro item é o 0.
GOSTEI 0
Luis Neto
28/03/2011
Acho que não, colega. Veja bem se eu consigo explicar. A variável I é atribuida o valor inicial 0, então no primeiro loop a matriz Linha[0,1], isto é, a linha 0 e coluna 1 recebe a QTDE_SEGMENTOS, e a Linha[0,2], linha 0 e coluna 2 recebe o valor da MEDIDA. e o loop segue até o fim do dataset. Não vejo erro aí.
I:=0;
CDS_Mestre.First;
while not CDS_Mestre.Eof do
begin
Linha[I,1]:=Form1.CDS_MestreQTDE_SEGMENTOS.AsInteger;
Linha[I,2]:=Form1.CDS_MestreMEDIDA.AsInteger;
memo1.Lines.Append(inttostr(Linha[I,2]));
I:=I+1;
CDS_Mestre.Next;
end;
I:=0;
CDS_Mestre.First;
while not CDS_Mestre.Eof do
begin
Linha[I,1]:=Form1.CDS_MestreQTDE_SEGMENTOS.AsInteger;
Linha[I,2]:=Form1.CDS_MestreMEDIDA.AsInteger;
memo1.Lines.Append(inttostr(Linha[I,2]));
I:=I+1;
CDS_Mestre.Next;
end;
GOSTEI 0
André Silveira
28/03/2011
Rapaz fiz o teste aqui e deve começar os dois com o valor zero, ou seja:
Linha [0,0] e Linha[0,1] é o primeiro elemento da matriz.
Pois do jeito que você fez ele dá erro por estouro de memória, coloca do jeito que eu te falei e faz o teste.
Linha [0,0] e Linha[0,1] é o primeiro elemento da matriz.
Pois do jeito que você fez ele dá erro por estouro de memória, coloca do jeito que eu te falei e faz o teste.
GOSTEI 0
Luis Neto
28/03/2011
Caraca, parceiro. Você está certíssimo, rs..rs..
Valeu, obrigado
Valeu, obrigado
GOSTEI 0
Luis Neto
28/03/2011
Como é que se finaliza um post aqui no Fórum?
GOSTEI 0