Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Capturar em um select o valor de soma de coluna feito em outro select


Question

   Será que estou fazendo certo?

                              //Objetivo : fazer update de um resultado de uma soma anteriormente feita  na mesma tabela.
                                //tbresult é uma tabela normal criada em tempo de execução.
                                //Tem 3 registros com ocorrencias de idNC = 27 na tabela tbresult
                                //Criei uma tabela temporaria so para armazenamento de valor da soma porque SQLite não declara procedure.

procedure TfLISTA.calcula(Sender: TObject);
begin

                           //CRIO A TABELA VIRTUAL TEMPORARIA QUE USO SO PARA ARMAZENAR A SOMA:
         Dtm.ZQryResult.sql.clear;
         Dtm.ZQryResult.sql.add('CREATE TEMP TABLE IF NOT EXISTS tbtempor(totcoluna FLOAT); ');
         Dtm.ZQryResult.ExecSQL;

                                   
       with Dtm.ZQryResult do          //Faco tudo nesta  nesta Query
       begin;

                close;
                                      //FACO A SOMA CRIANDO UM CAMPO ALIAS
                sql.clear;
                sql.add('SELECT id,idNC, SUM(valorX)   AS  total    FROM   tbresult WHERE idNC = 27 ;');
                open; //Ok
 
                                        //ARMAZENO A SOMA NA TBTEMPORARIA:

                sql.clear;                                                                     //VALUES(totcoluna)
                sql.add('INSERT OR REPLACE INTO tbtempor VALUES(SELECT total FROM tbresult WHERE idNC = 27); ');
                ExecSQL; //Ok com um valor fixo ex...values(1234)  mas com a expressao do sub select acima não vem nada


                  //TENTO FAZER UPDATE DO RESULTADO DA SOMA  (que já deve esta na tbtempor)    NA COLUNA TOTAL(já existente e não virtual e nem como alias)     DA    TBRESULT

                sql.clear;                         
                sql.add('UPDATE tbresult SET total = (SELECT totcoluna FROM tbtempor) WHERE idNC = 27;');
                ExecSQL;
        


                      //SELECT DE VISUALIZACAO NO GRID
                sql.clear;
                sql.add('select * from tbresult; ');
                open;

 

         
        end;//QueryResult
      
end;//Procedur


           //RESUMINDO: Se eu colocar um valor VALUES(1234) O GRID TRAZ
                        MAS SE EU COLOCAR: VALUES(SELECT total FROM tbresult WHERE idNC = 27) na TBTEMPOR,  
                        não VEM NADA.

 

 

Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 0
Posted (edited)

Bem.... então eu mesmo respondo a questão:

procedure TfLISTA.calcula(Sender: TObject);
begin

                //CRIO A TABELA VIRTUAL TEMPORARIA QUE USO SO PARA ARMAZENAR A SOMA:
    Dtm.ZQryResult.sql.clear;
    Dtm.ZQryResult.sql.add('CREATE TEMP TABLE IF NOT EXISTS tbtempor(totcoluna FLOAT); ');
         Dtm.ZQryResult.ExecSQL;

                                   
       with Dtm.ZQryResult do          //Faco tudo nesta  nesta Query
       begin;

                close;

-----------------------------------------------ELIMINO  O BLOCO ABAIXO------------------------------------------------

 Não é nescessário porque eu faço a soma aonde eu preciso (no caso na inclusao da tbtempor)

                                                                 e o campo alias não servira para pegar de outro select.


                                      //FACO A SOMA CRIANDO UM CAMPO ALIAS total
       //   sql.clear;
       //  sql.add('SELECT id,idNC, SUM(valorX)   AS  total    FROM   tbresult WHERE idNC = 27 ;');
      //   open;
 

-------------------------------------FACO A SOMA AQUI MESMO COM valorX-------------------------------------------


                                         //ARMAZENO A SOMA NA TBTEMPORARIA:

 sql.clear;                                                                 
sql.add('INSERT OR REPLACE INTO   tbtempor  (totcoluna)   VALUES ((SELECT SUM(valorX)   FROM   tbresult WHERE idNC = 27)); ');


  ----------------FAÇO UPDATE  NA COLUNA TOTAL JÁ EXISTENTE  NA  TBRESULT --------------------

  sql.clear;                         
 sql.add('UPDATE tbresult SET total = (SELECT totcoluna FROM tbtempor) WHERE idNC = 27;');
                ExecSQL;
        

---------------------------------- OK  AGORA É SÓ VISUALIZAR --------------------------------------------------------------
                                                    //SELECT DE VISUALIZACAO NO GRID
                sql.clear;
                sql.add('select * from tbresult; ');
                open;

      
        end;//QueryResult
      
end;//Procedur


           //RESUMINDO:  Um campo criado como ALIAS não serviria para calculo porque ele só processa no próprio select ativo.

   Para quem esta iniciando como eu fica ai a dica do erro.
 

Edited by Lazaruz
gramatica
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Cloud Computing


  • Forum Statistics

    • Total Topics
      148680
    • Total Posts
      644502
×
×
  • Create New...