Erro ao Listar um SubGrupo a Partir de Um Grupo

Delphi

05/01/2006

E aí pessoal, tudo bem? Espero que sim.

Estou com um probleminha. Tenho um Form onde tenho 2 campos LookUp. Um me lista Grupos e o outro me lista SubGrupos linkados a esses grupos. Até aí tudo bem, consigo fazer normal, mas quando seleciono um SubGrupo, o program tem que listar todas revistas (que estão em outra tabela) que tenham aquele grupo e subgrupo selecionado. E aí da o erro, ele dá uma mensagem dizendo que não pode converter um campo Null pra Integer. Só que nenhum desses campos está nulo. É obrigado ter um código ali.

O código que da o erro é esse:

  if DmDados.ClientRevNacionais.RecordCount <> 0 then
    begin
      if LkUpListaSubGrupos.Text <> ´´ then
        begin
          DmDados.ClientRevNacionais.Close;
          with DmDados.SqlRevNacionais do
            begin
              Close;
              CommandText :=
                ´Select * From TBREVNACIONAIS Where FKCOD_GRUPO =´
                +IntToStr(LkUpListaGrupos.KeyValue)
                + ´And FKCOD_SUBGRUPO= ´ +IntToStr(LkUpListaSubGrupos.KeyValue)
                + ´Order By NOMENUMERO´;
              Open;
            end;
          DmDados.ClientRevNacionais.Open;
          StbVerNacionais.Panels[0].Text := ´Total de Revistas: ´+ IntToStr(DmDados.ClientRevNacionais.RecordCount);
          Botoes;
        end;
    end;


É exatamente quando entra no Command Text que dá esse erro.

Outra dúvida rapida. Esse formulário é pra exibir as revistas que estão na TbRevistas. Só que estou exibindo elas seguindo o critério de Grupos e SubGrupos, por isso eu tenho esses 2 LookUps. Mas quando eu abro esse formulário, ele já me lista todas revistas da tabela. Como eu faço pra deixar esse formulário limpo, sem nenhuma informação (inclusive nos LookUps) pra, somente quando selecionado o Grupo e SubGrupo, me listas as informações?

Grato pela ajuda.. Abraços..



Allan Elias Ramos :wink:


Aersoftware

Aersoftware

Curtidas 0

Respostas

Caninha51

Caninha51

05/01/2006

Dê um espaço antes do AND e do ORDER.

  if DmDados.ClientRevNacionais.RecordCount <> 0 then 
    begin 
      if LkUpListaSubGrupos.Text <> ´´ then 
        begin 
          DmDados.ClientRevNacionais.Close; 
          with DmDados.SqlRevNacionais do 
            begin 
              Close; 
              CommandText := 
                ´Select * From TBREVNACIONAIS Where FKCOD_GRUPO =´ 
                +IntToStr(LkUpListaGrupos.KeyValue) 
                + ´ And FKCOD_SUBGRUPO= ´ +IntToStr(LkUpListaSubGrupos.KeyValue) 
                + ´ Order By NOMENUMERO´; 
              Open; 
            end; 
          DmDados.ClientRevNacionais.Open; 
          StbVerNacionais.Panels[0].Text := ´Total de Revistas: ´+ IntToStr(DmDados.ClientRevNacionais.RecordCount); 
          Botoes; 
        end; 
    end; 



GOSTEI 0
Aersoftware

Aersoftware

05/01/2006

Não adiantou. O estranho também é que, deu esse erro logo no primeiro registro e agora quando abro o form de visualização, o LookUp de Grupos já vem marcado com o Grupo da 1ª revista. Era pra ele ficar sem nada.

Ah, acho que me esqueci de dizer, eu to usando um Form pra vizualização outro pra cadastro. Quando clico em Novo, ele abre o form de cadastro e só fecha se eu clicar em Salvar ou Cancelar.



Allan Elias Ramos :cry:


GOSTEI 0
Caninha51

Caninha51

05/01/2006

o LookUp de Grupos já vem marcado com o Grupo da 1ª revista. Era pra ele ficar sem nada.


Joga zero pro KeyValue do lookup.



