Fórum Erro no select sum #456829

26/09/2013

0

Olá pessoal...mais uma vez eu estou aqui...rrsrsrsr. Então, preciso somar os valores de uma coluna e lançar o resultado numa variável. tentei masdá erro de sintax. abaixo está meu código:

Close;
SQL.Clear;
SQL.Add('SELECT SUM(QT_Material) AS total FROM servicos_clientes Cod_Cliente=:A');
Parameters.ParamByName('A').Value := StrtoInt(Edit_Cod_Cliente.Text);
Open;
ExecSQL;
qt_material := total;


Como faço pra variável qt_material receber o valor da soma no select???

Obrigado pela ajuda.
Fabricio Luciano

Fabricio Luciano

Responder

Posts

26/09/2013

Araujo Junior.

var
qt_material: Double;
begin
qry.Close;
qry.SQL.Clear;
qry.SQL.Add('SELECT SUM(QT_Material) AS total FROM servicos_clientes Cod_Cliente=:A');
qry.Parameters.ParamByName('A').Value := StrtoInt(Edit_Cod_Cliente.Text);
qry.Open;
qt_material := qrytotal.AsFloat;
end;
Responder

Gostei + 0

27/09/2013

Sérgio Assunção

Faltou o "where" ...
qry.SQL.Add('SELECT SUM(QT_Material) AS total FROM servicos_clientes where Cod_Cliente=:A');


Sérgio
Responder

Gostei + 0

27/09/2013

Fabricio Luciano

Amigos.....o problema é que total seria uma variável e não um nome de coluna. é possível fazer isso no select?
Responder

Gostei + 0

27/09/2013

Deivison Melo

Sim, mas não da forma que está querendo!

Se estivessemos utilizando o oracle isso seria feito com o uso de um select into

select
  author_last_name into v_authName FROM author


Onde a variável: "v_authName" receberia o valor DO campo: "author_last_name".

PS. utilizei apenas como exemplo, não é uma boa prática de programação!

Se um dia precisar usar, faça a utilização de cursores no oracle!

Abração e bons códigos!!
Responder

Gostei + 0

27/09/2013

Fabiano Carvalho

Não sei como o delphi trabalha, mas voce pode definir a variavel no proprio sql!
Exempo no SQL Server..
--declaro
Declare @variavel int
--defino o valor
set @variavel = (select 1);
--exibo-a
select @variavel


Vale lembrar que a variavel só pode ser utilizada naquela sessão, caso feche e tente abrir outra conexão, será necessario defini-la novamente!
Responder

Gostei + 0

27/09/2013

Fabricio Luciano

estou usando a access
Responder

Gostei + 0

28/09/2013

Fabricio Luciano

Pessoal estou postando a minha procedure para exclusão pra vcs darem uma olhada pq está dando sobrecarga. como não consegui utilizar a soma no select tentei desta forma com relação ao estoque. o erro eu sei que é dentro do while pq antes só excluia o cliente e os respectivos serviços mas como eu preciso atualizar a parrte de estoque tentei fazer um select e um update dentro do while not eof. onde estou errando????? abraço.


procedure TForm_Principal.Tbl_Principal_ExcluirClick(Sender: TObject);
var
codigo_estoque, qt_material, qt_dispo_estoque, total: Integer;

begin

if Application.MessageBox('Deseja realmente EXCLUIR o registro?','Aviso do Sistema',MB_YESNO) = idYes then

with Data_Module.Query_Servicos_Clientes do
begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM servicos_clientes WHERE Cod_Cliente=:A');
Parameters.ParamByName('A').Value := StrtoInt(Edit_Cod_Cliente.Text);
Open;
//ExecSQL;
while not Data_Module.Query_Servicos_Clientes.Eof do
begin
codigo_estoque := Data_Module.Query_Servicos_ClientesCod_Estoque.Value;
qt_material := Data_Module.Query_Servicos_ClientesQT_Material.Value;
with Data_Module.Query_Estoque do
begin
close;
sql.Clear;
SQL.Add('SELECT * FROM Estoque WHERE Cod_Estoque=:A');
Parameters.ParamByName('A').Value := codigo_estoque;
Open;
ExecSQL;
qt_dispo_estoque := Data_Module.Query_EstoqueQuant_Dispo.Value;

