problemas com array
Ola Pessoal.
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
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
Curtidas 0
Respostas
Edilcimar
21/04/2005
coloque
for i := 1 to 50 do
lab[i] := ´´;
for i := 1 to 50 do
lab[i] := ´´;
GOSTEI 0
Michael
21/04/2005
Olá!
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!
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
Claudiocjr
21/04/2005
Grato pela colaboração de todos.
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
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
Massuda
21/04/2005
1o Como faria para limpar uma array que criei para
lançar tLabel´s nela?
Não entendi o que você quis dizer com ´lançar´... será que você poderia explicar melhor?2o. Como faria para criar esta array Dinamica:
Faça algo assim: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
Claudiocjr
21/04/2005
Eu criei a array assim
Lab : array[1..50] of TLabel ;
Dai fiz referencias a ela
Lab[i].Caption := ´Teste´;
Lab[i].Name := ´Teste´ ;
etc...
Grato
Claudio
Lab : array[1..50] of TLabel ;
Dai fiz referencias a ela
Lab[i].Caption := ´Teste´;
Lab[i].Name := ´Teste´ ;
etc...
Grato
Claudio
GOSTEI 0
Massuda
21/04/2005
Eu criei a array assim
Lab : array[1..50] of TLabel ;
Esses labels que vão no array... eles já existem no form (foram criados na IDE) ou você cria eles dinamicamente?GOSTEI 0
Marcelo Saviski
21/04/2005
Num array dinamico de strings vc tb poderia usar o [color=green:63f42692ab]Finalize(Vetor)[/color:63f42692ab] para limpa-lo
GOSTEI 0
Claudiocjr
21/04/2005
Crio eles dinamicamente
GOSTEI 0
Massuda
21/04/2005
Crio eles dinamicamente
Segue o exemplo (não testei)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