Reajuste de preços automaticamente por grupo de produtos
bom dia pessoal, estou fazendo um form de reajuste de precos..onde tenho um dblookupcombobox, 1 edit (percentual de aumento) e o botao confirmar...ou seja o usuario vai fazer o reajuste de preços de venda por grupo automaticamente, assim que informar o percentual de aumento no grupo selecionado, os preços de venda dos produtos que fazem parte do grupo que o usuario selecionou sera alterado...estou tentando mas nao deu certo...minha tabela esta assim:
tabela produtos:
codprod (chave primaria)
codgrupo(chave estrangeira)
precovenda
..... tabela grupos
codgrupo(chave primaria)
grupo
.... desde ja agradeço.. Uso o delphi/Mysql com adoconection e adoquery...
codgrupo(chave estrangeira)
precovenda
..... tabela grupos
codgrupo(chave primaria)
grupo
.... desde ja agradeço.. Uso o delphi/Mysql com adoconection e adoquery...
Jose Maria
Curtidas 0
Melhor post
Wilson Junior
29/04/2011
Teste assim
Espero ter colaborado
UPDATE PRODUTOS SET PrecoVenda = PrecoVenda + ( (PrecoVenda/100) * PercReajuste) WHERE CodGrupo = (SELECT CodGrupo FROM GRUPOS WHERE Grupo = GrupoSelecionado)
Espero ter colaborado
GOSTEI 1
Mais Respostas
Jose Maria
29/04/2011
bom dia wilson...cara esta dando erro de sintaxe...este percentual reajuste nao seria uma valor fixo? pois preciso fazer com que calcule pelo valor do reajuste que o usuario vai digitar no edit certo...ai que esta pegando... veja o codigo do botao confirmar:
procedure Tfrmreajustar.SpeedButton1Click(Sender: TObject);
//var
//percentual:double;
//codgrupo:integer;
begin
with dmpedidos.ADOQueryreajustar do
begin
Close;
SQL.Add('update produtos set precovenda + ((precovenda/100) * ??? '); duvidas
SQL.Add('where codgrupo =(select codgrupo from grupos where grupo = grupo');
//Parameters.ParamByName('percentual').Value := edit1;
//Parameters.ParamByName('codgrupo').Value := dmpedidos.adoquerygrupocodgrupo.assva;
ExecSQL;
open;
end; coloquei o mesmo codigo na adoquery q esta no datamodule... update produtos set precovenda = precovenda + ((precovenda/100) * 0,05) (aqui fica o percentual certo? mas ai seria um valor fixo, e o usuario que vai informar no edit do form de reajuste ok) where codgrupo = (select codgrupo from grupos where grupo = grupo) aguardo retorno....desde ja agradeço...
//var
//percentual:double;
//codgrupo:integer;
begin
with dmpedidos.ADOQueryreajustar do
begin
Close;
SQL.Add('update produtos set precovenda + ((precovenda/100) * ??? '); duvidas
SQL.Add('where codgrupo =(select codgrupo from grupos where grupo = grupo');
//Parameters.ParamByName('percentual').Value := edit1;
//Parameters.ParamByName('codgrupo').Value := dmpedidos.adoquerygrupocodgrupo.assva;
ExecSQL;
open;
end; coloquei o mesmo codigo na adoquery q esta no datamodule... update produtos set precovenda = precovenda + ((precovenda/100) * 0,05) (aqui fica o percentual certo? mas ai seria um valor fixo, e o usuario que vai informar no edit do form de reajuste ok) where codgrupo = (select codgrupo from grupos where grupo = grupo) aguardo retorno....desde ja agradeço...
GOSTEI 0
Wilson Junior
29/04/2011
Veja se é isto que você precisa
Espero ter colaborado.
procedure Tfrmreajustar.SpeedButton1Click(Sender: TObject);
begin
with dmpedidos.ADOQueryreajustar do
begin
Close;
SQL.Add('update produtos set precovenda + ((precovenda/100) * :percentual ');
SQL.Add('where codgrupo = :codgrupo');
Parameters.ParamByName('percentual').Value := StrToFloatDef( edit1.Text, 0 );
Parameters.ParamByName('codgrupo').Value := dmpedidos.adoquerygrupocodgrupo.AsInteger;
ExecSQL;
end;
end;
Espero ter colaborado.
GOSTEI 0
Jose Maria
29/04/2011
da este erro no codigo sql....
aguardo retorno....desde ja agradeço por ajudar...
GOSTEI 0
Wilson Junior
29/04/2011
Troquei o sinal do SET.
Espero ter colaborado.
procedure Tfrmreajustar.SpeedButton1Click(Sender: TObject);
begin
with dmpedidos.ADOQueryreajustar do
begin
Close;
SQL.Add('update produtos set precovenda = ((precovenda/100) * :percentual ');
SQL.Add('where codgrupo = :codgrupo');
Parameters.ParamByName('percentual').Value := StrToFloatDef( edit1.Text, 0 );
Parameters.ParamByName('codgrupo').Value := dmpedidos.adoquerygrupocodgrupo.AsInteger;
ExecSQL;
end;
end;
Espero ter colaborado.
GOSTEI 0
Jose Maria
29/04/2011
bom dia Wilson,,,cara esta dando erro no sql....
" COMMANDTEXT DOES NOT RETURN A RESULT SET"
NAO ESTOU CONSEGUINDO CORRIGIR ESTE ERRO...
AGUARDO RETORNO...
GOSTEI 0
Wilson Junior
29/04/2011
Você não pode utilizar o OPEN e sim, deve utilizar o ExecSQL.
Qualquer coisa coloque aqui o seu código.
Espero ter colaborado.
Qualquer coisa coloque aqui o seu código.
Espero ter colaborado.
GOSTEI 0
Jose Maria
29/04/2011
executei o sistema e quando vou testar um reajuste da a seguinte mensagem?
segue o codigo do botao confirmar:
procedure Tfrmreajustar.SpeedButton1Click(Sender: TObject);
begin
with dmpedidos.ADOQueryreajustar do
begin
Close;
SQL.Add('update produtos set precovenda = ((precovenda/100) * :percentual');
SQL.Add('where codgrupo = :codgrupo');
Parameters.ParamByName('percentual').Value:= strtofloatdef (edit1.Text, 0);
Parameters.ParamByName('codgrupo').Value := dmpedidos.adoquerygrupocodgrupo.Value;
ExecSQL;
//open;
end;
end; segue o codigo da adoquery no datamodule update produtos set precovenda = ((precovenda/100) * :percentual) where codgrupo = :codgrupo
begin
with dmpedidos.ADOQueryreajustar do
begin
Close;
SQL.Add('update produtos set precovenda = ((precovenda/100) * :percentual');
SQL.Add('where codgrupo = :codgrupo');
Parameters.ParamByName('percentual').Value:= strtofloatdef (edit1.Text, 0);
Parameters.ParamByName('codgrupo').Value := dmpedidos.adoquerygrupocodgrupo.Value;
ExecSQL;
//open;
end;
end; segue o codigo da adoquery no datamodule update produtos set precovenda = ((precovenda/100) * :percentual) where codgrupo = :codgrupo
GOSTEI 0
Wilson Junior
29/04/2011
Se não me engano o StrToFloat retorna um valor conforme os pontos e vírgula, verifique se este valor esta retornando corretamente, pois ele não está conseguindo passar o valor do percentual para o parâmetro.
Espero ter colaborado.
Espero ter colaborado.
GOSTEI 0
Jose Maria
29/04/2011
nao esta retornando nada...continua dando o erro...socorro....
GOSTEI 0
Wilson Junior
29/04/2011
procedure Tfrmreajustar.SpeedButton1Click(Sender: TObject);
begin
with dmpedidos.ADOQueryreajustar do
begin
Close;
SQL.Add('update produtos set precovenda = ((precovenda/100) * :percentual ');
SQL.Add('where codgrupo = :codgrupo');
Parameters.ParamByName('percentual').Value := StrToFloatDef( TRIM(StringReplace(edit1.Text, ThousandSeparator,'',[rfReplaceAll])), 0 );
Parameters.ParamByName('codgrupo').Value := dmpedidos.adoquerygrupocodgrupo.AsInteger;
ExecSQL;
end;
end;
Espero ter colaborado.
GOSTEI 0
Jose Maria
29/04/2011
boa noite...Wilson....está dando o mesmo erro....(erro postado na imagem anterior)...aguardo retorno....desde ja agradeço por ajudar...
GOSTEI 0
Rafael Gomes
29/04/2011
peguei o barco andando, mas acho que isso resolve!! teste aii.
procedure Tfrmreajustar.SpeedButton1Click(Sender: TObject);
begin
with dmpedidos.ADOQueryreajustar do
begin
Close;
SQL.clear;
SQL.Add('update produtos set precovenda = ((precovenda/100) * '+StrToFloatDef( edit1.Text, 0 ) );
SQL.Add('where codgrupo = 'dmpedidos.adoquerygrupocodgrupo.AsInteger);
ExecSQL;
end;
end;
procedure Tfrmreajustar.SpeedButton1Click(Sender: TObject);
begin
with dmpedidos.ADOQueryreajustar do
begin
Close;
SQL.clear;
SQL.Add('update produtos set precovenda = ((precovenda/100) * '+StrToFloatDef( edit1.Text, 0 ) );
SQL.Add('where codgrupo = 'dmpedidos.adoquerygrupocodgrupo.AsInteger);
ExecSQL;
end;
end;
GOSTEI 0
Rafael Gomes
29/04/2011
peguei o barco andando, mas acho que isso resolve!! teste aii.
procedure Tfrmreajustar.SpeedButton1Click(Sender: TObject);
begin
with dmpedidos.ADOQueryreajustar do
begin
Close;
SQL.clear;
SQL.Add('update produtos set precovenda = ((precovenda/100) * '+StrToFloatDef( edit1.Text, 0 ) );
SQL.Add('where codgrupo = ' + inttostr(dmpedidos.adoquerygrupocodgrupo.AsInteger));
ExecSQL;
end;
end;
procedure Tfrmreajustar.SpeedButton1Click(Sender: TObject);
begin
with dmpedidos.ADOQueryreajustar do
begin
Close;
SQL.clear;
SQL.Add('update produtos set precovenda = ((precovenda/100) * '+StrToFloatDef( edit1.Text, 0 ) );
SQL.Add('where codgrupo = ' + inttostr(dmpedidos.adoquerygrupocodgrupo.AsInteger));
ExecSQL;
end;
end;
GOSTEI 0
Jose Maria
29/04/2011
bom dia...rafael esta dando erro de sintaxe....
aguardo retorno...
GOSTEI 0
Wilson Junior
29/04/2011
Tem um parenteses a mais, então troque de:
para:
Espero ter colaborado.
SQL.Add('update produtos set precovenda = ((precovenda/100) * ' + StrToFloatDef( edit1.Text, 0 ) );
para:
SQL.Add('update produtos set precovenda = (precovenda/100) * ' + StrToFloatDef( edit1.Text, 0 ) );
Espero ter colaborado.
GOSTEI 0