Ir para conteúdo

POWERED BY:

Arquivado

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

marcelocardoso

[Resolvido] BOF e EOF

Recommended Posts

Pessoal!

 

Alguem me ajuda neste IF, poderiam me informar oque faz este bloco de código, na prática, oque faz o BOF e o EOF, neste caso.

Será que está correta este código.

 

Estou me quebrando neste IF, alías, sempre me quebro em IF's.

Por gentileza, me expliquem se possível, oque cada linha faz.

Obrigado.

 

 


  BuscaDigito = Replace(Trim(Request.QueryString("pesquisar")),"'","")
IF BuscaDigito = "" OR IsNull(BuscaDigito) OR IsEmpty(BuscaDigito) THEN 
  Response.Write "Caso 1, input em branco"
 'Response.Redirect("lista.asp") 
  ELSE

SET VF = ObjCX.Execute("SELECT * FROM Produtos WHERE PNome = '" & BuscaDigito & "' AND POpcao = TRUE AND POpcaoPr = FALSE")
           IF VF.BOF AND VF.EOF THEN

            Response.Write "Caso 2, a busca vai para produtos 1"
		   'Response.Redirect("prod1.asp?pesquisar=") & BuscaDigito
                   ELSE
	        Response.Write "Caso 3, a busca vai para produtos 2"
           'Response.Redirect("prod2.asp?pesquisar=") & BuscaDigito

       END IF
END IF

 

 

Veja se minha logica está certa, pois não consigo ir para o caso 3, somente até o caso 2.

Agradeço desde já ajuda dos colegas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso 2, se o BOF (Begin of File) e o EOF (End of File) forem verdadeiros, ele executa uma ação, na prática, se o resultado da query não apresentar resultados, ele executa a açao.

 

Quando preciso que execute o caso 3 mas também quero uma ação para o caso 2, faço assim:

 
IF not VF.BOF AND not VF.EOF THEN
Response.Write "Caso 3, a busca vai para produtos 2" 
                  'Response.Redirect("prod2.asp?pesquisar=") & BuscaDigito 
ELSE
Response.Write "Caso 2, a busca vai para produtos 1" 
                          'Response.Redirect("prod1.asp?pesquisar=") & BuscaDigito 

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá uma olhada neste link

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu xanburzum!

Vou ver oque consigo agora, qualquer coisa volto a postar.

 

XAMBURZUM E COLEGAS!

 

Testei agora, mas ainda não estou conseguindo, e acredito que meu caso, não tem solução.

Estou com este código.

 


  BuscaDigito = Replace(Trim(Request.QueryString("pesquisar")),"'","")
IF BuscaDigito = "" OR IsNull(BuscaDigito) OR IsEmpty(BuscaDigito) THEN 
  Response.Write "Caso 1, input em branco"
ELSE
    SET VF = ObjCX.Execute("SELECT * FROM Produtos WHERE ProdutosNome = '" & BuscaDigito & "' AND ProdutosOpcao = TRUE AND ProdutosOpcaoPromocao = FALSE")
 IF VF.EOF AND VF.BOF THEN
        Response.Write "Caso 2, a busca vai para produtos"          
         ELSE 
          'IF VF.BOF AND NOT VF.EOF THEN
	             Response.Write "Caso 3, a busca vai para promocoes"
                     'ELSE
	             'Response.Write "Nada foi encontrado"
          'END IF
 END IFEND IF

 

TENHO UM BANCO COM UMA TABELA CHAMADA PRODUTOS, E NELA EU SETO UM SIM(TRUE) PARA PRODUTOS E NÃO(FALSE) PARA PROMOÇÕES

pois bem, o que preciso é o seguinte.

 

1) quero que a busca verifique no banco primeiro se o valor digitado na busca existe no banco produtos;

2) se não encontrar, ele traz produtos com toda a listagem;

3) caso o valor é encontrado na tabela produtos, ele deve verificar pelo um campo SIM/NÃO do banco, se é TRUE(produtos.asp) ou FALSE(promocoes.asp) e redirecionar para cada pagina.