Close;
total := (qt_material + qt_dispo_estoque);
sql.Clear;
sql.Add('UPDATE Estoque SET Quant_Dispo=:B WHERE Cod_Estoque=:A');
Parameters.ParamByName('A').Value := codigo_estoque;
Parameters.ParamByName('B').Value := total;
ExecSQL;
end;
end;
end;

//############################################################
// ROTINA DE EXCLUSÃO DO CADASTRO DE CLIENTE E SERVICOS
with Data_Module.Query_Cadastro_Clientes do
begin
close;
sql.Clear;
sql.Add('DELETE FROM clientes WHERE Cod_Cliente=:A');
Parameters.ParamByName('A').Value := StrtoInt(Edit_Cod_Cliente.Text);
ExecSQL;

with Data_Module.Query_Servicos_Clientes do
begin
close;
sql.Clear;
sql.Add('DELETE FROM servicos_clientes WHERE Cod_Cliente=:A');
Parameters.ParamByName('A').Value := StrtoInt(Edit_Cod_Cliente.Text);
ExecSQL;
end;

Data_module.Query_Clientes.Close;
Data_module.Query_Clientes.Open;
data_module.Query_Clientes.MoveBy((StrtoInt(Edit_Cod_Cliente.Text)) - 2);
// Carregando as caixas de texto com os valores do Banco de Dados
Edit_Cod_Cliente.Text := InttoStr(data_module.Query_ClientesCod_Cliente.Value);
Edit_Nome_Cliente.Text := data_module.Query_ClientesNome_Cliente.Value;
MaskEdit_CPF_CNPJ_Cliente.Text := data_module.Query_ClientesCPF_CNPJ.Value;
Edit_Logradouro_Cliente.Text := data_module.Query_ClientesLogradouro.Value;
Edit_Num_Cliente.Text := data_module.Query_ClientesNum.Value;
Edit_Complemento_Cliente.Text := data_module.Query_ClientesComplemento.Value;
Combo_UF_Cliente.Text := data_module.Query_ClientesUF.Value;
Edit_Bairro_Cliente.Text := data_module.Query_ClientesBairro.Value;
Edit_Cidade_Cliente.Text := data_module.Query_ClientesCidade.Value;
MaskEdit_CEP_Cliente.Text := data_module.Query_ClientesCEP.Value;
MaskEdit_Telefone_Cliente.Text := data_module.Query_ClientesTelefone.Value;
MaskEdit_Celular_Cliente.Text := data_module.Query_ClientesCelular.Value;
Edit_Email_Cliente.Text := data_module.Query_ClientesEmail.Value;
MaskEdit_Data_Cadastro_Cliente.Text := data_module.Query_ClientesData_Cadastro.Value;
Combo_Tipo_Cliente.Text := data_module.Query_ClientesTipo_Cliente.Value;
//###############################################

// Atualiza o DBGrid de Serviços
with Data_Module.Query_Servicos_Clientes do
begin
close;
sql.Clear;
sql.Add('SELECT * FROM servicos_clientes WHERE Cod_Cliente =:Cod_Cliente');
Parameters.ParamByName('Cod_Cliente').Value := StrtoInt(Edit_Cod_Cliente.Text);
Active := true;
Open;
DBGrid_Servicos.DataSource := data_module.DataSource_Servicos_Clientes;
//###############################################
if data_module.Query_Clientes.Bof = true then application.MessageBox('Início da Tabela', 'Aviso do Sistema', MB_OK);
end;
Application.MessageBox('Registro deletado com sucesso!!!','Aviso do Sistema',MB_OK);

end;
end;
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar