//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.
Pergunta
Lazaruz
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 para o comentário
Compartilhar em outros sites
1 resposta 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.