4) se o produto existir no banco de dados e for setado no banco TRUE, ele deve ir para o caso onde manda para a pagina produtos.asp;

5) se o produto existir no banco de dados e for setado no banco FALSE, ele deve ir para o caso onde manda para a página de promoçoes.asp;

 

Basicamente é isso, não sei se me expliquei bem.

Mas me embanano mesmo é nos ifs....

 

Me ajudem, por gentileza.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha este exemplo ele coloca produtos em promoção e retira também, sempre atualizando atraves do status com a SQL UPDATE

 

strSQL = "UPDATE Produtos SET Promo = True "
strSQL = strSQL & "WHERE COD_Produto = " & varID

 

PromocaoColocar1.asp

<%
Option Explicit
'Admin das promoções - colocar
%>
<!--#include file="CheckLogin.asp"-->
<!--#include file="../Asp/bib_conexao.asp"-->
<%
Dim strSQL, Conexao, rs, varPesquisa
varPesquisa = Request("pesquisa")
varPesquisa = Trim(Replace(varPesquisa, "'", ""))

strSQL = "SELECT COD_Produto, Produto, Descricao, VRL_Unitario FROM Produtos "
strSQL = strSQL & "WHERE Produto LIKE '%" & varPesquisa & "%' AND Promo = false  OR "
strSQL = strSQL & "Descricao LIKE '%" & varPesquisa & "%' AND Promo = false "
strSQL = strSQL & "ORDER BY Produto"
%>
<HTML>
<HEAD>
</HEAD>
<title>Administração de promoções - Colocar</title>
<BODY marginheight=0 topmargin=0 leftmargin=0 marginwidth=0>

<div align=left> <font size=5 face=verdana,arial,helvetica color=black><b> </b></font>
<table width="93%" border="0">
 <tr> 
   <td width="67%"><font size=3 face=verdana,arial,helvetica color=black><b>Administração 
       de Promoções - Colocar</b></font></td>
   <td width="33%"> 
     <form method="post" action="<%= Request.ServerVariables("SCRIPT_NAME") %>">
       <input type="text" name="pesquisa" size="15" maxlength="50">
       <input type=image src="../pictures/go2.gif" width="27" height="17" name="image">
     </form>
   </td>
 </tr>
</table>
<table width="82%" border="0" cellpadding="0" cellspacing="0">
 <%
 'abre a conexao
 Call abre_conexao

 'executa a instrução SQL
 Set rs=Conexao.Execute(strSQL)

 IF rs.EOF then
    Response.write "Não existem produtos a serem colocados em promoção..."
 ELSE
    While not rs.EOF
       %> 
     <tr> 
       <td colspan="2"> 
        <div align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">
        <%
        Response.Write "<b>" & rs("Produto")
        Response.write " - Preço: </b>" & FormatNumber(rs("VRL_Unitario"),2)
        %> 
        <a href="PromocaoColocar2.asp?id=<%=rs("COD_Produto")%>">Colocar</a>
        <%
        Response.write "<br>" & rs("Descricao") %>
        </font>
        </div>
       </td>
     </tr>
     <tr> 
       <td colspan="2"> 
         <hr align="left" width=550>
       </td>
     </tr>
       <%
       rs.movenext
    Wend
 End If
 rs.Close
 'fecha a conexao
 Call fecha_conexao
 Set rs = Nothing
 %> 
</table>
</div>
</BODY>
</HTML>

 

PromocaoColocar2.asp

<%
Option Explicit
'Admin das promoções - colocar
%>
<!--#include file="CheckLogin.asp"-->
<!--#include file="../Asp/bib_conexao.asp"-->
<%
Dim Conexao, rs, strSQL, varID
varID = Request("id")

strSQL = "UPDATE Produtos SET Promo = True "
strSQL = strSQL & "WHERE COD_Produto = " & varID

'abre a conexao
Call abre_conexao
Set rs=Conexao.Execute(strSQL)

