| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
redmar Aprendiz

Registrado: Quarta-Feira, 24 de Setembro de 2008 Mensagens: 114
|
Enviada: Sex Jan 20, 2012 12:09 pm Assunto: [Resolvido] Erro contando registros de uma query - AdoQUERY1 |
|
|
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 |
|
 |
JCMF Profissional


Registrado: Quarta-Feira, 28 de Abril de 2010 Mensagens: 578 Localização: Recife, PE
|
Enviada: Sex Jan 20, 2012 12:12 pm Assunto: Re: Erro contando registros de uma query - AdoQUERY1.RECORDCOUNT |
|
|
| 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 |
|
 |
redmar Aprendiz

Registrado: Quarta-Feira, 24 de Setembro de 2008 Mensagens: 114
|
Enviada: Sex Jan 20, 2012 12:41 pm Assunto: |
|
|
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 |
|
 |
wagnercabrera Aprendiz


Registrado: Terça-Feira, 10 de Janeiro de 2012 Mensagens: 155 Localização: Arapongas - PR
|
Enviada: Sex Jan 20, 2012 12:50 pm Assunto: |
|
|
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 |
|
 |
redmar Aprendiz

Registrado: Quarta-Feira, 24 de Setembro de 2008 Mensagens: 114
|
Enviada: Sex Jan 20, 2012 1:01 pm Assunto: |
|
|
| o problema é que é tudo na mesma form, abrindo um não fecha o outro? |
|
| Voltar ao Topo |
|
 |
wagnercabrera Aprendiz


Registrado: Terça-Feira, 10 de Janeiro de 2012 Mensagens: 155 Localização: Arapongas - PR
|
Enviada: Sex Jan 20, 2012 1:10 pm Assunto: |
|
|
| 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 |
|
 |
JCMF Profissional


Registrado: Quarta-Feira, 28 de Abril de 2010 Mensagens: 578 Localização: Recife, PE
|
Enviada: Sex Jan 20, 2012 2:09 pm Assunto: |
|
|
| 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 |
|
 |
redmar Aprendiz

Registrado: Quarta-Feira, 24 de Setembro de 2008 Mensagens: 114
|
Enviada: Sex Jan 20, 2012 2:43 pm Assunto: |
|
|
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 |
|
 |
JCMF Profissional


Registrado: Quarta-Feira, 28 de Abril de 2010 Mensagens: 578 Localização: Recife, PE
|
Enviada: Sex Jan 20, 2012 3:01 pm Assunto: |
|
|
| 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 |
|
 |
redmar Aprendiz

Registrado: Quarta-Feira, 24 de Setembro de 2008 Mensagens: 114
|
Enviada: Sex Jan 20, 2012 4:35 pm Assunto: |
|
|
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 |
|
 |
JCMF Profissional


Registrado: Quarta-Feira, 28 de Abril de 2010 Mensagens: 578 Localização: Recife, PE
|
Enviada: Sex Jan 20, 2012 4:38 pm Assunto: |
|
|
| 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 |
|
 |
redmar Aprendiz

Registrado: Quarta-Feira, 24 de Setembro de 2008 Mensagens: 114
|
Enviada: Sex Jan 20, 2012 4:46 pm Assunto: |
|
|
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 |
|
 |
wagnercabrera Aprendiz


Registrado: Terça-Feira, 10 de Janeiro de 2012 Mensagens: 155 Localização: Arapongas - PR
|
Enviada: Sex Jan 20, 2012 4:55 pm Assunto: |
|
|
| 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 |
|
 |
JCMF Profissional


Registrado: Quarta-Feira, 28 de Abril de 2010 Mensagens: 578 Localização: Recife, PE
|
Enviada: Sex Jan 20, 2012 4:57 pm Assunto: |
|
|
| 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 |
|
 |
JCMF Profissional


Registrado: Quarta-Feira, 28 de Abril de 2010 Mensagens: 578 Localização: Recife, PE
|
Enviada: Sex Jan 20, 2012 4:58 pm Assunto: |
|
|
| 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 |
|
 |
|