Ir para conteúdo

POWERED BY:

Arquivado

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

Christiano Nunes

For... Next... (nunca consigo entender)

Recommended Posts

Pessoal... primeiramente faz-se necessário saber que EXISTE na tabela

"1ALERTA" e no campo "palavrachave" 2 registros já adicionados assim:

No registro 1-> palavrachave= flamengo, vasco

No registro 2-> palavrachave= vasco

 

Sendo assim, quero consultar os registros que contenham as palavras (flamengo, palmeiras)

como descriminado na variável "strpalavrachave".

 

SEGUE O CÓDIGO... SÓ NÃO CONSIGO ENTENDER PORQ DÁ ERRADO.

O RESULTADO É: "Não foi encontrado nenhum alerta para esta PALAVRA-CHAVE"

 

<%strpalavrachave = "flamengo, palmeiras"MyArray = Split(strpalavrachave, ",")%><%For I = LBound(MyArray) to Ubound(MyArray)Set palavrachave = Server.CreateObject("ADODB.Recordset")palavrachave.Open "SELECT * FROM 1ALERTA WHERE LCase(palavrachave) LIKE '%" & LCase(Trim(MyArray (I))) & "%' ", ConexaoNextIf palavrachave.EOF Thenresponse.write "Não foi encontrado nenhum alerta para esta PALAVRA-CHAVE"Elsewhile Not palavrachave.EOF%> <%		strNome = palavrachave("nome")		strEmail = palavrachave("email")		response.write strEmail &"<br><br><br>"		   %>	  <%palavrachave.MoveNextwend End Ifpalavrachave.CloseSet palavrachave = Nothing%>

CONSEGUEM IDENTIFICAR?

 

Se caso eu colocar o NEXT abaixo do END IF... ele acha os registros corretamente...

mas acha o primeiro... e volta a percorrer o codigo até o fim.. mostrando no segunda linha o mesmo resultado citado no inicio.

Compartilhar este post


Link para o post
Compartilhar em outros sites

a logica tem que ser assim...

Executa a repetição

faz o select de acordo com os parametros do array

exeuta a query

se enontrou escreve

se não chegou no fim do contador, faz o loop

 

traduzindo

 

strpalavrachave = "flamengo, palmeiras"MyArray = Split(strpalavrachave, ",")Set palavrachave = Server.CreateObject("ADODB.Recordset")For I = LBound(MyArray) to Ubound(MyArray)palavrachave.Open "SELECT * FROM 1ALERTA WHERE LCase(palavrachave) LIKE '%" & LCase(Trim(MyArray (I))) & "%' ", ConexaoIf not palavrachave.EOF Then		strNome = palavrachave("nome")		strEmail = palavrachave("email")		response.write strEmail &"<br><br><br>" end ifNextpalavrachave.CloseSet palavrachave = Nothing

Compartilhar este post


Link para o post
Compartilhar em outros sites

a logica tem que ser assim...Executa a repetiçãofaz o select de acordo com os parametros do arrayexeuta a queryse enontrou escrevese não chegou no fim do contador, faz o looptraduzindo

strpalavrachave = "flamengo, palmeiras"MyArray = Split(strpalavrachave, ",")Set palavrachave = Server.CreateObject("ADODB.Recordset")For I = LBound(MyArray) to Ubound(MyArray)palavrachave.Open "SELECT * FROM 1ALERTA WHERE LCase(palavrachave) LIKE '%" & LCase(Trim(MyArray (I))) & "%' ", ConexaoIf not palavrachave.EOF Then		strNome = palavrachave("nome")		strEmail = palavrachave("email")		response.write strEmail &"<br><br><br>" end ifNextpalavrachave.CloseSet palavrachave = Nothing
Jonathan,Fiz desse jeito e deu este erro:ADODB.Recordset (0x800A0E79)Operação não permitida quando o objeto está aberto.A linha no caso é essa: palavrachave.Open "SELECT * FROM 1ALERTA WHERE LCase(palavrachave) LIKE '%" & LCase(Trim(MyArray (I))) & "%' ", ConexaoAlguma outra opção???Mt obrigado pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

