Como saber quantos registro tenho dentro do array?

Delphi

26/10/2005

Criei um array da seguinte forma

Registros :array[1..50, 1..5] of String;

só que na maioria dos casos não preencho os 50 linhas, como fazer um FOR para ir até o ultimo registro encontrado?


Wgm8

Wgm8

Curtidas 0

Respostas

Massuda

Massuda

26/10/2005

Você poderia percorrer o array de trás para frente (for...downto...) para localizar a primeira string não vazia (o que equivale a localizar a última string não vazia).


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

26/10/2005

crie o array de forma diferente:

i: integer; // variável auxiliar
registros: array of array [1..5] of String;
assim será criado um array dinâmico que será incrementado quando necessário.

por exemplo, se você preenche o array com os dados de uma tabela:
setlength(registros,0); // inicializa o array

with tabela do
begin
  first;
  while not eof do
  begin
    if "registroatendecondicao" then
    begin
      setlength(registros,length(registros)+1); // incrementa o array
      i := high(registros);
      registros[i,1] := fieldbyname(´campo1´).asstring;
      registros[i,2] := fieldbyname(´campo2´).asstring;
      registros[i,3] := fieldbyname(´campo3´).asstring;
      registros[i,4] := fieldbyname(´campo4´).asstring;
      registros[i,5] := fieldbyname(´campo5´).asstring;
    end;

    next;
  end;
end;


assim o array terá somente os registros desejados, além de não ser limitado a 50.
mas se você quiser limitar a 50 registros, faça:
setlength(registros,0); // inicializa o array

with tabela do
begin
  first;
  while not eof do
  begin
    if "registroatendecondicao" then
    begin
      setlength(registros,length(registros)+1); // incrementa o array
      i := high(registros);
      registros[i,1] := fieldbyname(´campo1´).asstring;
      registros[i,2] := fieldbyname(´campo2´).asstring;
      registros[i,3] := fieldbyname(´campo3´).asstring;
      registros[i,4] := fieldbyname(´campo4´).asstring;
      registros[i,5] := fieldbyname(´campo5´).asstring;
    end;

    next;

    if length(registros)=50 then // aqui é colocado um limite que,
      break;                     // se atingido, sai do laço (while)
  end;
end;


daí, para saber quantos registros há, basta fazer:
numreg := length(registros);


GOSTEI 0
POSTAR