ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

[Resolvido] Erro contando registros de uma query - AdoQUERY1
Ir à página 1, 2  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
redmar
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 24 de Setembro de 2008
Mensagens: 114

MensagemEnviada: Sex Jan 20, 2012 12:09 pm    Assunto: [Resolvido] Erro contando registros de uma query - AdoQUERY1 Responder com Citação

Fiz uma pesquisa que me da os registros com parte inicial do cnpj. O campo é do tipo varchar.

Fiz assim a pesquisa:

SELECT registro,NOME FROM tabeba WHERE data = now()
and cnpj LIKE '3192739%'

Preciso que conte os registros da query numa label, fiz assim:

AdoQUERY1.last;
AdoQUERY1.first;
LABEL1.CAPTION:=INTTOSTR(AdoQUERY1.RECORDCOUNT);

é ai que da erro, só funciona se tirar essa contagem da label
pior que preciso dessa label.


Editado pela última vez por redmar em Qui Jan 26, 2012 3:22 pm, num total de 2 vezes
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
JCMF
Profissional
Profissional


Registrado: Quarta-Feira, 28 de Abril de 2010
Mensagens: 578
Localização: Recife, PE

MensagemEnviada: Sex Jan 20, 2012 12:12 pm    Assunto: Re: Erro contando registros de uma query - AdoQUERY1.RECORDCOUNT Responder com Citação

redmar escreveu:
Fiz uma pesquisa que me da os registros com parte inicial do cnpj. O campo é do tipo varchar.

Fiz assim a pesquisa:

SELECT registro,NOME FROM tabeba WHERE data = now()
and cnpj LIKE '3192739%'

Preciso que conte os registros da query numa label, fiz assim:

AdoQUERY1.last;
AdoQUERY1.first;
LABEL1.CAPTION:=INTTOSTR(AdoQUERY1.RECORDCOUNT);

é ai que da erro, só funciona se tirar essa contagem da label
pior que preciso dessa label.

Caro amigo,

Não há necessidade de executar o Last e First no componente.
Lembre-se de realizar o método Open antes.

Após isso, basta realizar a chamada como vc fez para o label.

Código:
SELECT registro,NOME FROM tabeba WHERE data = now()
and cnpj LIKE '3192739%' 

AdoQUERY.Open;
LABEL1.CAPTION:=INTTOSTR(AdoQUERY1.RECORDCOUNT);
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário MSN Messenger
redmar
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 24 de Setembro de 2008
Mensagens: 114

MensagemEnviada: Sex Jan 20, 2012 12:41 pm    Assunto: Responder com Citação

Mano funcionou, Brigadão. Só tenho uma dúvida que acho que é um prob, agora, eu uso várias adoquery, no mesmo programa e da mesma forma varias label contando, vou ter q abrir as outras query tb?

Fiz asssim:

AdoQUERY3.last;
AdoQUERY3.first; //atualiza
LABEL7.CAPTION:=INTTOSTR(AdoQUERY3.RECORDCOUNT);

adoQuery4.Last;
adoQuery4.first;
Label9.caption := inttoStr(adoQuery4.recordcount);
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
wagnercabrera
Aprendiz
Aprendiz


Registrado: Terça-Feira, 10 de Janeiro de 2012
Mensagens: 155
Localização: Arapongas - PR

MensagemEnviada: Sex Jan 20, 2012 12:50 pm    Assunto: Responder com Citação

Que rolo hein...

Não sei qual a intenção, mas você terá que fazer a mesma coisa com as outras query!
_________________
DEVELOPER SENIOR D.E.L.P.H.I

Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
redmar
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 24 de Setembro de 2008
Mensagens: 114

MensagemEnviada: Sex Jan 20, 2012 1:01 pm    Assunto: Responder com Citação

o problema é que é tudo na mesma form, abrindo um não fecha o outro?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
wagnercabrera
Aprendiz
Aprendiz


Registrado: Terça-Feira, 10 de Janeiro de 2012
Mensagens: 155
Localização: Arapongas - PR

MensagemEnviada: Sex Jan 20, 2012 1:10 pm    Assunto: Responder com Citação

redmar escreveu:
o problema é que é tudo na mesma form, abrindo um não fecha o outro?



Claro que não.

1º Você pode deixar todas as Query abertas e fechar depois.

2º Só vai fechar todas se elas estiverem lincadas como um mestre datalhe.
_________________
DEVELOPER SENIOR D.E.L.P.H.I

Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
JCMF
Profissional
Profissional


Registrado: Quarta-Feira, 28 de Abril de 2010
Mensagens: 578
Localização: Recife, PE