palavrachave.Open "SELECT * FROM 1ALERTA WHERE LCase(palavrachave) LIKE '%" & LCase(Trim(MyArray (I))) & "%' ", Conexao

Esse código executa o RecordSet dentro do FOR sem fechar antes de sair do FOR, dessa forma da segunda vez que o script entra no loop ele tenta abrir o RecordSet que ja está aberto e da ERRO...Pra resolver isso é só fechar o RecordSet antes de sair do FOR, OK..!!?? T+...

Compartilhar este post


Link para o post
Compartilhar em outros sites

palavrachave.Open "SELECT * FROM 1ALERTA WHERE LCase(palavrachave) LIKE '%" & LCase(Trim(MyArray (I))) & "%' ", Conexao

Esse código executa o RecordSet dentro do FOR sem fechar antes de sair do FOR, dessa forma da segunda vez que o script entra no loop ele tenta abrir o RecordSet que ja está aberto e da ERRO...Pra resolver isso é só fechar o RecordSet antes de sair do FOR, OK..!!?? T+...
Vagner,Seria entao só colocar o next dpois de fechar o recordset ne?fiz isso e aconteceu este erro:Objeto necessário: 'palavrachave'Fiz correto??

Compartilhar este post


Link para o post
Compartilhar em outros sites

faça assim

strpalavrachave = "flamengo, palmeiras"

MyArray = Split(strpalavrachave, ",")

 

For I = LBound(MyArray) to Ubound(MyArray)Set palavrachave = Server.CreateObject("ADODB.Recordset")palavrachave.Open "SELECT * FROM 1ALERTA WHERE LCase(palavrachave) LIKE '%" & LCase(Trim(MyArray (I))) & "%' ", ConexaoIf not palavrachave.EOF Then		strNome = palavrachave("nome")		strEmail = palavrachave("email")		response.write strEmail &"<br><br><br>" end ifpalavrachave.CloseSet palavrachave = NothingNext

Compartilhar este post


Link para o post
Compartilhar em outros sites

faça assimstrpalavrachave = "flamengo, palmeiras"MyArray = Split(strpalavrachave, ",")

For I = LBound(MyArray) to Ubound(MyArray)Set palavrachave = Server.CreateObject("ADODB.Recordset")palavrachave.Open "SELECT * FROM 1ALERTA WHERE LCase(palavrachave) LIKE '%" & LCase(Trim(MyArray (I))) & "%' ", ConexaoIf not palavrachave.EOF Then		strNome = palavrachave("nome")		strEmail = palavrachave("email")		response.write strEmail &"<br><br><br>" end ifpalavrachave.CloseSet palavrachave = NothingNext
Estranho... dessa forma ele encontra e imprime natela SOMENTE 1 registro. Sendo que existe mais...Complicado isso heim...Mais alguma opção?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta outra abordagem, faz um SELECT de tudo. E executa um WHILE até o final dos registros.Assim você verifica cada registro procurando as STRING's que você precisa através do ASP.OK..!!?? T+...

Compartilhar este post


Link para o post
Compartilhar em outros sites

ou ainda...

For I = LBound(MyArray) to Ubound(MyArray)Set palavrachave = Server.CreateObject("ADODB.Recordset")palavrachave.Open "SELECT * FROM 1ALERTA WHERE LCase(palavrachave) LIKE '%" & LCase(Trim(MyArray (I))) & "%' ", ConexaoIf not palavrachave.EOF Thendo while not palavrachave.eot		strNome = palavrachave("nome")		strEmail = palavrachave("email")		response.write strEmail &"<br><br><br>" palavrachave.movenextloopend ifpalavrachave.CloseSet palavrachave = NothingNext
verifique uma coisa...palavrachave está sendo usado como objeto e como variavel no Sql

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta outra abordagem, faz um SELECT de tudo. E executa um WHILE até o final dos registros.Assim você verifica cada registro procurando as STRING's que você precisa através do ASP.OK..!!?? T+...

