Atualizar tabela de preços

Delphi

27/08/2006

oi a eu aki de novo, presciso de uma idéia de como fazer para atualizar uma tabela de produtos..vamos supor que eu quero ajustar em 10¬ toda a tabela como eu faria isto ?
EDIT1 = onde recebe o valor em ¬ a ser ajustado,
BD_ESTOQUE = nome da tabela,
GS_EST_VALOR_VENDA = campo onde é colocado o valor de venda

o valor que estiver no GS_EST_VALOR_VENDA tem que ser calculado e e depois receber o novo valor...tipo a mercadoria custa 100 reias coloco 10 ¬ este valaor muda para 110,00 reias.. más este processo tem que ser feito na tabela toda..tem jeito ? vlw t+


Gigatel

Gigatel

Curtidas 0

Respostas

Jonas_giron

Jonas_giron

27/08/2006

eu tenho um processo parecido com esse que vc quer

no programa eu tenho uma tela com os parametros ´A´ para acressimo e ´D´ para desconto, e a porcentagem ex 10,00 ¬


mando executar a procedure com os parametros acima.


no banco tenho essas duas procedures uma que estarta e a outra que atualiza..


--[ A procedure que estarta com um for select e recebe os valores do programa]--

CREATE PROCEDURE STR_STARTA_POR_REMUNERACAO (
TIPO_CALCULO CHAR(1),
PORCENTAGEM NUMERIC(15,2))
AS
DECLARE VARIABLE VAL_REMUNERACAO NUMERIC(15,2);
DECLARE VARIABLE COD_RENUNERACAO INTEGER;
begin
for select tabela_itens_remuneracao.codigo
, tabela_itens_remuneracao.valor_remunerado
from tabela_itens_remuneracao
into :cod_renuneracao, :val_remuneracao
do begin
execute procedure str_atualiza_remuneracao :cod_renuneracao, :val_remuneracao, :porcentagem, :tipo_calculo;
end
suspend;
end



--[ a procedure que atualiza com a porcentagem ]--
CREATE PROCEDURE STR_ATUALIZA_REMUNERACAO (
COD_REMUNERACAO INTEGER,
VAL_REMUNERACAO NUMERIC(15,2),
PORCENTAGEM NUMERIC(15,2),
TIPO_CALCULO CHAR(1))
AS
DECLARE VARIABLE VAL_CALCULADO NUMERIC(15,2);
begin
if (:tipo_calculo = ´A´) then begin
val_calculado = ((:val_remuneracao) + (:val_remuneracao) * (:porcentagem) / (100));

update tabela_itens_remuneracao set
tabela_itens_remuneracao.valor_remunerado = :val_calculado
where tabela_itens_remuneracao.codigo =:cod_remuneracao;
end

if (:tipo_calculo = ´D´) then begin
val_calculado = ((:val_remuneracao) - (:val_remuneracao) * (:porcentagem) / (100));

update tabela_itens_remuneracao set
tabela_itens_remuneracao.valor_remunerado = :val_calculado
where tabela_itens_remuneracao.codigo =:cod_remuneracao;
end

suspend;
end


você pode criar isso em uma só tambem.. pode ficar a teu critério.


GOSTEI 0
Gigatel

Gigatel

27/08/2006

eu tenho um processo parecido com esse que vc quer no programa eu tenho uma tela com os parametros ´A´ para acressimo e ´D´ para desconto, e a porcentagem ex 10,00 ¬ mando executar a procedure com os parametros acima. no banco tenho essas duas procedures uma que estarta e a outra que atualiza.. --[ A procedure que estarta com um for select e recebe os valores do programa]-- CREATE PROCEDURE STR_STARTA_POR_REMUNERACAO ( TIPO_CALCULO CHAR(1), PORCENTAGEM NUMERIC(15,2)) AS DECLARE VARIABLE VAL_REMUNERACAO NUMERIC(15,2); DECLARE VARIABLE COD_RENUNERACAO INTEGER; begin for select tabela_itens_remuneracao.codigo , tabela_itens_remuneracao.valor_remunerado from tabela_itens_remuneracao into :cod_renuneracao, :val_remuneracao do begin execute procedure str_atualiza_remuneracao :cod_renuneracao, :val_remuneracao, :porcentagem, :tipo_calculo; end suspend; end --[ a procedure que atualiza com a porcentagem ]-- CREATE PROCEDURE STR_ATUALIZA_REMUNERACAO ( COD_REMUNERACAO INTEGER, VAL_REMUNERACAO NUMERIC(15,2), PORCENTAGEM NUMERIC(15,2), TIPO_CALCULO CHAR(1)) AS DECLARE VARIABLE VAL_CALCULADO NUMERIC(15,2); begin if (:tipo_calculo = ´A´) then begin val_calculado = ((:val_remuneracao) + (:val_remuneracao) * (:porcentagem) / (100)); update tabela_itens_remuneracao set tabela_itens_remuneracao.valor_remunerado = :val_calculado where tabela_itens_remuneracao.codigo =:cod_remuneracao; end if (:tipo_calculo = ´D´) then begin val_calculado = ((:val_remuneracao) - (:val_remuneracao) * (:porcentagem) / (100)); update tabela_itens_remuneracao set tabela_itens_remuneracao.valor_remunerado = :val_calculado where tabela_itens_remuneracao.codigo =:cod_remuneracao; end suspend; end você pode criar isso em uma só tambem.. pode ficar a teu critério.