MensagemEnviada: Sex Jan 20, 2012 2:09 pm    Assunto: Responder com Citação

redmar escreveu:
Mano funcionou, Brigadão. Só tenho uma dúvida que acho que é um prob, agora, eu uso várias adoquery, no mesmo programa e da mesma forma varias label contando, vou ter q abrir as outras query tb?

Fiz asssim:

AdoQUERY3.last;
AdoQUERY3.first; //atualiza
LABEL7.CAPTION:=INTTOSTR(AdoQUERY3.RECORDCOUNT);

adoQuery4.Last;
adoQuery4.first;
Label9.caption := inttoStr(adoQuery4.recordcount);

Sem problemas amigo, pode sim!
Mas, talvez seja mais interessante realizar uma única query conjugada para trazer esses registros não? Uma única consulta pode ser mais rápido que várias queries ao mesmo tempo.

Em SQL, vc pode definir uma coluna (um campo do select) como send uma subconsulta... nada mais é do que um select dentro de outro.

Pegando seu exemplo de query, poderíamos transformá-la nisso:
Código:
SELECT count(*) FROM tabela1 WHERE data = now() and cnpj LIKE '3192739%'

Desse jeito, vc pode realizar várias subconsultas em uma única instrução SQL...

Exemplo:
Código:
select ( SELECT count(*) as totalTabela1 FROM tabela1 WHERE data = now() and cnpj LIKE '3192739%' ) as totalTabela1,  ( SELECT count(*) as totalTabela2 FROM tabela2 WHERE data = now() and cnpj LIKE '3192739%' ) as totalTabela2


Assim, um único objeto ADOQuery poderá trazer todas as quantidades que vc precisa... Mas estude bem o caso e as consultas, para não fazer com que sua aplicação fique mais lenta.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário MSN Messenger
redmar
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 24 de Setembro de 2008
Mensagens: 114

MensagemEnviada: Sex Jan 20, 2012 2:43 pm    Assunto: Responder com Citação

Bom saber q não vou precisar fechar as query.

Mas n entendi uma select dentro da outra.

Nas minhas query cada uma tem um cnpj dif. Usando a mesma tabela, só muda a pesquisa.

Ex.: 1
SELECT registro,NOME FROM tabeba WHERE data = now()
and cnpj LIKE '3192739%'

Outro Ex.:
SELECT registro,NOME FROM PT_DEV WHERE data = now() and NOME LIKE '%CSB%' OR DOC1 LIKE '42225938%' and data = now()

Como vou usar uma select dentro de uma select e usar na label?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
JCMF
Profissional
Profissional


Registrado: Quarta-Feira, 28 de Abril de 2010
Mensagens: 578
Localização: Recife, PE

MensagemEnviada: Sex Jan 20, 2012 3:01 pm    Assunto: Responder com Citação

redmar escreveu:
Bom saber q não vou precisar fechar as query.

Mas n entendi uma select dentro da outra.

Nas minhas query cada uma tem um cnpj dif. Usando a mesma tabela, só muda a pesquisa.

Ex.: 1
SELECT registro,NOME FROM tabeba WHERE data = now()
and cnpj LIKE '3192739%'

Outro Ex.:
SELECT registro,NOME FROM PT_DEV WHERE data = now() and NOME LIKE '%CSB%' OR DOC1 LIKE '42225938%' and data = now()

Como vou usar uma select dentro de uma select e usar na label?

Segue exemplo amigo...

Código:
select ( SELECT count( * ) FROM tabela WHERE data = now() and cnpj LIKE '3192739%' ) as totalTabela,
       ( SELECT count( * ) FROM PT_DEV WHERE data = now() and NOME LIKE '%CSB%' OR DOC1 LIKE '42225938%' and data = now() ) as totalPT_DEV

ADOQuery.Open;
Label1.Caption := ADOQuery.FieldByName( 'totalTabela' ).AsInteger;
Label2.Caption := ADOQuery.FieldByName( 'totalPT_DEV' ).AsInteger;

Casa subconsulta fica dentro de parênteses e o seu resultado representa o campo da consulta maior ( o select de fora ).

Código:
select ( select campo from tabela1 ) as campo1, ( select campo from tabela2 ) as campo2

Nesse exemplo acima, seria como se vc estivesse fazendo exatamente isso:
Código:
select campo1, campo2
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário MSN Messenger
redmar
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 24 de Setembro de 2008
Mensagens: 114

MensagemEnviada: Sex Jan 20, 2012 4:35 pm    Assunto: Responder com Citação

Entendi, deve ser bem melhor mesmo que várias query, mas ta dando erro:

