Fórum Reajuste de preços automaticamente por grupo de produtos #400003

29/04/2011

0

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...
Jose Maria

Jose Maria

Responder

Post mais votado

29/04/2011

Teste assim
UPDATE PRODUTOS
SET PrecoVenda = PrecoVenda + ( (PrecoVenda/100) * PercReajuste)
WHERE
  CodGrupo = (SELECT CodGrupo FROM GRUPOS WHERE Grupo = GrupoSelecionado)


Espero ter colaborado

Wilson Junior

Wilson Junior
Responder

Gostei + 1

Mais Posts

01/05/2011

Jose Maria

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...
Responder

Gostei + 0

02/05/2011

Wilson Junior

Veja se é isto que você precisa
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.
Responder

Gostei + 0

07/05/2011

Jose Maria

  da este erro no codigo sql....   aguardo retorno....desde ja agradeço por ajudar...
Responder

Gostei + 0

09/05/2011

Wilson Junior

Troquei o sinal do SET.
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.
Responder

Gostei + 0

09/05/2011

Jose Maria

bom dia Wilson,,,cara esta dando erro no sql.... " COMMANDTEXT DOES NOT RETURN A RESULT SET" NAO ESTOU CONSEGUINDO  CORRIGIR ESTE ERRO... AGUARDO RETORNO...    
Responder

Gostei + 0

09/05/2011

Wilson Junior

Você não pode utilizar o OPEN e sim, deve utilizar o ExecSQL.
Qualquer coisa coloque aqui o seu código.

Espero ter colaborado.
Responder

Gostei + 0

09/05/2011

Jose Maria

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
Responder

Gostei + 0

09/05/2011

Wilson Junior

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.
Responder

Gostei + 0

09/05/2011

Jose Maria

nao esta retornando nada...continua dando o erro...socorro....
Responder

Gostei + 0

09/05/2011

Wilson Junior

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.
Responder

Gostei + 0

17/05/2011

Jose Maria

boa noite...Wilson....está dando o mesmo erro....(erro postado na imagem anterior)...aguardo retorno....desde ja agradeço por ajudar...
Responder

Gostei + 0

21/05/2011

Rafael Gomes

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;

Responder

Gostei + 0

21/05/2011

Rafael Gomes

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;

Responder

Gostei + 0

27/05/2011

Jose Maria

bom dia...rafael esta dando erro de sintaxe.... aguardo retorno...
Responder

Gostei + 0

27/05/2011

Wilson Junior

Tem um parenteses a mais, então troque de:
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.
Responder

Gostei + 0

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

Aceitar