Erro no select sum
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.
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
Curtidas 0
Respostas
Araujo Junior.
26/09/2013
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;GOSTEI 0
Sérgio Assunção
26/09/2013
Faltou o "where" ...
Sérgio
qry.SQL.Add('SELECT SUM(QT_Material) AS total FROM servicos_clientes where Cod_Cliente=:A');Sérgio
GOSTEI 0
Fabricio Luciano
26/09/2013
Amigos.....o problema é que total seria uma variável e não um nome de coluna. é possível fazer isso no select?
GOSTEI 0
Deivison Melo
26/09/2013
Sim, mas não da forma que está querendo!
Se estivessemos utilizando o oracle isso seria feito com o uso de um select into
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!!
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!!
GOSTEI 0
Fabiano Carvalho
26/09/2013
Não sei como o delphi trabalha, mas voce pode definir a variavel no proprio sql!
Exempo no SQL Server..
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!
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!
GOSTEI 0
Fabricio Luciano
26/09/2013
estou usando a access
GOSTEI 0
Fabricio Luciano
26/09/2013
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;
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;
GOSTEI 0