ASSIM:
<%strpalavrachave = "flamengo, palmeiras"Set palavrachave = Server.CreateObject("ADODB.Recordset")palavrachave.Open "SELECT * FROM 1ALERTA WHERE palavrachave LIKE '%" & strpalavrachave & "%' ", ConexaoIf palavrachave.EOF Thenresponse.write "Não foi encontrado nenhum alerta para esta PALAVRA-CHAVE"Elsewhile Not palavrachave.EOF%><%strNome = palavrachave("nome")strEmail = palavrachave("email")response.write strEmail &"<br><br><br>" %> <%palavrachave.MoveNextwend End Ifpalavrachave.CloseSet palavrachave = Nothing%>
Não deu certo também... a resposta é de q nao achou nenhum registro."Não foi encontrado nenhum alerta para esta PALAVRA-CHAVE"Ja to ficando doido com isso...Será q existe alguma forma de fazer isso funcionar???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nesse seu script você não fez a busca das strings pelo ASP e continua usando a variável strpalavrachave no select e de forma incorreta.

 

Pra fazer um loop em todos os registros você não pode utilizar a palavrachave como parâmetro da consulta.

 

OK..!!?? T+...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nesse seu script você não fez a busca das strings pelo ASP e continua usando a variável strpalavrachave no select e de forma incorreta.

 

Pra fazer um loop em todos os registros você não pode utilizar a palavrachave como parâmetro da consulta.

 

OK..!!?? T+...

Entao é impossivel fazer o q to querendo??

 

utilizando assim:

strpalavrachave = "flamengo, vasco"MyArray = Split(strpalavrachave, ",")For I = LBound(MyArray) to Ubound(MyArray)Set palavrachave = Server.CreateObject("ADODB.Recordset")palavrachave.Open "SELECT * FROM 1ALERTA WHERE LCase(palavrachave) LIKE '%" & LCase(Trim(MyArray (I))) & "%' ", ConexaoIf not palavrachave.EOF Thendo while not palavrachave.eof		strNome = palavrachave("nome")		strEmail = palavrachave("email")		response.write strEmail &"<br><br><br>" palavrachave.movenextloopend ifpalavrachave.CloseSet palavrachave = NothingNext
Eu consigo um resultado bom... o único problema

é q se existir 1 registro com as 2 palavraschave... esse

registro é repetido 2 vezes... tentei usar o distinct para não

repetir e nao certo!!

 

Será q não tem como resolver só esse problema?

 

Valeu!

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao é impossivel fazer o q to querendo??

Não é impossível, só sugeri que você trate o filtro no ASP e não na consulta SQL.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ou ainda...

For I = LBound(MyArray) to Ubound(MyArray)Set palavrachave = Server.CreateObject("ADODB.Recordset")palavrachave.Open "SELECT * FROM 1ALERTA WHERE LCase(palavrachave) LIKE '%" & LCase(Trim(MyArray (I))) & "%' ", ConexaoIf not palavrachave.EOF Thendo while not palavrachave.eot		strNome = palavrachave("nome")		strEmail = palavrachave("email")		response.write strEmail &"<br><br><br>" palavrachave.movenextloopend ifpalavrachave.CloseSet palavrachave = NothingNext
verifique uma coisa...palavrachave está sendo usado como objeto e como variavel no Sql
Jonathan,ótima saída assim... mas houve um probleminha só...Se existir um registro contendo essas duas palavraschave do array, este registroé impresso na tela 2 vezes... tentei usando o distinct para nao repetir, masnão funcionou!Será q há agora uma luz no fim do túnel?valeu.abraço.

Entao é impossivel fazer o q to querendo??

Não é impossível, só sugeri que você trate o filtro no ASP e não na consulta SQL.
Ô vagnerzao... mas como colega q vou fazer isso????Já tentei d tudo qto é jeito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal.. seria possivel transformar os valores do array em variaveis? sendoq para cada palavra uma variavel qualquer.fazendo isso, eu faria a consulta palavra por palavra...até o momento a única solução q vejo.

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.