'fecha a conexao
Call fecha_conexao
Set rs = Nothing
%>
<HTML>
<BODY bgcolor="#FFFFFF">
<DIV align="center">
 <P> </P>
 <P><FONT color="#FF6633" face="verdana"><B><font size=4 face=verdana,arial,helvetica color=black><b><font color="#663399">Produto 
   colocado na promoção !!!<br>
   </font><br>
   </b></font><b> <font size=3 face=verdana,arial,helvetica color=black><b> </b></font></b></B></FONT><A href="PromocaoColocar1.asp"><img src="../pictures/voltar.gif" border="0"></A> 
 </P>
 </DIV>
</BODY>
</HTML>

 

este para retirar o produto da promoção

PromocaoRetirar1.asp

<%
Option Explicit
'Admin das promoções - retirar
%>
<!--#include file="CheckLogin.asp"-->
<!--#include file="../Asp/bib_conexao.asp"-->
<%
Dim strSQL, Conexao, rs, varPesquisa
varPesquisa = Request("pesquisa")
varPesquisa = Trim(Replace(varPesquisa, "'", ""))

strSQL = "SELECT COD_Produto, Produto, Descricao, VRL_Unitario FROM Produtos "
strSQL = strSQL & "WHERE Produto LIKE '%" & varPesquisa & "%' AND Promo = true  OR "
strSQL = strSQL & "Descricao LIKE '%" & varPesquisa & "%' AND Promo = true "
strSQL = strSQL & "ORDER BY Produto"
%>
<HTML>
<HEAD>
</HEAD>
<title>Administração de promoções - Retirar</title>
<BODY marginheight=0 topmargin=0 leftmargin=0 marginwidth=0>

<div align=left> <font size=5 face=verdana,arial,helvetica color=black><b> </b></font>
<table width="93%" border="0">
 <tr> 
   <td width="67%"><font size=3 face=verdana,arial,helvetica color=black><b>Administração 
       de Promoções - Retirar</b></font></td>
   <td width="33%"> 
     <form method="post" action="<%= Request.ServerVariables("SCRIPT_NAME") %>">
       <input type="text" name="pesquisa" size="15" maxlength="50">
       <input type=image src="../pictures/go2.gif" width="27" height="17" name="image">
     </form>
   </td>
 </tr>
</table>
<table width="82%" border="0" cellpadding="0" cellspacing="0">
<%
'abre a conexao
Call abre_conexao

'executa a instrução SQL
Set rs=Conexao.Execute(strSQL)

IF rs.EOF then
  Response.write "Não existem produtos em promoção..."
ELSE
  While not rs.EOF
   %> 
   <tr> 
     <td colspan="2"> 
       <div align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">
        <%
        Response.Write "<b>" & rs("Produto")
        Response.write " - Preço: </b>" & FormatNumber(rs("VRL_Unitario"),2)%> 
        <a href="PromocaoRetirar2.asp?id=<%=rs("COD_Produto")%>">Retirar</a>
        <%
        Response.write "<br>" & rs("Descricao")
        %>
       </font></div>
     </td>
   </tr>
   <tr> 
     <td colspan="2"> 
       <hr align="left" width=550>
     </td>
   </tr>
  <%
     rs.movenext
  Wend
  End If
  rs.Close
  'fecha a conexao
  Call fecha_conexao
  Set rs = Nothing
  %> 
</table>
</div>
</BODY>
</HTML>

 

PromocaoRetirar2.asp

<%
Option Explicit
'Admin das promoções - retirar
%>
<!--#include file="CheckLogin.asp"-->
<!--#include file="../Asp/bib_conexao.asp"-->
<%
Dim Conexao, rs, strSQL, varID
varID = Request("id")

strSQL = "UPDATE Produtos SET Promo = False "
strSQL = strSQL & "WHERE COD_Produto = " & varID

'abre a conexao
Call abre_conexao
Set rs=Conexao.Execute(strSQL)

