Problema com Matriz
Boa noite pessoal,
Estou com um problema que ainda não identifiquei numa operação com Matriz, é o seguinte, eu tenho uma tabela em que um dos campos se chama QTDE_SEGMENTOS, entao eu quero preencher um Memo com os dados contidos no campo MEDIDA. A tabela esta preenchida assim:
MEDIDA QTDESEGMENTOS
Registro 1 : 803 7
Registro 1 : 503 7
Registro 1 : 203 7
O código abaixo faz esta operação, mas quando o programa é encerrado ele acusa um erro fatal.
procedure TForm1.Button7Click(Sender: TObject);
var
Matriz: array of integer;
A, NumReg: Integer;
begin
NumReg:=Form1.CDS_Mestre.RecordCount;
SetLength(Matriz,NumReg);
Memo1.Clear;
CDS_Mestre.First;
while not CDS_Mestre.Eof do
begin
for A:= 0 to Form1.CDS_MestreQTDE_SEGMENTOS.AsInteger-1 do
begin
Matriz[A]:= Form1.CDS_MestreMEDIDA.AsInteger;
Memo1.Lines.Add(inttostr(Matriz[A]));
end;
CDS_Mestre.Next;
end;
end;
Estou com um problema que ainda não identifiquei numa operação com Matriz, é o seguinte, eu tenho uma tabela em que um dos campos se chama QTDE_SEGMENTOS, entao eu quero preencher um Memo com os dados contidos no campo MEDIDA. A tabela esta preenchida assim:
MEDIDA QTDESEGMENTOS
Registro 1 : 803 7
Registro 1 : 503 7
Registro 1 : 203 7
O código abaixo faz esta operação, mas quando o programa é encerrado ele acusa um erro fatal.
procedure TForm1.Button7Click(Sender: TObject);
var
Matriz: array of integer;
A, NumReg: Integer;
begin
NumReg:=Form1.CDS_Mestre.RecordCount;
SetLength(Matriz,NumReg);
Memo1.Clear;
CDS_Mestre.First;
while not CDS_Mestre.Eof do
begin
for A:= 0 to Form1.CDS_MestreQTDE_SEGMENTOS.AsInteger-1 do
begin
Matriz[A]:= Form1.CDS_MestreMEDIDA.AsInteger;
Memo1.Lines.Add(inttostr(Matriz[A]));
end;
CDS_Mestre.Next;
end;
end;
Luis Neto
Curtidas 0
Respostas
Luis Neto
31/03/2011
Corrigindo,
A tabela está preenchida assim
MEDIDA QTDESEGMENTOS
Registro 1 : 803 7
Registro 2 : 503 7
Registro 3 : 203 7
A tabela está preenchida assim
MEDIDA QTDESEGMENTOS
Registro 1 : 803 7
Registro 2 : 503 7
Registro 3 : 203 7
GOSTEI 0
Marco Salles
31/03/2011
vc so usa o Array para preencher um Memo???
GOSTEI 0
Luis Neto
31/03/2011
Sim, apenas para preencher o memo. É um exercício para uma futura outra finalidade.
GOSTEI 0
Marco Salles
31/03/2011
A principio o erro que vc esta obtendo não tem nada a ver com o procedimento
tem mais coisas neste form do que o este método
de mais detalhes
tem mais coisas neste form do que o este método
de mais detalhes
GOSTEI 0
Luis Neto
31/03/2011
Tem detalhe nenhum não, colega. Se você criar uma tabela e colocar os campos MEDIDA E QTDE SEGMENTOS e seguir o código exatamente como está abaixo você verá o erro.
GOSTEI 0
Emerson Nascimento
31/03/2011
se eu entendi direito o código, acho que ocorre o erro porque você tem três registros, cria o array com 3 elementos, e depois tenta preencher 7 elementos no array.
procedure TForm1.Button7Click(Sender: TObject);
var
Matriz: array of integer;
A, NumReg: Integer;
begin
NumReg:=Form1.CDS_Mestre.RecordCount;
SetLength(Matriz,NumReg); <--- array criado com 3 elementos
Memo1.Clear;
CDS_Mestre.First;
while not CDS_Mestre.Eof do
begin
for A:= 0 to Form1.CDS_MestreQTDE_SEGMENTOS.AsInteger-1 do <--- serão 7 iterações, visto que o campo tem conteúdo 7
begin
Matriz[A]:= Form1.CDS_MestreMEDIDA.AsInteger; <-- aqui pode ocorrer um erro, pois não há 7 elementos
Memo1.Lines.Add(inttostr(Matriz[A]));
end;
CDS_Mestre.Next;
end;
end;
procedure TForm1.Button7Click(Sender: TObject);
var
Matriz: array of integer;
A, NumReg: Integer;
begin
NumReg:=Form1.CDS_Mestre.RecordCount;
SetLength(Matriz,NumReg); <--- array criado com 3 elementos
Memo1.Clear;
CDS_Mestre.First;
while not CDS_Mestre.Eof do
begin
for A:= 0 to Form1.CDS_MestreQTDE_SEGMENTOS.AsInteger-1 do <--- serão 7 iterações, visto que o campo tem conteúdo 7
begin
Matriz[A]:= Form1.CDS_MestreMEDIDA.AsInteger; <-- aqui pode ocorrer um erro, pois não há 7 elementos
Memo1.Lines.Add(inttostr(Matriz[A]));
end;
CDS_Mestre.Next;
end;
end;
GOSTEI 0
Marco Salles
31/03/2011
O Emerson esta correto. Mas o erro deveria apontar na excecução do procedimento e não depois na hora de
fechar . A não ser que vc não esteja executando direto no .exe e não pelo delphi
Mas de qualquer modo o emerson atentou mais para o codigo e reportou bem o erro
fechar . A não ser que vc não esteja executando direto no .exe e não pelo delphi
Mas de qualquer modo o emerson atentou mais para o codigo e reportou bem o erro
GOSTEI 0
Luis Neto
31/03/2011
É verdade,
O Emerson está certíssimo. Vou alterar o código e ver no que dá.
O Emerson está certíssimo. Vou alterar o código e ver no que dá.
GOSTEI 0