Fórum Procedure para quot;varrerquot; uma tabela com While... Do #39101

01/10/2003

0

Ola pessoal.

Preciso de uma procedure que ordene uma tabela por codigo e apos a mesma [b:57d215028e] ´varra´ toda faça caculos referente a cada codigo[/b:57d215028e], mas não sei como fazer isso, pois não localizei informações de como fazer isso utiliando o comando WHILE, pois [b:57d215028e]não sei como fazer
que a tabela prosicione no primeiro registro e vá ate o ultimo[/b:57d215028e]. comforme exemplo faço no delphi abaixo(negrito)..

[color=blue:57d215028e]Como ulitizar o comando WHILE .. DO em uma procedure para varrer um determinadatabela do inicio ao fim e retornar os resultados para poder inserir em outra???[/color:57d215028e]

Existe o comando parecido com ´next´ e ´first´ em procedures???

[color=red:57d215028e]Como simular isto??[/color:57d215028e]

utilizo o IB6.


[b:57d215028e]procedure TFormMenuPrincipal.Preco1Click(Sender: TObject);
var dblValorproduto:double;
begin

dblValorproduto:=0;

IBQryComposicaoProduto.Close;
IBQryComposicaoProduto.SQL.Clear;
IBQryComposicaoProduto.SQL.Add(´select * from COMPOSICAO_PRODUTO order by id´);
IBQryComposicaoProduto.Open;

IBQryComposicaoProduto.First;
while not IBQryComposicaoProduto.Eof do
begin
IBQryMateriaDespesa.Close;
IBQryMateriaDespesa.SQL.Clear;
IBQryMateriaDespesa.SQL.Add(´select * from MATERIA_PRIMA_DESPESA ´+
´ where id = ´+#39+IBQryComposicaoProdutoID_MATERIA_DESPESA.AsString+39);
IBQryMateriaDespesa.open;


if IBQryComposicaoProdutoINCORRENCIA.AsString = ´I´ then
begin
dblValorproduto:=dblValorproduto + (IBQryComposicaoProdutoCONSUMO_UNIDADE.AsFloat * IBQryMateriaDespesaVALOR_REAL.AsFloat);
end;


DmBaseDados.IBProdutosTemp.Open;
DmBaseDados.IBProdutosTemp.Insert;
DmBaseDados.IBProdutosTempID.AsString:= IBQryComposicaoProdutoID.AsString;
DmBaseDados.IBProdutosTempNOME_DO_PRODUTO.AsString:= IBQryComposicaoProdutoDESCRICAO_PRODUTO.AsString;
DmBaseDados.IBProdutosTempQUANTIDADE_CONSUMIDA.AsFloat:=IBQryComposicaoProdutoCONSUMO_UNIDADE.AsFloat;
DmBaseDados.IBProdutosTempVALOR_UNITARIO.AsFloat:=IBQryMateriaDespesaVALOR_REAL.AsFloat;
DmBaseDados.IBProdutosTempVALOR_PRODUTO.AsFloat:=dblValorproduto;
DmBaseDados.IBProdutosTemp.Post;
dmbaseDados.Trans.CommitRetaining;

IBQryComposicaoProduto.Next;
dblValorproduto:=0;

end;

end;[/b:57d215028e]


Siro

Siro

Responder

Posts

01/10/2003

Afarias

para fazer um LOOP nos registros de uma consulta (SQL) o comando é o FOR SELECT -- um exemplo ::

declare variable var1 varchar(2);
declare variable var2 integer;

for select campo1, campo2 from tabela1
into :var1, :var2 do
begin
if (var1 = ´OI´) then
insert into tabela2 (campoA) values (:var2);
end


*** um exemplo com o código q vc quer::

set term ^;

create procedure pr_teste returns () as
declare variable dblValorProduto numeric(10,2);
declare variable {outras variaveis};
begin

for select from composicao_produto order by id
into {:variaveis} do
begin

dblValorproduto = 0;

select from materia_prima_despesa
where id = id_materia_desp into {:variaveis};

if (cp_Incorrencia = ´I´) then
dblValorproduto = dblValorproduto + (cp_ConsumoUnidade * mpValorReal);

insert into produtos_temp ()
values ({:variavais});

end

end^



T+


Responder

Gostei + 0

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

Aceitar