[Error] Unit1.pas(101): Undeclared identifier: 'select'
[Error] Unit1.pas(101): Missing operator or semicolon
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
JCMF
Profissional
Profissional


Registrado: Quarta-Feira, 28 de Abril de 2010
Mensagens: 578
Localização: Recife, PE

MensagemEnviada: Sex Jan 20, 2012 4:38 pm    Assunto: Responder com Citação

redmar escreveu:
Entendi, deve ser bem melhor mesmo que várias query, mas ta dando erro:

[Error] Unit1.pas(101): Undeclared identifier: 'select'
[Error] Unit1.pas(101): Missing operator or semicolon

Cole toda a sua query aqui para pdoermos ver o problema...
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário MSN Messenger
redmar
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 24 de Setembro de 2008
Mensagens: 114

MensagemEnviada: Sex Jan 20, 2012 4:46 pm    Assunto: Responder com Citação

select ( SELECT count( * ) FROM pt_dev WHERE data = now() and cnpj LIKE '3192739%' ) as totalValente,
( SELECT count( * ) FROM PT_DEV WHERE data = now() and NOME LIKE '%CSB%' OR DOC1 LIKE '42225938%' and data = now() ) as totaCSB;

ADOQuery2.Open;
Label4.Caption := ADOQuery2.FieldByName( 'totalTabela' ).AsInteger;
Label18.Caption := ADOQuery2.FieldByName( 'totalPT_DEV' ).AsInteger;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
wagnercabrera
Aprendiz
Aprendiz


Registrado: Terça-Feira, 10 de Janeiro de 2012
Mensagens: 155
Localização: Arapongas - PR

MensagemEnviada: Sex Jan 20, 2012 4:55 pm    Assunto: Responder com Citação

redmar escreveu:
select ( SELECT count( * ) FROM pt_dev WHERE data = now() and cnpj LIKE '3192739%' ) as totalValente,
( SELECT count( * ) FROM PT_DEV WHERE data = now() and NOME LIKE '%CSB%' OR DOC1 LIKE '42225938%' and data = now() ) as totaCSB;

ADOQuery2.Open;
Label4.Caption := ADOQuery2.FieldByName( 'totalTabela' ).AsInteger;
Label18.Caption := ADOQuery2.FieldByName( 'totalPT_DEV' ).AsInteger;



Ta faltando o From do primeiro Select.
_________________
DEVELOPER SENIOR D.E.L.P.H.I

Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
JCMF
Profissional
Profissional


Registrado: Quarta-Feira, 28 de Abril de 2010
Mensagens: 578
Localização: Recife, PE

MensagemEnviada: Sex Jan 20, 2012 4:57 pm    Assunto: Responder com Citação

redmar escreveu:
select ( SELECT count( * ) FROM pt_dev WHERE data = now() and cnpj LIKE '3192739%' ) as totalValente,
( SELECT count( * ) FROM PT_DEV WHERE data = now() and NOME LIKE '%CSB%' OR DOC1 LIKE '42225938%' and data = now() ) as totaCSB;

ADOQuery2.Open;
Label4.Caption := ADOQuery2.FieldByName( 'totalTabela' ).AsInteger;
Label18.Caption := ADOQuery2.FieldByName( 'totalPT_DEV' ).AsInteger;

Seguinte amigão..

O erro "Undeclared identifier: 'select'" é do Delphi, ou seja, essa instrução SQL precisa ser definida na propriedade do ADOQuery e não ficar exposta no seu código.

Com relação ao texto SQL, aparentemente está tudo certo.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário MSN Messenger
JCMF
Profissional
Profissional


Registrado: Quarta-Feira, 28 de Abril de 2010
Mensagens: 578
Localização: Recife, PE

MensagemEnviada: Sex Jan 20, 2012 4:58 pm    Assunto: Responder com Citação

wagnercabrera escreveu:
redmar escreveu:
select ( SELECT count( * ) FROM pt_dev WHERE data = now() and cnpj LIKE '3192739%' ) as totalValente,
( SELECT count( * ) FROM PT_DEV WHERE data = now() and NOME LIKE '%CSB%' OR DOC1 LIKE '42225938%' and data = now() ) as totaCSB;

ADOQuery2.Open;
Label4.Caption := ADOQuery2.FieldByName( 'totalTabela' ).AsInteger;
Label18.Caption := ADOQuery2.FieldByName( 'totalPT_DEV' ).AsInteger;



Ta faltando o From do primeiro Select.

O FROM do primeiro select não é correto pois os pseudo-campos provenientes das duas subconsultas não são originados de uma tabela real. =)
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Ir à página 1, 2  Próximo
Página 1 de 2

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB