Fórum Problema com Matriz #398547

31/03/2011

0

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

Responder

Posts

31/03/2011

Luis Neto

Corrigindo,

A tabela está preenchida assim

                     MEDIDA        QTDESEGMENTOS
Registro 1 :   803                    7
Registro 2 :   503                    7
Registro 3 :   203                    7
Responder

Gostei + 0

31/03/2011

Marco Salles

vc so usa o Array para  preencher um Memo???
Responder

Gostei + 0

31/03/2011

Luis Neto

Sim, apenas para preencher o memo. É um exercício para uma futura outra finalidade.
Responder

Gostei + 0

31/03/2011

Marco Salles

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
Responder

Gostei + 0

31/03/2011

Luis Neto

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. 
Responder

Gostei + 0

01/04/2011

Emerson Nascimento

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;


Responder

Gostei + 0

01/04/2011

Marco Salles

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
Responder

Gostei + 0

01/04/2011

Luis Neto

É verdade,

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar