Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Thiago Delalibera

Problema com Loop =/

Recommended Posts

Declaro a variável X como Inteira

 

X, Contagem: Integer;

 

então em uma procedure eu faço:

DM.ADOQuery.Close;

DM.ADOQuery.SQL.Clear;

DM.ADOQuery.SQL.Append('SELECT COUNT(ie) AS NumGia FROM tblGia');

DM.ADOQuery.Open;

Contagem:=DM.ADOQuery.FieldByName('NumGia').Value;

 

// A VARIAVEL Contagem recebe o valor correto do numero de registros da minha consulta, então eu faço:

 

DM.Query.Close;

DM.ADOQuery.SQL.Clear;

DM.ADOQuery.SQL.Append('SELECT IE, RazãoSocial FROM tblContribuinte ORDER BY IE ASC');

DM.ADOQuery.Open;

DM.ADOQuery.First;

X:=0;

while(X < Contagem) do

begin

Contribuinte[X]:=DM.ADOQuery.FieldByName('IE').Value;

DM.ADOQuery.Next;

X:=X+1;

end;

 

Quando executo, recebo um EAccess Violation, ele marca a linha do meu incremento X:=X+1, ja debuguei de todas as formas e nao achei onde to errando... entao deve ter alguma forma a qual nao tentei ainda..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando você declara

Contagem:=DM.ADOQuery.FieldByName('NumGia').Value;

voce esta atribuindo o valor de CONTAGEM igual ao NUMERO DA GUIA.

 

Talvez o que você queira não é atribuir a CONTAGEM o número de registros da Tabela?

Se for tal declaração deveria ser:

Contagem:=DM.ADOQuery.RecordCount;

 

T+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente fazer o seguinte:

 

DM.Query.Close;
DM.ADOQuery.SQL.Clear;
DM.ADOQuery.SQL.Append('SELECT IE, RazãoSocial FROM tblContribuinte ORDER BY IE ASC');
DM.ADOQuery.Open;

//Se retornar algum registro, executa 
If not DM.ADOQuery.IsEmpty then
begin
   DM.ADOQuery.First;
   X:=0;

  while not DM.ADOQuery.Eof do //Varre até o fim dos registros da query
  begin
	  try
		  Contribuinte[X]:=DM.ADOQuery.FieldByName('IE').Value;
	  except
		   Showmessage('Ops... deu erro na atribuição de valores aqui!!');
	  end;
	  DM.ADOQuery.Next;
	  X:=X+1;
  end;
end;

Mas tem uma coisa.... o que é o Contribuinte[X]? Um array? Se for, verifique se o seu select não está estourando o máximo de registros que ele comporta (exemplo: o array é de 100 elementos e está tentando gravar 101 nele).

 

Outro cuidado que deve tomar é neste trecho:

 

Contribuinte[X]:=DM.ADOQuery.FieldByName('IE').Value;

Se o valor retornado for nulo e o seu array Contribuinte[X] for de inteiros, provavelmente vai dar algum erro aqui... por isso coloquei o comando dentro de um try except ok?

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.