Guest - Fabi - Postado Janeiro 23, 2007 Denunciar Share Postado Janeiro 23, 2007 Olá, sou eu novamente.Pessoal, estou tentando fazer uma consulta no SQL Server utilizando o componente TQuery da seguinte forma: with DM_PDOX.CAIXAGER do begin Close; SQL.Clear; SQL.Add('SELECT COUNT(*) FROM('); SQL.Add('SELECT CX.COO, CX.SEQUENCIAL FROM CAIXAGERAL CX, ADMCARTAO ADM '); SQL.Add('WHERE CX.CODADMCARTAO = ADM.CODADMCARTAO '); SQL.Add(') qtde'); Open; End;Mas ele me retorna o seguinte erro: "Invalid use of keyword. Token SELECT".Eu Imagino que tenha alguma coisa a ver com a subquery, mas testei no SQL Server e funcionou.Se puderem ajudar...Tks Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Janeiro 23, 2007 Denunciar Share Postado Janeiro 23, 2007 Fabi, dê uma revisada no que você deseja fazer. você está introduzindo dois SELECT na sua query:...SQL.Clear;SQL.Add('SELECT COUNT(*) FROM(');SQL.Add('SELECT CX.COO, CX.SEQUENCIAL FROM CAIXAGERAL CX, ADMCARTAO ADM ');...Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Visitante Postado Janeiro 23, 2007 Denunciar Share Postado Janeiro 23, 2007 Oi Micheus,Na verdade estou tentando fazer uma subquery mesmo. Preciso saber a qdte de registros na tabela CAIXAGERAL agrupado por SEQUENCIAL E COO.Select COUNT(*) From(Select CX.sequencial, CX.coo From CaixaGeral CX, AdmCartao ADM WHERE CX.codAdmCartao = ADM.codAdmCartaoGROUP BY CX.sequencial, CX.coo ) qtde.No SQL Server funciona. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Janeiro 23, 2007 Denunciar Share Postado Janeiro 23, 2007 Oi Micheus,Na verdade estou tentando fazer uma subquery mesmo. Preciso saber a qdte de registros na tabela CAIXAGERAL agrupado por SEQUENCIAL E COO.Select COUNT(*) From(Select CX.sequencial, CX.coo From CaixaGeral CX, AdmCartao ADM WHERE CX.codAdmCartao = ADM.codAdmCartaoGROUP BY CX.sequencial, CX.coo ) qtde.No SQL Server funciona.Fabi, acho que sua SQL deveria ficar deste modo, confira se é isto:Select CX.sequencial, CX.coo, COUNT(*) Qtd From CaixaGeral CX, AdmCartao ADM where CX.codAdmCartao = ADM.codAdmCartao GROUP BY CX.sequencial, CX.coo E se não me engano ainda daria para fazer assim, mas acho que teria que ser avaliado qual tem melhor desempenho (acredito seja a primeira):Select CX.sequencial, CX.coo, COUNT(*) Qtd From CaixaGeral CX where Exists(Select * from AdmCartao ADM where CX.codAdmCartao = ADM.codAdmCartao) GROUP BY CX.sequencial, CX.cooAcrescentei as colunas CX.sequencial, CX.coo no SELECT porque normalmente você precisa saber a que se refere cada linha retornada na consulta.Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Visitante Postado Janeiro 23, 2007 Denunciar Share Postado Janeiro 23, 2007 Na verdade não é bem isso que eu quero. A minha query está correta. O resultado que eu quero na query é somente um, a QTDE de linhas que a subquery traz. É como se o campo "sequencial" e "coo" fossem uma chave, eu consulto os registros agrupados por esta chave e depois eu conto qtos registros (linhas) me retornou. O que eu não consigo entender é porque dá erro no Delphi usando Tquery. Será que o componente TQuery não aceita queries aninhadas? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Janeiro 23, 2007 Denunciar Share Postado Janeiro 23, 2007 O resultado que eu quero na query é somente um, a QTDE de linhas que a subquery traz. É como se o campo "sequencial" e "coo" fossem uma chave, eu consulto os registros agrupados por esta chave e depois eu conto qtos registros (linhas) me retornou. O que eu não consigo entender é porque dá erro no Delphi usando Tquery. Será que o componente TQuery não aceita queries aninhadas?É não sei explicar. Mas se você for utilizar essa quantidade de linhas no seu código, então porque não coloca apenas a consulta utilizada no seu #1 post:Select CX.sequencial, CX.coo From CaixaGeral CX, AdmCartao ADM WHERE CX.codAdmCartao = ADM.codAdmCartao GROUP BY CX.sequencial, CX.cooe então, após abrir a query (TQuery), utiliza a propriedade RecordCount. Não daria? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Visitante Postado Janeiro 24, 2007 Denunciar Share Postado Janeiro 24, 2007 Boa idéia.Obrigada. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guest - Fabi -
Olá, sou eu novamente.
Pessoal, estou tentando fazer uma consulta no SQL Server utilizando o componente TQuery da seguinte forma:
with DM_PDOX.CAIXAGER do
begin
Close;
SQL.Clear;
SQL.Add('SELECT COUNT(*) FROM(');
SQL.Add('SELECT CX.COO, CX.SEQUENCIAL FROM CAIXAGERAL CX, ADMCARTAO ADM ');
SQL.Add('WHERE CX.CODADMCARTAO = ADM.CODADMCARTAO ');
SQL.Add(') qtde');
Open;
End;
Mas ele me retorna o seguinte erro: "Invalid use of keyword. Token SELECT".
Eu Imagino que tenha alguma coisa a ver com a subquery, mas testei no SQL Server e funcionou.
Se puderem ajudar...
Tks
Link para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.