Fórum problemas com array #278319
21/04/2005
0
Estou com um problema em meu sistema que é o seguinte
Montei um form e declarei uma array-> Lab : array[1..50] of String;
Onde após a entrada de um codigo de Produto, é lançado nela
varios itens deste produto, quando vou pesquizar outro produto
limpo esta variavel assim
For i:=1 to 50 do freeandnil(lab[i]);
funcionam muito bem.
O problema é que quando saio do form destruindo com o comando
Release, e vou fazer uma nova consulta do Produto ele me da um
erro de violaçao apenas nesta linha onde esta o comando FOR
Caso alguem possa me ajudar ficarei muito agradecido
Claudio
Claudiocjr
Curtir tópico
+ 0Posts
21/04/2005
Edilcimar
for i := 1 to 50 do
lab[i] := ´´;
Gostei + 0
21/04/2005
Michael
O colega Edilcimar está correto. [b:c39d13cc41]FreeAndNil [/b:c39d13cc41]é uma procedure que chama o método Free de um objeto e em seguida atribui o valor nil para a sua variável. No seu caso, ele libera a array da memória. Então quando o formulário é aberto novamente, ele tenta achar a array em um endereço da memória q não existe mais. Daí Access Violation.
Use a dica dele para limpar as strings.
E para deixar a minha, gostaria de saber se o número de itens da sua matriz tem q ser mesmo 50. Se não, e vc estiver calculando para mais para comportar um certo número de itens, use uma matriz dinâmica (dynamic/open array).
Abraços!
Gostei + 0
22/04/2005
Claudiocjr
E Tenho mais duas perguntas neste caso
1o Como faria para limpar uma array que criei para
lançar tLabel´s nela?
2o. Como faria para criar esta array Dinamica:
Mais uma vez obrigado.
Claudio
Gostei + 0
22/04/2005
Massuda
var Lab: array of string; I: Integer; ... // ajusta o tamanho do array SetLength(Lab, 30); // adiciona alguma coisa no array for I := Low(Lab) to High(Lab) do Lab[I] := IntToStr(I); // limpa o array for I := Low(Lab) to High(Lab) do Lab[I] := ´´; // libera o array Lab := nil;
Gostei + 0
22/04/2005
Claudiocjr
Lab : array[1..50] of TLabel ;
Dai fiz referencias a ela
Lab[i].Caption := ´Teste´;
Lab[i].Name := ´Teste´ ;
etc...
Grato
Claudio
Gostei + 0
22/04/2005
Massuda
Gostei + 0
22/04/2005
Marcelo Saviski
Gostei + 0
22/04/2005
Claudiocjr
Gostei + 0
22/04/2005
Massuda
var Lab: array of TLabel; I: Integer; ... // ajusta o tamanho do array SetLength(Lab, 30); // cria os labels for I := Low(Lab) to High(Lab) do begin Lab[I] := TLabel.Create(Self); Lab[I].Parent := Self; // Lab[I].Name pode ficar em branco Lab[I].Top := ... ... end; // limpa o array for I := Low(Lab) to High(Lab) do Lab[I].Free; // ou FreeAndNil(Lab[I]) // libera o array Lab := nil;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)