Erro no AfterScroll
Olá pessoal, tudo bem? Espero que sim.
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:
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.
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
Curtidas 0
Respostas
Aersoftware
06/04/2007
up :oops:
GOSTEI 0
Djjunior
06/04/2007
Bem se entendi bem, o que pode estar acontencendo é que:
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....
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
Aersoftware
06/04/2007
Tipo assim?
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..
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;
[b:0ebff39cf1]DmDados.ClientEdicoesNacionais.AfterScroll := Null[/b:0ebff39cf1]
FrmVerTitulosNacionais.LbNumeroEdicoesResp.Caption := IntToStr(DmDados.ClientEdicoesNacionais.RecordCount);
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
Aersoftware
06/04/2007
Opa, enquanto eu enviava o post acima fiz o teste e funcionou perfeitamente.. ficou assim:
Coloquei o ´Nil´ no AfterScroll e funcionou. Valeu djjunior, abração.
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
Aersoftware
06/04/2007
Ops, agora que eu notei, depois que faço isso, o AfterScroll nao funciona nem quando abro form seguinte. Como faço pra ele ´sair do Nil´ na hora de abrir o form desejado?
GOSTEI 0
Djjunior
06/04/2007
Crie uma função tipo AfterScroll no seu form tipo:
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;
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
Aersoftware
06/04/2007
Perfeito djjunior, muito obrigado. Funcinou legal. Abraços.
GOSTEI 0