Problema com Matriz

Delphi

31/03/2011

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;




Luis Neto

Luis Neto

Curtidas 0

Respostas

Luis Neto

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
GOSTEI 0
Marco Salles

Marco Salles

31/03/2011

vc so usa o Array para  preencher um Memo???
GOSTEI 0
Luis Neto

Luis Neto

31/03/2011

Sim, apenas para preencher o memo. É um exercício para uma futura outra finalidade.
GOSTEI 0
Marco Salles

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
GOSTEI 0
Luis Neto

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

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;


GOSTEI 0
Marco Salles

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
GOSTEI 0
Luis Neto

Luis Neto

31/03/2011

É verdade,

O Emerson está certíssimo. Vou alterar o código e ver no que dá.


GOSTEI 0
POSTAR