Ir para conteúdo

POWERED BY:

Arquivado

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

Espanhol

Select Case múltiplo

Recommended Posts

O campo status pertence tanto à tabela Artigos quanto à tabela Banco_textos

 

E em ambos os casos tem valor como ativo

 

Ou seja, a busca só exibirá resultados onde o status estiver como 'ativo'

 

 

:(

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas voce precisa colocar o nome da tabela junto para nao dar ambiguidade

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara tenta assim

Sql = "SELECT A.titulo FROM Artigos AS A INNER JOIN Banco_textos AS B ON A.id = B.id WHERE (A.titulo LIKE '%" & busca & "%' Or B.titulo LIKE '%" & busca & "%') AND status = 'ativo'  ORDER BY A.id DESC"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Marcus tentei a sua dica, mas deu erro:

 

Microsoft OLE DB Provider for ODBC Drivers error '80004005'

 

Column 'status' in where clause is ambiguous

 

/buscadortxt.asp, line 102

 

Mario Monteiro, colocar o nome da tabela junto de 'status' ficaria assim?

 

Sql = "SELECT Artigos.titulo, Banco_textos.titulo FROM Artigos titulo INNER JOIN Banco_textos titulo ON Artigos.titulo = Banco_textos.titulo WHERE Artigos.titulo, Banco_textos.titulo   LIKE   '%" & busca & "%'   AND  [b]A.status = 'ativo' B.status = 'ativo'[/b] ORDER BY Artigos.id, Banco_textos.id DESC"

Tentei dessa forma e deu pau novamente.

Experimentei arrancar a condicional de status = 'ativo' e aí retornou isso quando faço qualquer busca:

 

ADODB.Recordset error '800a0cc1'

 

Item cannot be found in the collection corresponding to the requested name or ordinal.

 

/buscadortxt.asp, line 122

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique se você não esta tentando trabalhar com um RecordSet que não faz parte da coleção de registros. Isso acontece na maioria das vezes por que existe erro de ortogtafia e não confere com um campo da Base de Dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, dei uma olhada aqui e fiz um scan visual pra ver se tinha alguma irregularidade.

Mas não detectei nada. Eis o meu ASP completo abaixo:

 

Ps: quando digito letras isoladas ele dá erro.... quando digito uma palavra completa, ele diz que "A busca não encontrou nenhuma ocorrência relacionada ao ítem pesquisado." Que loucura!

 

Ps 2: quando utilizo essa forma abaixo dá tudo certo, então, não se trata (aparentemente) de irregularidade no código, pois se houvesse daria pau também dessa forma:

 

Sql = "SELECT titulo, secao, descricao, status, id FROM Artigos WHERE titulo LIKE '%" & busca & "%' AND status = 'ativo' ORDER BY id DESC"

 

 

código ASP completo

<!--#include file="conectar.asp"-->
<!--#include file="cabecalho.asp"-->
<% AbreConexao %>


<head>
.
.
.
</head>

<body>


<div id="tudo"> 



  <div id="topo"> 
  </div>





  <div id="conteudo"> 

	<div id="identificador"> 
	  <h1><img src="arquivos/titulo_buscadortxt.gif" alt="" width="135" height="18" /></h1>

	  <p>acervo geral de textos: <strong></strong> arquivos disponíveis</p>
	  <%
	Sql_conta = "SELECT count(id) as TOTAL FROM Artigos"
	Set rs_contart = Server.CreateObject("ADODB.Recordset")
	Set rs_contart = Conexao.Execute(Sql_conta)
	%>
	  <h2>artigos <strong>(<%response.write rs_contart("TOTAL")%>)</strong> 

		<%
	Sql_conta = "SELECT count(id) as TOTAL FROM Banco_textos"
	Set rs_contabtx = Server.CreateObject("ADODB.Recordset")
	Set rs_contabtx = Conexao.Execute(Sql_conta)
	%>
		- banco de textos <strong>(<%response.write rs_contabtx("TOTAL")%>)</strong></h2>



	  <div class="busca"> 
		<form name="form" id="form" method="post" action="buscadortxt.asp">
		  <input name="busca" type="text" class="input" value="Faça uma 

busca aqui" 
		  onfocus="if(this.value=='Faça uma busca aqui') 

{this.value='';}" size="30" />
		  <input name="submit" type="submit" class="bt" value="Buscar" />
		</form>
	  </div>


	</div>




	<div id="buscapor"> 
	  <% 
	'recupera a variavel do formulario
	busca = Request.Form("busca")



Sql = "SELECT A.titulo FROM Artigos AS A INNER JOIN Banco_textos AS B ON A.id = B.id WHERE (A.titulo LIKE '%" & busca & "%' Or B.titulo LIKE '%" & busca & "%') AND status = 'ativo'  ORDER BY A.id DESC"
	Set rs = Conexao.Execute(Sql)
	%>

	  <p class="txtbusca">Exibindo resultado(s) da busca textual por: <u><%=busca%></u></p>
	</div>


	<div id="resultados"> 
	  <% 
	IF not rs.eof AND busca <> "" THEN
	%>

	  <%
WHILE NOT RS.EOF
%>

	  <%
   Select Case rs("secao")
	   Case "Artigo"
		 geralink = "artigo.asp?id="
		 gerasecao = "Artigo"


	   Case "banco de textos"
		 geralink = "vertexto.asp?id="
		 gerasecao = "Banco de Textos"

   End Select
%>
	  <h2><%=gerasecao%></h2>
	  <h1 class="titulo"><a href="<%=geralink%><%=rs("id")%>" target="_parent"><%=rs("titulo")%></a></h1>
	  <p><a href="<%=geralink%><%=rs("id")%>"  target="_parent"><%=rs("descricao")%></a></p>

	  <%
RS.MoveNext
WEND
%>
	  <%
	ELSE
	%>

	  <h1 class="titulo">A busca não encontrou nenhuma ocorrência relacionada ao ítem pesquisado.</h1>

	  <%
	END IF
	%>


	</div>



  </div>





  <div id="rodape"> 
  </div>





</div>



<% 
rs.Close
set rs =nothing

rs_contart.close
set rs_contart = nothing

rs_contabtx.close
set rs_contabtx = nothing

FechaConexao %>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

entendi então é assim, ele deu esse erro porque existe a coluna status nas duas tabelas agora o que você tem que faze é seta qual coluna status que você qué, a da tabela A ou da tabela B, se for da tabela A fica assim

 

Sql = "SELECT A.titulo FROM Artigos AS A INNER JOIN Banco_textos AS B ON A.id = B.id WHERE (A.titulo LIKE '%" & busca & "%' Or B.titulo LIKE '%" & busca & "%') AND A.status = 'ativo'  ORDER BY A.id DESC"

se for da tabela B fica assim

 

Sql = "SELECT A.titulo FROM Artigos AS A INNER JOIN Banco_textos AS B ON A.id = B.id WHERE (A.titulo LIKE '%" & busca & "%' Or B.titulo LIKE '%" & busca & "%') AND B.status = 'ativo'  ORDER BY A.id DESC"

entendeu,

qualquer coisa posta aí...

 

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Marcos, testei as duas possibilidades e nada.

 

Na verdade gostaria de setar as duas tabelas, pois ambas possuem o campo status. Alguns textos em Artigos e Banco_textos estão com valor 'inativo'. Neste caso, a busca só exibiria os textos com valor 'ativo' no campo status.

 

A busca continua retornando sem resultado algum... e quando digito um caractere bobo, tipo a letra A.... ele dá erro.

:(

Compartilhar este post


Link para o post
Compartilhar em outros sites

esta sendo retornadp algum erro ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

xanburzum esse é o erro:

ADODB.Recordset error '800a0cc1'

 

Item cannot be found in the collection corresponding to the requested name or ordinal.

 

/buscadortxt.asp, line 124

 

Quando eu digito um caractere bobo alfabético, a letra A ou C por exemplo. Quando digito uma palavra normal, ele retorna dizendo: A busca não encontrou nenhuma ocorrência relacionada ao ítem pesquisado.

 

Vale a pena dizer, que tanto os caracteres quanto as palavras digitadas, estão presentes nos registros das tabelas Artigos e Banco_textos .

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique se você não esta tentando trabalhar com um RecordSet que não faz parte da coleção de registros. Isso acontece na maioria das vezes por que existe erro de ortogtafia e não confere com um campo da Base de Dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal tive um estalo, e aí resolvi mudar a forma da busca.

Coloquei um input select para a pessoa selecionar onde será a busca. Em Artigos ou em Banco_textos .

Então, o valor nmtabela retorna dentro da string SQL e realiza assim a verificação na tabela selecionada.

 

Já fiz os testes e está tudo belezura, o único probleminha é que uma função SELECTED n retorna corretamente.

A idéia é que ao mostrar os resultados de uma busca, o input select retorne com a opção que foi selecionada anteriormente. Ex: busquei pela palavra "debate" e selecionei "Artigos" então, no momento que for mostrar os resultados, o campo input nmtabela retorne como SELECTED para o valor "Artigos".

O problema deve ser lá na função... mas n sei qual é.

 

 

<%
busca = Request.Form("busca")
nmtabela = Request.Form("nmtabela")
%>



	  <div class="busca"> 
		<form name="form" id="form" method="post" action="buscadortxt.asp">
		   <input name="busca" type="text" class="input" value="<%=busca%>" onfocus="if(this.value=='<%=busca%>') {this.value='';}" size="30" />

		   <%
		'funcao do campo nmtabela
		  FUNCTION SELECTED( Artigos, Banco_textos )
			  IF cSTR( Artigos ) = cSTR( Banco_textos ) THEN
				SELECTED = " SELECTED "
				  ELSE
				SELECTED = ""
   			  END IF
			END FUNCTION
		%>
 		   <select name="nmtabela" id="nmtabela" class="input">
			 <option <%if cstr(ucase("& nmtabela &")) = ucase("Artigos") then response.write("selected=""selected""")%> value="Artigos">Artigos</option>

			 <option <%if cstr(ucase("& nmtabela &")) = ucase("Banco_textos") then response.write("selected=""selected""")%> value="Banco_textos">Banco de Textos</option>
		   </select>

		   <input name="submit" type="submit" class="bt" value="Buscar" />
		</form>
	  </div>




<% 
Sql = "SELECT titulo, secao, descricao, status, id FROM "& nmtabela &" WHERE titulo LIKE '%" & busca & "%' OR descricao LIKE '%" & busca & "%' AND status = 'ativo' ORDER BY id DESC"
	Set rs = Conexao.Execute(Sql)
%>

 

 

O outro trauma é que quero uma contagem de todos os registros da tabela Artigos e da tabela Banco_textos. Mas só sei fazer com uma tabela apenas (ver exemplo).

Como posso fazer com duas?

 

exemplo

<%
	Sql_conta = "SELECT count(id) as TOTAL FROM Artigos"
	Set rs_contatudo = Server.CreateObject("ADODB.Recordset")
	Set rs_contatudo = Conexao.Execute(Sql_conta)
	%>


	  <p>acervo geral de textos: <%response.write rs_contatudo("TOTAL")%> arquivos</p>

Compartilhar este post


Link para o post
Compartilhar em outros sites

<%

Dim rs_contatudo

Set rs_contatudo = Conexao.Execute("Select COUNT(id) As TotalConta From Artigos")

If Not rs_contatudo.Eof Then

Response.Write("<p>acervo geral de textos: "&rs_contatudo("TotalConta")&" arquivos</p>")

End If

Set rs_contatudo = Nothing

%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu Ted! Mas pra contagem de uma única tabela eu já consigo meu velho. O trauma é fazer a contagem em duas.

Não estou conseguindo fazer a contagem nas tabelas Artigos e Banco_textos no ítem id.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente fazer uma consulta encadeada, Select (Select count(teste) From este1) as total_1, (Select count(teste2) From teste2) as total_2

Compartilhar este post


Link para o post
Compartilhar em outros sites

xanburzum fiz um alteração na string depois de ver sua dica, e ficou assim:

 

 

<%
  Sql_conta = "SELECT (Select count(id) FROM Artigos) as TOTAL, (Select count(id) FROM Banco_textos) as TOTAL"
  Set rs_contatudo = Server.CreateObject("ADODB.Recordset")
  Set rs_contatudo = Conexao.Execute(Sql_conta)
%>

 

<p>acervo geral de textos: <%response.write rs_contatudo("TOTAL")%></p>

 

Mas em vez de retornar o valor total das duas tabelas, ele retornou apenas a quantidade de registros presentes na tabela 'Banco_textos'.

E agora?

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.