atribuir uma procedure a um evento
bom amigos, eu tenho um programa estruturado da seguinte forma ...
datamodule contendo 3 adotables e 3 datasources ...
varias telas de cadastro em que eu me utilizo desses 6 componentes .. entao quando mudo de tela eu mudo as propriedades em tempo de execucao .... até aqui ok ...
em alguns forms, eu criei algumas procedures e atibui elas a alguns eventos dos datasources e das tabelas ... entao toda vez que o evento da tabela ou datasource é disparado as procedures sao executadas ...
estou utilizando forms mdi ...
por exemplo, quando eu crio um form filho, no evento oncreate eu coloco todas as rotinas de inicializacao como por exemplo as atribuicoes aos eventos .. exemplo abaixo ...
ao fechar o form nenhum erro ocorre ...
mas quando eu tento abrir o form de novo da um erro de violacao na memoria ....
perguntas ...
ao vincular as procedures aos eventos dos componentes, se eu fizer isso novamente pode gerar algum erro??
pq toda vez que eu crio o form os eventos serao vinculados aos componentes do datamodule ...
qual a maneira correta de se liberar o form filho da memoria quando é fechado ...???
estou usando a seguinte maneira ...
no evento onclose
aguardo respostas ...
[]s
datamodule contendo 3 adotables e 3 datasources ...
varias telas de cadastro em que eu me utilizo desses 6 componentes .. entao quando mudo de tela eu mudo as propriedades em tempo de execucao .... até aqui ok ...
em alguns forms, eu criei algumas procedures e atibui elas a alguns eventos dos datasources e das tabelas ... entao toda vez que o evento da tabela ou datasource é disparado as procedures sao executadas ...
estou utilizando forms mdi ...
por exemplo, quando eu crio um form filho, no evento oncreate eu coloco todas as rotinas de inicializacao como por exemplo as atribuicoes aos eventos .. exemplo abaixo ...
// inicializacao tb1 Dm.tb1.TableName:=´tbRegistroExportacao´; Dm.tb1.Active:= True; Dm.Ds1.OnStateChange:= ControlaBotoes; Dm.tb1.AfterPost:= InsereData;
ao fechar o form nenhum erro ocorre ...
mas quando eu tento abrir o form de novo da um erro de violacao na memoria ....
perguntas ...
ao vincular as procedures aos eventos dos componentes, se eu fizer isso novamente pode gerar algum erro??
pq toda vez que eu crio o form os eventos serao vinculados aos componentes do datamodule ...
qual a maneira correta de se liberar o form filho da memoria quando é fechado ...???
estou usando a seguinte maneira ...
no evento onclose
Action:= CaFree;
aguardo respostas ...
[]s
Rafael Gomes
Curtidas 0
Respostas
Rafael Gomes
12/01/2006
apenas completando ...
eu atribuindo procedures contidas em um form filho a eventos de uma tabela por exemplo ... ao fechar o form, essas procedures continuam vinculadas?? preciso libera-las de alguma forma????
pergunto isso pq como disse alterno 3 componentes adotable entre N tabelas do meu sistema ..
[]sss
eu atribuindo procedures contidas em um form filho a eventos de uma tabela por exemplo ... ao fechar o form, essas procedures continuam vinculadas?? preciso libera-las de alguma forma????
pergunto isso pq como disse alterno 3 componentes adotable entre N tabelas do meu sistema ..
[]sss
GOSTEI 0
Bruno Belchior
12/01/2006
Está ocorrendo erro, porque ao tentar acessar a tabela novamente a mesma está referenciando os seus eventos à um procedimento que foi liberado da memória quando seu formulário foi liberado... o que se deve fazer é no Destructor do seu formulário atribuir [b:4c554da464]nil[/b:4c554da464] as propriedades (eventos) dos DataSet´s...Você pode sobrescrever o destructor do Formulário para isso ou usar o evento [b:4c554da464]OnDestroy[/b:4c554da464] ou até mesmo o [b:4c554da464]OnClose[/b:4c554da464] do formulário...
Dm.Ds1.OnStateChange:= nil; Dm.tb1.AfterPost:= nil
GOSTEI 0
Rafael Gomes
12/01/2006
obrigado amigo, eu estava fazendo do modo errado entao ...
se eu fizer isso, estou limpando a variavel inteira??
abraços!!
Ds1:= nil
se eu fizer isso, estou limpando a variavel inteira??
abraços!!
GOSTEI 0
Bruno Belchior
12/01/2006
[quote:0103c2a547=´Rafael Gomes´]obrigado amigo, eu estava fazendo do modo errado entao ...
se eu fizer isso, estou limpando a variavel inteira??
abraços!![/quote:0103c2a547]Se você fizer isso você não vai destruir o objeto DS1, você pode chamar o seu método [b:0103c2a547]Free[/b:0103c2a547] (que internamente chama o destructor) de depois finalmente atribuir [b:0103c2a547]nil[/b:0103c2a547] a esse objeto, ou simplistemente chamar o método que foi inserido no delphi 5, [b:0103c2a547]FreeAndNil[/b:0103c2a547], e passar como parâmetro o objeto a ser destruido, você deve atribuir [b:0103c2a547]nil[/b:0103c2a547] ao evento que você citou acima, só lembrando que eventos são também propriedades (tando que aparecem no dfm do formulário)...
Ds1:= nil
se eu fizer isso, estou limpando a variavel inteira??
abraços!![/quote:0103c2a547]Se você fizer isso você não vai destruir o objeto DS1, você pode chamar o seu método [b:0103c2a547]Free[/b:0103c2a547] (que internamente chama o destructor) de depois finalmente atribuir [b:0103c2a547]nil[/b:0103c2a547] a esse objeto, ou simplistemente chamar o método que foi inserido no delphi 5, [b:0103c2a547]FreeAndNil[/b:0103c2a547], e passar como parâmetro o objeto a ser destruido, você deve atribuir [b:0103c2a547]nil[/b:0103c2a547] ao evento que você citou acima, só lembrando que eventos são também propriedades (tando que aparecem no dfm do formulário)...
GOSTEI 0