O problema eh q em algum momento o KeyValue tah null.
Ai quando ele vai converter null de inteiro pra string dar pau.
Tenta fazer um typecast pra ver se rola...
  if DmDados.ClientRevNacionais.RecordCount <> 0 then 
    begin 
      if LkUpListaSubGrupos.Text <> ´´ then 
        begin 
          DmDados.ClientRevNacionais.Close; 
          with DmDados.SqlRevNacionais do 
            begin 
              Close; 
              CommandText := 
                ´Select * From TBREVNACIONAIS Where FKCOD_GRUPO =´ 
                +IntToStr(Integer(LkUpListaGrupos.KeyValue)) 
                + ´And FKCOD_SUBGRUPO= ´ +IntToStr(Integer(LkUpListaSubGrupos.KeyValue)) 
                + ´Order By NOMENUMERO´; 
              Open; 
            end; 
          DmDados.ClientRevNacionais.Open; 
          StbVerNacionais.Panels[0].Text := ´Total de Revistas: ´+ IntToStr(DmDados.ClientRevNacionais.RecordCount); 
          Botoes; 
        end; 
    end; 



flw


GOSTEI 0
Aersoftware

Aersoftware

05/01/2006

Oi pessoal, demorei um pouco, mas voltei..

Ainda não consegui fazer funcionar.. eu apaguei todo o código e refiz, mas nao consigo tirar esse erro. Pra se ter uma idéia, ta assim:

[b:5566ca4016]No On Activate pra listar todos Grupos Nacionais:[/b:5566ca4016]

  DmDados.ClientGrupos.Close;
  with DmDados.SqlGrupos do
    begin
      close;
      CommandText :=
        ´Select * from TBGRUPOS where TIPOGRUPO =´
        +quotedstr(´Nacionais´)
        +´order by NOMEGRUPO´;
      open;
    end;
  DmDados.ClientGrupos.Open;



[b:5566ca4016]No OnActivate pra não listar nenhuma revista enquanto não tiver Grupo e SubGrupo selecionado:[/b:5566ca4016]

  DmDados.ClientRevNacionais.Close;
  with DmDados.SqlRevNacionais do
    begin
      close;
      CommandText :=
        ´Select * from TBREVNACIONAIS where FKCOD_GRUPO =0´
        +´and FKCOD_SUBGRUPO=0´
        +´order by NOMENUMERO´;
      open;
    end;
  DmDados.ClientRevNacionais.Open;



[b:5566ca4016]No OnLkUpGruposClose, pra listar todos SubGrupos daquele Grupo selecionado:[/b:5566ca4016]

  if LkUpListaGrupos.Text <> ´´ then
    begin
      DmDados.ClientSubGrupos.Close;
      with DmDados.SqlSubGrupos do
        begin
          close;
          CommandText :=
            ´Select * from TBSUBGRUPOS where FKCOD_GRUPO =´
            +IntToStr(LkUpListaGrupos.KeyValue)
            +´order by NOMESUBGRUPO´;
          open;
        end;
      DmDados.ClientSubGrupos.Open;
    end;
  LkUpListaSubGrupos.Enabled := True;



Esses 3 acima funcionam, e fazem perfeitamente seu papel. Até estranho pq este último pega o KeyValue de um LookUp e funciona, agora esse próximo:

[b:5566ca4016]No OnLkUpListaSubGruposClose pra listar as revistas:[/b:5566ca4016]
  if LkUpListaSubGrupos.Text <> ´´ then
    begin
      DmDados.ClientRevNacionais.Close;
      with DmDados.SqlRevNacionais do
        begin
          close;
          CommandText :=
            ´Select * from TBREVNACIONAIS where FKCOD_GRUPO =´
            +IntToStr(LkUpListaGrupos.KeyValue)
            +´and FKCOD_SUBGRUPO =´
            +IntToStr(LkUpListaSubGrupos.KeyValue)
            +´order by NOMENUMERO´;
          open;
        end;
      DmDados.ClientRevNacionais.Open;
    end;


Fiz uns testes há pouco e descobri que esse erro se dá quando ele pega o código pelo KeyValue do LookUp, pq se eu tirar essa parte e colocar um valor específiico pra cada um (como por exemplo 1), ele me lista certinho as revistas.

Não sei, sinceramente pq ele ´acha´ que tem um campo nulo, onde não tem.. :cry:



Allan Elias Ramos :cry:


GOSTEI 0
Aersoftware

Aersoftware

05/01/2006

Esqueci de dizer, estou usando o Delphi 2005 com Firebird. Eu tinha esse código feito pelo Delphi 7. Será que tem algo a ver isso?



Allan Elias Ramos :cry:


GOSTEI 0
Aersoftware

Aersoftware

05/01/2006

Eu tive pensando..

Tem alguma coisa errada aí, além do erro obvio. Pois ele diz que não pode converter um tipo Nulo em Inteiro. Além de não ter campo Nulo, o IntToStr não é pra transformar um tipo Inteiro em String?



Allan Elias Ramos


GOSTEI 0
POSTAR