'fecha a conexao
Call fecha_conexao
Set rs = Nothing
%>
<HTML>
<BODY bgcolor="#FFFFFF">
<DIV align="center">
 <P> </P>
 <P><FONT color="#FF6633" face="verdana"><B><font size=4 face=verdana,arial,helvetica color=black><b><font color="#663399">Produto 
   retirado da promoção !!!<br>
   </font><br>
   </b></font><b> <font size=3 face=verdana,arial,helvetica color=black><b> </b></font></b></B></FONT><A href="AdmPromocaoRetirar1.asp"><img src="../pictures/voltar.gif" border="0" width="32" height="32"></A> 
 </P>
 </DIV>
</BODY>
</HTML>

Compartilhar este post


Link para o post
Compartilhar em outros sites

XAMBURZUM, Obrigado pelo exemplo:

 

Mas fiquei agora com este código, que acredito que agora está estruturado como deve ser, mas ainda não consigo partir para os casos, veja só:

<%
IF Replace(Trim(Request.QueryString("pesquisar")),"'","") = "" OR IsNull(Replace(Trim(Request.QueryString("pesquisar")),"'","")) OR IsEmpty(Replace(Trim(Request.QueryString("pesquisar")),"'","")) THEN 
  Response.Write "Caso 1, input em branco"
  Response.End
END IF

SET VF = ObjCX.Execute("SELECT * FROM Produtos WHERE ProdutosNome = '" & Replace(Trim(Request.QueryString("pesquisar")),"'","") & "'")
IF NOT VF.EOF AND NOT VF.BOF THEN
      	IF VF.EOF AND VF.BOF THEN
            	Response.Write "Caso 2, a busca vai para produtos"
           	'Response.redirect (produtos.asp)
			 Response.End
                 	ELSE
         	Response.Write "Caso 3, a busca vai para promocoes"
           	'Response.redirect (promocoes.asp)
			 Response.End
   	END IF      	
ELSE 
Response.Write "Nada foi encontrado"
Response.End
END IF

 

1) no campo de busca, se ele clicar em ok, e nao digitar nada no input, ele pega o primeiro IF, até ai tudo joia.

2) aí se caso ele digitar alguma coisa no input da busca e clicar em ok, ele deve procurar no banco se tem algo pelo nomedoproduto, se tem deve ir para os if CASO 2 ou CASO 3;

3) aí se não existir oque ele digitou no banco de dados, deve ir para depois do ultimo ELSE, Nada foi encontrado.

 

Oque devo estar fazendo de errado ainda?

Consegue me ajudar....

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

na verdade seria uma simples busca... não é ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aparentemente sim, mas preciso do seguinte:

 

 

1) o banco contem uma tabela PRODUTOS, com campos nome, imagem, e etc... e tem um campo SIM/NÃO, onde os que estão TRUE, são listados em produtos.asp, e FALSE são listados em promoções.asp.

2) criei uma input para busca, que manda a o conteudo para a pagina buscar.asp;

3) no buscar.asp, deve verificar se foi digitado alguma coisa, se não foi, joga para a pagina produtos.asp, que listará tudo que existe na tabela PRODUTOS;

4) agora, caso tenha sido digitado alguma coisa na busca, e o nome de produto existir na tabela PRODUTOS, tem que existir algo para verificar se o produto é TRUE ou FALSE, e se for TRUE, deve jogar para a página o valor da busca para produtos.asp, e se for FALSE, deve jogar para a página promocoes.asp;

5) e se o valor digitado não existir no banco de dados, ele deve jogar também para a página produtos.asp, no qual listará tudo que tem nele.

 

Será que consegue me ajudar nisso, pois acredito que agora fui bem claro.

Nao estou conseguindo me ajeitar e nos IFs que fiz para dar certo.

 

Grato pela sua ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos lá:

 

Aparentemente sim, mas preciso do seguinte:

 

 

1) o banco contem uma tabela PRODUTOS, com campos nome, imagem, e etc... e tem um campo SIM/NÃO, onde os que estão TRUE, são listados em produtos.asp, e FALSE são listados em promoções.asp.

2) criei uma input para busca, que manda a o conteudo para a pagina buscar.asp;

3) no buscar.asp, deve verificar se foi digitado alguma coisa, se não foi, joga para a pagina produtos.asp, que listará tudo que existe na tabela PRODUTOS;

 

