Procedure para quot;varrerquot; uma tabela com While... Do
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]
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
Curtidas 0
Respostas
Afarias
01/10/2003
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+
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+
GOSTEI 0