Erro no AfterScroll

Delphi

06/04/2007

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:

        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

Aersoftware

Curtidas 0

Respostas

Aersoftware

Aersoftware

06/04/2007

up :oops:


GOSTEI 0
Djjunior

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....


GOSTEI 0
Aersoftware

Aersoftware

06/04/2007

Tipo assim?

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

Aersoftware

06/04/2007

Opa, enquanto eu enviava o post acima fiz o teste e funcionou perfeitamente.. ficou assim:

        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

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

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;


GOSTEI 0
Aersoftware

Aersoftware

06/04/2007

Perfeito djjunior, muito obrigado. Funcinou legal. Abraços.


GOSTEI 0
POSTAR