dim busca
busca=request.form("busca")

if busca = "" then
response.redirect "produtos.asp"

(... continua) 

 

4) agora, caso tenha sido digitado alguma coisa na busca, e o nome de produto existir na tabela PRODUTOS, tem que existir algo para verificar se o produto é TRUE ou FALSE, e se for TRUE, deve jogar para a página o valor da busca para produtos.asp, e se for FALSE, deve jogar para a página promocoes.asp;

 

(...)
else
sql = "select * from produtos where nome ="&busca
set rs = conn.execute(sql)

if not rs.eof then
 if rs("v-f") = true then
 response.redirect "'produtos.asp&id='&busca&'"
 else
 response.redirect "promocoes.asp"
end if
(... continua)

 

 

5) e se o valor digitado não existir no banco de dados, ele deve jogar também para a página produtos.asp, no qual listará tudo que tem nele.

 

(...)
else
response.redirect "produtos.asp"
end if

 

Acho que é isso, espero que ajude :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vinicius e Xamburzum...

 

Consegui resolver agora, fiz assim:

 


<%
dim busca
   busca = Replace(Trim(Request.QueryString("pesquisar")),"'","")

if busca = "" then
    'response.write "CASO 1 - campo sem nada"
     response.redirect "produtos.asp"
   else
        set rs = ObjCX.Execute("SELECT * FROM TBProdutos WHERE ProdutosNome LIKE '%" & busca & "%' OR ProdutosSigla LIKE '%" & busca & "%'")
                if not rs.eof then
                    if rs("ProdutosOpcao") = true and rs("ProdutosOpcaoPromocao") = false then
				   'response.write "CASO 2 - campo preenchido para produtos"
                       response.redirect "produtos.asp?pesquisar=" & busca
                            else
				   'response.write "CASO 3 - campo preenchido para promocoes"
                       response.redirect "promocoes.asp?pesquisar=" & busca
                    end if
                else
  'response.write "CASO 4 - busca nao encontrou nada, vai para produtos e lista tudo"
   response.redirect "produtos.asp"
        end if
end if%>

 

 

Obrigado pela ajuda de todos, valeu mesmo.

Grato...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apesar de resolvido quero deixar aqui minha contribuição:

 

Acho que voce teria mais facilidade usando o case select,digo quando temos tantas condições o mais fácil é separa-los,meu professor sempre dizia que o IF deveria ser usado somente na seguinte estruduta

 

if .... then

....

else

.....

 

Pois um encadeamento de if´s geralmente fica muito complexo.

 

Exemplo usando case select

 

 

Select case busca = Input busca

 

case 1: Mostraria a msg e depois redirecionaria novamente para a pagina

 

caso2: iria verificar se existem os produtos e mandaria para cada pagina

 

else

exibiria a pagina de todos os produtos.

 

 

Quero deixar claro que o meu exemplo é sobre a lógica, portanto não me cobrem nomenclatura,etc, pois estou a algum tempo sem programar efetivamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

aproveitando.... o topico, acho que isso se encaixa aqui..

 

tenho um banco de dados em Access (coisa simples) com Código, Data, Titulo, Materia

 

Quando não tenho nada dentro do banco, ele esxibe o erro de BOF E EOF certo?

 

o que fazer para quando acontecer esse erro ao invez de exibir a msg de erro, aparecer uma mensagem personalizada, tipo: Em breve novas matérias e tals..??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode ser assim:

if rs.eof or rs.bof then
response.write "em breve alguma coisa"
else
... (código com o resultado da consulta sql)
end if

 

Quando tiver outras duvidas, crie um novo tópico, assim outras pessoas que também tenham a sua duvida também poderão consultar seu topico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vinicius...

 

criei um tópico com a minha dúvida.. se puder postar sua resposta lá.. ainda tenho uma dúvida a fazer.. e respondo assim que você postar lá..

 

Desculpe e obrigado pela resposta!

 

o tópico é: http://forum.imasters.com.br/topic/426769-erro-personalizado-eof-e-bof/

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.