Vlw, vou dar uma estudada no código...t+ posto o resultado..


GOSTEI 0
Gigatel

Gigatel

27/08/2006

Opa...tava pensando em algo mais simples..veja se este código ele aparentimente não para de dar loop e trava o aplicativo..
var
a,b:real;
begin
  while not BD_ESTOQUE.Eof do
  a:= ((strtofloat(BD_ESTOQUEGS_EST_VALOR_VENDA.Value)*StrToInt(Edit2.Text))/100);
  b:=a+StrToFloat(BD_ESTOQUEGS_EST_VALOR_VENDA.value);
  BD_ESTOQUEGS_EST_VALOR_VENDA.Value := FloatToStr(b);
  BD_ESTOQUE.Next;
end;



Más será que funciona deste jeito ?
vlw..


GOSTEI 0
Marco Salles

Marco Salles

27/08/2006

melhor fazer um Update ....

Acredito que voce esteja usando BDE...

Então ocodigo abaixo deve servir...

Tipo isso:

procedure TForm1.Button1Click(Sender: TObject);
var
minhaQuery:TQuery;
begin
minhaQuery:=TQuery.Create(nil);
minhaQuery.DatabaseName:=´Seu Alliase Ou Seu Caminho´;
minhaQuery.sql.text:=´´;
minhaQuery.SQL.Text:=´Update Sua Tabela set Seu_Campo = Seu_Campo * :Aumento´;
minhaQuery.ParamByName(´Aumento´).AsFloat:=strtofloat(edit1.text);
minhaQuery.ExecSQL;
minhaquery.Free;
query1.Close; //Pode ser o Table Ligado ao DataSource
query1.open; //Pode ser o Table Ligado ao datasource
end;



GOSTEI 0
Gigatel

Gigatel

27/08/2006

[quote:43a14d37c2=´Marco Salles´]melhor fazer um Update ....

Acredito que voce esteja usando BDE...

Então ocodigo abaixo deve servir...

Tipo isso:

procedure TForm1.Button1Click(Sender: TObject);
var
minhaQuery:TQuery;
begin
minhaQuery:=TQuery.Create(nil);
minhaQuery.DatabaseName:=´Seu Alliase Ou Seu Caminho´;
minhaQuery.sql.text:=´´;
minhaQuery.SQL.Text:=´Update Sua Tabela set Seu_Campo = Seu_Campo * :Aumento´;
minhaQuery.ParamByName(´Aumento´).AsFloat:=strtofloat(edit1.text);
minhaQuery.ExecSQL;
minhaquery.Free;
query1.Close; //Pode ser o Table Ligado ao DataSource
query1.open; //Pode ser o Table Ligado ao datasource
end;
[/quote:43a14d37c2]

Vlw Marcos....Uso interbase 6.5, uma maneira que achei e funcionou foi assim más se vc tiver algo a acrescentar...
var
a,b:real;
begin
  a:= ((strtofloat(BD_ESTOQUEGS_EST_VALOR_VENDA.Value)*StrToInt(Edit2.Text))/100);
  b:=a+StrToFloat(BD_ESTOQUEGS_EST_VALOR_VENDA.value);
  BD_ESTOQUE.Edit;
  BD_ESTOQUEGS_EST_VALOR_VENDA.Value := FloatToStr(b);
  BD_ESTOQUE.Next;
end;


Vlw


GOSTEI 0
Marco Salles

Marco Salles

27/08/2006

Vlw Marcos....Uso interbase 6.5, uma maneira que achei e funcionou foi assim más se vc tiver algo a acrescentar...


a sua maneira funciona , mas o mais indicado é uma sql no banco

Voce tentou implementar o codigo que eu lhe passei , apenas alterando o tipo de DataSet Usado...

No meu caso usei um TQuery . acho que é so colocar o tipo de DataSet que voce esta usando e executar o codigo.. Voce tentou fazer isto ????

Quais o componente de acesso que voce esta usando ????


GOSTEI 0
POSTAR