Fórum Erro no AfterScroll #339996
06/04/2007
0
Bom, to encontrando um problema no meu software, e espero que possam me ajudar.
Eu tenho 3 formulários interligados:
Títulos - Edições - Histórias.
Só posso entrar no form de Edições através de um Título, e no de História através de uma Edição.
Bom, no form do Títulos, coloquei alguns eventos no OnAfterScroll, e um deles conta quantas edições eu tenho pra esse Título.
Até aí tudo bem, da pra entrar no Form de Edições e navegar normal, e no form de Edições também tem alguns eventos no OnAfterScroll, pra mostrar alguns dados identados, como Mês e Ano de publicação, que são números (ex. Mês 01, ano 2007, para aparecer Janeiro/2007).
O problema ocorre quando eu saio desse form de edições e tento navegar pelos títulos denovo, ele da erro.
Eu descobri que o erro tá na solicitação abaixo:
DmDados.ClientEdicoesNacionais.Close; With DmDados.SqlEdicoesNacionais do begin close; CommandText := ´Select * From TB_EDICOES_NACIONAIS where FKCOD_TITULO_NACIONAL= ´ + DmDados.ClientTitulosNacionaisPKCOD_TITULO_NACIONAL.AsString; open; end; DmDados.ClientEdicoesNacionais.Open; FrmVerTitulosNacionais.LbNumeroEdicoesResp.Caption := IntToStr(DmDados.ClientEdicoesNacionais.RecordCount);
Sempre que ele faz isso acima, pra listar o número de Edições pra um Título, ele acaba entrando tb no OnAfterScroll do compomente das Edições, e aí da erro pq ele nao acha os componentes que estao no Form de Edição, que foi fechado.
O estranho é que, antes de entrar no form de edições, isso funciona perfeitamente, ele me diz quantas edições tem para o título, só depois, entrando e saindo, ele dá esse erro pois nao acha os componentes do form Edições.
Como eu poderia contornar isso?
Grato pela ajuda.
Aersoftware
Curtir tópico
+ 0Posts
10/04/2007
Aersoftware
Gostei + 0
10/04/2007
Djjunior
no create de um desses forms vc ´anexa´ uma função OnAfterScroll de uma query de um data module
tipo dmxxx.suaQuery.AfterScroll = procedimento(DataSet: TDataSet);
ai qdo vc fecha o form a query fica sem ter como executar esse código.
erro de access violantion.
ou
o evento afterScroll da sua query está fazendo referencias a um form que não existe mais.
ai bem vc pode fazer:
1) passar essa query do datamodule pros forms ou
2) ao fechar o form colocar o afterscroll da query como null (ou nil não lembro)
bem acho que é isso....
Gostei + 0
10/04/2007
Aersoftware
Vou testar, o que é estranho é que ele só dá esse problema quando realizo essa consulta. Se eu nao fizer ela, funciona normal. Não sei se é pq quando ´Abro´ o Client de edições ele faz automaticamente o AfterScroll..
Gostei + 0
10/04/2007
Aersoftware
DmDados.ClientEdicoesNacionais.Close; With DmDados.SqlEdicoesNacionais do begin close; CommandText := ´Select * From TB_EDICOES_NACIONAIS where FKCOD_TITULO_NACIONAL= ´ + DmDados.ClientTitulosNacionaisPKCOD_TITULO_NACIONAL.AsString; open; end; DmDados.ClientEdicoesNacionais.Open; DmDados.ClientEdicoesNacionais.AfterScroll := Nil; FrmVerTitulosNacionais.LbNumeroEdicoesResp.Caption := IntToStr(DmDados.ClientEdicoesNacionais.RecordCount);
Coloquei o ´Nil´ no AfterScroll e funcionou. Valeu djjunior, abração.
Gostei + 0
10/04/2007
Aersoftware
Gostei + 0
11/04/2007
Djjunior
procedure meuScroll(DataSet: TDataSet);
begin
//
end;
no OnCreate do form set o after pra essa procedure:
no create do form set o After
dmxxx.suaQuery.AfterScroll := meuScroll;
e no close:
dmxxx.suaQuery.AfterScroll := nil;
Gostei + 0
11/04/2007
Aersoftware
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)