Fórum Consultas SQL com IBQuery #244542

27/07/2004

0

Galera!!!
Tenho um Data Module com várias consultas e tabelas. De um tempo para cá, percebo que as consultas não estão funcionando como deveriam. Verifico que as consultas retornam apenas a primeira linha da tabela consultada.
Verifico a quantidade de linhas encontradas através do RecordCount.
Porém, se eu vinculo essa consulta a um DBGrid com o DataSource, a consulta funciona numa boa. Tenho 3 consultas que estão assim, e em telas e tabelas diferentes. Alguém sabe por que isso acontece?

Valeu força!!

JR.


Jrjoliv2003

Jrjoliv2003

Responder

Posts

27/07/2004

Vinicius2k

JR.,

Verificar o RecordCount da IBQuery não lhe dará o resultado esperado pois ela traz para o buffer (´Fetch´) os registros à medida que são necessários... se no momento apenas um registro é necessário ela retornará o RecordCount como 1...
Quando vc a ligar num DBGrid ela irá executar o Fetch necessário para exibição no Grid, mas ainda assim o RecordCount é ´falso´ pq representará o número de linhas no grid até que vc faça a rolagem até o último registro...
Para ler o RecordCount de forma correta execute IBQuery.FecthAll; após o Open, mas eu não aconselho a fazer isso pq em bases grandes vc estará ´matando´ a performance da aplicação...

Veja este tópico : http://delphiforum.icft.com.br/forum/viewtopic.php?t=45198

Espero ter ajudado..
T+


Responder

Gostei + 0

27/07/2004

Jrjoliv2003

A situação é a seguinte:

Peço para consultar dados de uma turma de acordo com uma condição. O resultado da consulta irá atualizar dados dessas turmas. Se eu vinculo com um DbGrid ele acha as turmas e atualiza normalmente. Se tiro do dbgrid ele só acha a primeira linha. Muito estranho!!!

JR.


Responder

Gostei + 0

27/07/2004

Vinicius2k

Poste parte do seu código então...
T+


Responder

Gostei + 0

27/07/2004

Jrjoliv2003

Não entendi!!
JR. :roll:


Responder

Gostei + 0

27/07/2004

Vinicius2k

Se vc postar aqui uma a instrução SQL da Query e/ou o código onde vc faz a leitura que só está retornando uma turma, talvez possamos lhe ajudar melhor... :wink:
Ou vc já solucionou o problema com o FetchAll?

T+


Responder

Gostei + 0

27/07/2004

Jrjoliv2003

A desculpe !! A consulta é simples:

tenho um IBQuery com a seguinte instrução:
select Mod_Turma, Mod_HoraI, Mod_HoraF from ModTurma where Mod_Turma:=turma

Passagem do parâmetro:
data.IBQTurma.close;
data.IBRTumra.ParamByName(´turma´).value:=rxdblookupcombo2.keyvalue;
data.IBRTurma.open;

Para Verificar a Quantidadede Linhas encontradas:
temp:=inttostr(data.IBQTurma.RecordCount);

Se vinculo com dbgrid o DataSource dessa Query ele acha tudo de acordo com a condição. Se não vinculo ele pega apenas 1 linha, a primeira que encontra.

Valeu a força!!

JR.


Responder

Gostei + 0

27/07/2004

Vinicius2k

Então,

Como eu disse :
data.IBQTurma.close; 
data.IBRTurma.ParamByName(´turma´).value:=rxdblookupcombo2.keyvalue; 
data.IBRTurma.open; 
data.IBRTurma.FetchAll;


Desta forma o RecordCount vai ter a leitura da quantidade correta de registros retornados...

T+


Responder

Gostei + 0

27/07/2004

Jrjoliv2003

Cara vc arrebentou na explicação naquele tópico que vc me passou o link. Muito bom!!

Eu vou testar tudo que foi abordado e o q vc me passou agora. Mais tarde eu te retorno o resultado!!

Valeu a força!!

JR.


Responder

Gostei + 0

27/07/2004

Jrjoliv2003

Tudo OK. Sua Dica foi certeira!!!!

coloquei:
data.ibqmod_turma.last;
temp:=data.ibqmod_turma.recordcount;
data.ibqmod_turma.first; {Para verificar linha a linha de acordo com o meu código}

Valeu mais uma vez!!!

JR.


Responder

Gostei + 0

27/07/2004

Vinicius2k

OK.
Mas evite fazer isso em tabelas com grande volume de dados pois vc pode ter problemas de performance... prefira sempre ´select count´ quando precisar contar registros...

T+


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar