Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Leo Baiano

Laço de repetição dentro de outro

Recommended Posts

PessoALL,

 

Estou com um problema que espero possam me ajudar.

 

Me passaram um banco de dados ACCESS já com registros só para eu trabalhar relatorios. Tenho que fazer isso o mais breve possivel e estou com um problema.

 

O problema esta em duas tabelas, uma chamada pesq (cadastro pesquisadores) e a outra chamada prod_b (produção destes pesquisadores.

 

Na tabela pesquisadores tem um campo chamado area (area de atuação do pesquisador), a tabela de produção também deveria ter esse campo pois cada produção tem sua área de aplicação.

 

Bom, eu criei o campo area na tabela produção e agora preciso colocar a área de cada uma delas. É muito registro e pensei em automatizar o serviço, e ai é que estou com problemas, vejam o que pensei fazer.

 

Criei uma página ASP onde eu seto rs e rs1 para cada uma das tabelas. Depois eu abro um laço da tabela pesq

----- LAÇO DA TABELA PESQ -----

if not rs1.eof then

while not rs1.eof

------ FECHA --------

 

e dentro do laço eu pego o valor da ID e AREA do pesquisador e coloco nas variaveis IDPESQ e PESQAREA.

 

Depois abro o laço da tabela prod_b

----- LAÇO DA TABELA PROD_B -----

if not rs.eof then

while not rs.eof

------ FECHA --------

 

Onde pego o valor do campo ID_PESQ (que é igual a ID do pesquisador).

 

Na tabela PROD_B existem bem mais registros do que na tabela PESQ pois cada pesquisador pode ter várias produções e as produções estão ligadas ao pesquisador pelos campos ID (tabela pesq) e ID_PESQ (tabela prod_B).

 

Depois de pegar a variavel ID_PESQ eu faço o update dos registros da tabela prod_b colocando o valor da variavel PESQAREA (area do pesquisador que peguei na tabela pesq) no campo AREA (da tabela prod_B) onde o ID_PESQ for igual a ID do pesquisador o qual peguei a area desta forma:

 

db.Execute("update prod_b set area='"&pesqarea&"' where id_pesq="&idpesq&"")

 

Então fecho o laço da tabela PROD_B e em seguida fecho o laço da tabela PESQ assim:

 

rs.Movenext

wend

end if

 

rs1.Movenext

wend

end if

 

A idieá é que o sistema leria as variaveis do primeiro registro da tabela pesq e gravaria a ID do pesquisador e AREA numa variavel, depois ele iria para a tabela PROD_B onde leria compararia os campos ID_PESQ com a variavel ID escrevendo a variavel PESQAREA no campo AREA daqueles registros que fossem iguais. Ao terminar de fazer esta operação em todos os registros com ID igual ele passaria para o proximo registro da tabela PESQ e repetiria o processo.

 

Em teoria esta tudo ok mas quando rodo o sistema ele faz isso apenas com o primeiro pesquisador, ele grava o valor da area do pesquisador no campo area na tabela prod_b mas faz isso só nas produções do primeiro pesquisador.

 

Segue o código completo.

 

-------------

 

<!-- #include file=conexao.asp --><% Set rs = Server.CreateObject( "ADODB.Recordset" )rs.ActiveConnection = dbrs.open "SELECT * FROM prod_b"Set rs1 = Server.CreateObject( "ADODB.Recordset" )rs1.ActiveConnection = dbrs1.open "SELECT * FROM pesq"if not rs1.eof then  while not rs1.eofidpesq = rs1("id")pesqarea = rs1("area")if not rs.eof then  while not rs.eofidprod = rs("id_pesq")db.Execute("update prod_b set area='"&pesqarea&"' where id_pesq="&idpesq&"")			rs.Movenextwendend ifrs1.Movenextwendend if
Obrigado a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

essa linha

rs.open "SELECT * FROM prod_b"

tem que ser executada dentro do while e passando o parametro do id

exemplo

do while not rs.eofset rs2=db.execute("select * from tabela where id="&rs("id")&"")if not rs2.eof thendo while not rs2.eofdb.Execute("update prod_b set area='"&rs("area")&"' where id_pesq="&rs2("id")&"")rs2.movenextloopend ifrs.movenextloop

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.