FABIO SYS 0 Denunciar post Postado Fevereiro 3, 2009 Olá Amigos Boa tarde. Tenho uma Select sum que esta num dbgrid e soma os campos por exemplo Serviços e esta tabela têm um num de orçamento que eu gostaria que quando rodasse a select sum ela somasse apenas aquele num de orçamento por vez por exemplo: Orçamento 1 Cliente João produto valor teste 1,00 teste2 1,00 Totall R$2,00 Ao invês de somar todos os clientes de uma vez apenas soma o que estou editando no momento. Tentei fazer assim: mas diz que há um erro de sintaxe : Detalhe: são duas tabelas neste caso a orçamento que gera o "numorçamento" e a serviços onde insiro os pedidos e soma Select sum (total) as ValorTotal from OrcaAcab where 'CodigoOrçamento' = 'CodigoOrçamento' from orcamento; Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Fevereiro 3, 2009 Não vai funcionar seu select assim. O where não aceita este tipo de condição. Existem duas formas de se fazer, mas para o seu select o jeito mais simples é este: SELECT SUM(CAMPO) AS TOTAL FROM SUA_TABELA WHERE CAMPO_DE_FILTRO = VALOR Ex.: Select sum (total) as ValorTotal from OrcaAcab where CodigoOrcamento = 1 No exemplo, irá trazer a soma de todos os valores com o código de orçamento = 1 A outra forma seria com o uso de inner joins... contudo estou enferrujado na sintaxe do comando no Access, mas em sql server seria assim: Select sum (A.total) as ValorTotal from OrcaAcab A with(nolock) inner join orcamento B with(nolock) on (B.codigoorcamento = A.codigoorcamento) where B.CodigoOrcamento = 1 O código acima faz o mesmo do primeiro select... a diferença é que ele só trará resultado se existir o código do orçamento nas duas tabelas. []'s Compartilhar este post Link para o post Compartilhar em outros sites
FABIO SYS 0 Denunciar post Postado Fevereiro 3, 2009 Não vai funcionar seu select assim. O where não aceita este tipo de condição. Existem duas formas de se fazer, mas para o seu select o jeito mais simples é este: SELECT SUM(CAMPO) AS TOTAL FROM SUA_TABELA WHERE CAMPO_DE_FILTRO = VALOR Ex.: Select sum (total) as ValorTotal from OrcaAcab where CodigoOrcamento = 1 No exemplo, irá trazer a soma de todos os valores com o código de orçamento = 1 A outra forma seria com o uso de inner joins... contudo estou enferrujado na sintaxe do comando no Access, mas em sql server seria assim: Select sum (A.total) as ValorTotal from OrcaAcab A with(nolock) inner join orcamento B with(nolock) on (B.codigoorcamento = A.codigoorcamento) where B.CodigoOrcamento = 1 O código acima faz o mesmo do primeiro select... a diferença é que ele só trará resultado se existir o código do orçamento nas duas tabelas. []'s Olha estranho fiz como demosntrado no primeiro, e ele não apare ce mais o resultado no dbtext estou lendo aqui e pensei será que Group by não resolveira o meu caso pq veja: Eu tenho duas tabelas por exemplo : Vendas que puxa os dados de items e orçamento que puxa dados da cliente Ai eu preciso que quando eu gere um novo orçameno por exemplo nº1 a select sum some apenas os items do orçamento 1 e não toda a tabela.SERÁ QUE ISTO? Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Fevereiro 3, 2009 Você gravou o orçamento na OrcaAcab antes de dar o select pelo código do orçamento da tabela orcamento? Lembresse que se não existir nenhum orçamento gravado na OrcaAcab com o código que passou não irá retornar nada no select. E group by é só para agrupar informações, não é filtro de pesquisa. Compartilhar este post Link para o post Compartilhar em outros sites
FABIO SYS 0 Denunciar post Postado Fevereiro 3, 2009 Fiz assim: Select CodigoOrçamento, sum (total) as ValorTotal from OrcaAcab where CodigoOrçamento from OrcaServ; Só que dá o seguinte erro: "Erro de sintaxe operador faltando) na expressão de consulta codigoOrçamento from OrcaServ" Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Fevereiro 3, 2009 Amigo... já disse no meu primeiro post deste tópico que este sql que você montou: Select CodigoOrçamento, sum (total) as ValorTotal from OrcaAcab where CodigoOrçamento from OrcaServ; NÃO FUNCIONA! Desculpe-me, mas terei que repetir o que lhe falei outro dia: você precisa urgentemente estudar sobre comandos sqls porque o select acima é o mais básico do básico de qualquer apostila. O que você deve fazer é o seguinte: pegar o código do orçamento gerado na tabela OrcaServ e passar para o sql na forma como escrevi no primeiro post, o qual copio abaixo novamente: Select sum (total) as ValorTotal from OrcaAcab where CodigoOrcamento = 1 Onde você substituirá o 1 pelo código do orçamento que você gerou. Supondo que o código deste orçamento é 10, seria o sql então o seguinte: Select sum (total) as ValorTotal from OrcaAcab where CodigoOrcamento = 10 Não há como ter dois from num mesmo select, a menos que se use subselects... o que complicaria ainda mais sua vida dada a dificuldade com os selects básicos que você já apresenta e que podemos detectar pelos seus posts. []'s Compartilhar este post Link para o post Compartilhar em outros sites
FABIO SYS 0 Denunciar post Postado Fevereiro 3, 2009 Amigo... já disse no meu primeiro post deste tópico que este sql que você montou: Select CodigoOrçamento, sum (total) as ValorTotal from OrcaAcab where CodigoOrçamento from OrcaServ; NÃO FUNCIONA! Desculpe-me, mas terei que repetir o que lhe falei outro dia: você precisa urgentemente estudar sobre comandos sqls porque o select acima é o mais básico do básico de qualquer apostila. O que você deve fazer é o seguinte: pegar o código do orçamento gerado na tabela OrcaServ e passar para o sql na forma como escrevi no primeiro post, o qual copio abaixo novamente: Select sum (total) as ValorTotal from OrcaAcab where CodigoOrcamento = 1 Onde você substituirá o 1 pelo código do orçamento que você gerou. Supondo que o código deste orçamento é 10, seria o sql então o seguinte: Select sum (total) as ValorTotal from OrcaAcab where CodigoOrcamento = 10 Não há como ter dois from num mesmo select, a menos que se use subselects... o que complicaria ainda mais sua vida dada a dificuldade com os selects básicos que você já apresenta e que podemos detectar pelos seus posts. []'s Eu novamente... Então pesquisei e pasme consegui! rsrs fiz assim Select sum (total) as ValorTotal from OrcaAcab group by CodigoOrçamento; Moral da história no dbgrid de cima aparece normal apenas os valores correspondentes ao cliente 1 por exemplo: Quant Descrição valor 1 t este 0,50 dbtextquery1 total= R$:0,50 Isto no primero dbgrid: Ai, todo feliz com meus pequenos progressos em sql, repeti a mesma idéia logo abaixo no outro ADOquery2 referente ao outro dbgrid: Select sum (ValorPapel) as geral from OrcaServ group by CodigoOrçamento; E sabe o que aconteceu? O DBText muito embora ativado não mostra nada porque será? Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Fevereiro 3, 2009 Permita-me discordar... na realidade você não conseguiu filtrar sua consulta por um orçamento especifico, e sim agrupar os resultados pelo código do orçamento... experimente gravar outro orçamento e veja o que seu sql irá retornar. Para filtrar e trazer apenas os dados referentes a um orçamento específico, é obrigatório o uso do where e a passagem do código do orçamento por parâmetro, como eu já citei antes. []'s Compartilhar este post Link para o post Compartilhar em outros sites
FABIO SYS 0 Denunciar post Postado Fevereiro 4, 2009 Permita-me discordar... na realidade você não conseguiu filtrar sua consulta por um orçamento especifico, e sim agrupar os resultados pelo código do orçamento... experimente gravar outro orçamento e veja o que seu sql irá retornar. Para filtrar e trazer apenas os dados referentes a um orçamento específico, é obrigatório o uso do where e a passagem do código do orçamento por parâmetro, como eu já citei antes. []'s É realmente você está certo, (não que Eu tenha duvidado...) mas como estou estudando né, me dê um desconto rsrsr Então mas quanto ao where a única coisa que Eu não entendi ainda é isto. Eu colocando "where CodigoOrcamento =10" Eu terei que mudar o numero de orçamento ou será que quando eu clicar em novo orçamento o adoquery irá fazer com que este "where" entenda que onumero já é outro? E pintou uma outra dúvida: A questão da soma já entendi mas quando coloco um outro item ela não atualiza o dbtext fiz assim Em events do dbgrid, fui em Oncelclick e coloquei: datamodule1.adoserv.refresh; Mas não acontece nada e nem quando eu saio do programa e abro ele novamente atualiza pq será? PS: Desculpe a amolação. Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Fevereiro 4, 2009 A questão do where é o seguinte: dinamicamente no seu programa você vai ter que passar o código do orçamento para a sql e ai sim dar o open na sua query, para que o filtro funcione. Ou seja, você antes de executar a sql tem que saber qual é o código do orçamento e passar isso para a clásula, trocando o valor 10 que coloquei no exemplo pelo seu código de orçamento que vai consultar. O adoquery não entende nada, ele é burro por natureza... você que precisa passar para ele o que ele tem que fazer senão ele vai fazer errado mesmo rs. Outra coisa... não coloque dentro do grid o código para atualizar o mesmo.... isso deixará lento o sistema se o usuário ficar clicando dentro do grid o tempo todo... o melhor seria que depois de salvar um produto no orçamento você fechasse a query ligada ao grid e refizesse a consulta mesmo. Geralmente eu prefiro usar o close e depois o open mesmo. []'s Compartilhar este post Link para o post Compartilhar em outros sites
FABIO SYS 0 Denunciar post Postado Fevereiro 4, 2009 A questão do where é o seguinte: dinamicamente no seu programa você vai ter que passar o código do orçamento para a sql e ai sim dar o open na sua query, para que o filtro funcione. Ou seja, você antes de executar a sql tem que saber qual é o código do orçamento e passar isso para a clásula, trocando o valor 10 que coloquei no exemplo pelo seu código de orçamento que vai consultar. O adoquery não entende nada, ele é burro por natureza... você que precisa passar para ele o que ele tem que fazer senão ele vai fazer errado mesmo rs. Outra coisa... não coloque dentro do grid o código para atualizar o mesmo.... isso deixará lento o sistema se o usuário ficar clicando dentro do grid o tempo todo... o melhor seria que depois de salvar um produto no orçamento você fechasse a query ligada ao grid e refizesse a consulta mesmo. Geralmente eu prefiro usar o close e depois o open mesmo. []'s Por favor, como Eu faço para que a sql seja informada quanto ao número de orçamento pq o form "cadastro orçamento" esta disposto da seguinte maneira: O cliente quando clica em novo orçamento dá um append em todos os campos ai ele vai selecionando os items ai no que ele salva, o campo "autoincremento" do campo "numorca" gera um número.Como informo isso para a sql? Compartilhar este post Link para o post Compartilhar em outros sites
FABIO SYS 0 Denunciar post Postado Fevereiro 4, 2009 A questão do where é o seguinte: dinamicamente no seu programa você vai ter que passar o código do orçamento para a sql e ai sim dar o open na sua query, para que o filtro funcione. Ou seja, você antes de executar a sql tem que saber qual é o código do orçamento e passar isso para a clásula, trocando o valor 10 que coloquei no exemplo pelo seu código de orçamento que vai consultar. O adoquery não entende nada, ele é burro por natureza... você que precisa passar para ele o que ele tem que fazer senão ele vai fazer errado mesmo rs. Outra coisa... não coloque dentro do grid o código para atualizar o mesmo.... isso deixará lento o sistema se o usuário ficar clicando dentro do grid o tempo todo... o melhor seria que depois de salvar um produto no orçamento você fechasse a query ligada ao grid e refizesse a consulta mesmo. Geralmente eu prefiro usar o close e depois o open mesmo. []'s Por favor, como Eu faço para que a sql seja informada quanto ao número de orçamento pq o form "cadastro orçamento" esta disposto da seguinte maneira: O cliente quando clica em novo orçamento dá um append em todos os campos ai ele vai selecionando os items ai no que ele salva, o campo "autoincremento" do campo "numorca" gera um número.Como informo isso para a sql? Boa tarde Então após ler alguns tutoriais resolvi fazer o "inner join" ficou assim: Select sum (total) as ValorTotal from OrcaAcab inner join orcamento on orcamento.CodigoOrçamento = OrcaAcab.CodigoOrçamento; Só que consigo activar=true sem problema mas ai o dbrexr fica sem nenhuma iformação pq será? Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Fevereiro 4, 2009 Já verificou se existem registros gravados nas duas tabelas? E outra... não adianta só o inner join, precisa implementar o where como já foi discutido. No fórum tem muitos exemplos de querys usando passagem de valor por referência. Dê uma pesquisada nisto, pois vai precisar. []'s Compartilhar este post Link para o post Compartilhar em outros sites
FABIO SYS 0 Denunciar post Postado Fevereiro 4, 2009 Agora fiz assim: Select sum (total) as ValorTotal from OrcaAcab inner join orcamento on (OrcaAcab.CodigoOrçamento = Orcamento.CodigoOrçamento) where orcamento.CodigoOrçamento = OrcaAcab.CodigoOrçamento; Ai quando clico em active=true ele vai sem proble am mas ainda nao mostra a soma e os dados mas estou suspeitando de algo veja: Eu fiz assim tenho um "ADOTABLE" de nome "ADORCA" e outro "ADOTABLE" este "ADOCAB" estes estão num datamodule. Ai no form coloquei as ADOQUERY1 e um datasource1 ai o que acontece o DBGRID esta ligado ao datasource da ADOTABLE ADOCAB. Será que para que apareça os dados agora tenho de ligar o datasourc ao ADOQUERY1? mAS SE SIM PQ SERÁ QUE COM SELECT SUM (Total) as total from OrcaAcab; mostrava? Me ajude. Compartilhar este post Link para o post Compartilhar em outros sites