Foros del Web » Programando para Internet » ASP Clásico »

Buscador completo.

Estas en el tema de Buscador completo. en el foro de ASP Clásico en Foros del Web. HEY!! Saludos a todos!! Quisiera saber si se puede hacer un buscador que revise toda la base de datos o por lo menos todas las ...
  #1 (permalink)  
Antiguo 14/02/2005, 13:35
Avatar de messer  
Fecha de Ingreso: julio-2004
Mensajes: 467
Antigüedad: 19 años, 11 meses
Puntos: 5
Buscador completo.

HEY!!

Saludos a todos!!

Quisiera saber si se puede hacer un buscador que revise toda la base de datos o por lo menos todas las tablas que se le indiquen; y como sería eso??

Gracias
__________________
<script type="text/messerScript"><!--
window.onload=function(){ loadMesserRules(this.href) }
--></script>
  #2 (permalink)  
Antiguo 14/02/2005, 15:40
Avatar de messer  
Fecha de Ingreso: julio-2004
Mensajes: 467
Antigüedad: 19 años, 11 meses
Puntos: 5
Sera que es imposible??
__________________
<script type="text/messerScript"><!--
window.onload=function(){ loadMesserRules(this.href) }
--></script>
  #3 (permalink)  
Antiguo 14/02/2005, 18:51
Avatar de akela  
Fecha de Ingreso: septiembre-2000
Ubicación: Frente a la compu
Mensajes: 660
Antigüedad: 23 años, 9 meses
Puntos: 2
No, no es imposible, pero si complicado, aunque depende de como lo quieras hacer:

ya hay bastante información en este foro, sólo utiliza el buscador del este sitio y te llevarás una sorpresa (como me la llevé yo)

  #4 (permalink)  
Antiguo 14/02/2005, 23:52
Avatar de mamon  
Fecha de Ingreso: enero-2002
Ubicación: Lima
Mensajes: 1.302
Antigüedad: 22 años, 5 meses
Puntos: 3
en vdd yo creo q la mejor forma es primero crear (x código) una tabla temporal, revisas en cada tabla si existe lo que el usuario busca y lo guardas en esa tabla temporal... asi al final muestras los resultados de la tabla temporal... tienes q pensar q x ejemplo en este momento yo haya hecho una búsqueda y akela tb... se tiene q guardar nuestros resultados en tablas diferentes... xq no buscas cómo crear tablas x código en el foro? bueno ese es mi punto de vista.. q te parece?
__________________
Yo si sé lo que es trabajar duro, porque lo he visto.
  #5 (permalink)  
Antiguo 15/02/2005, 10:33
Avatar de sjam7  
Fecha de Ingreso: diciembre-2001
Ubicación: Guadalajara, Mexico
Mensajes: 3.672
Antigüedad: 22 años, 5 meses
Puntos: 16
y para que crear una tabla por cada busqueda???? te imaginas un sitio con muchos usuarios haciendo busquedas al mismo tiempo?

este es un codigo de un lenguaje que dependiendo de 1 variable busca en 2 diferentes tablas

la variable en recibe la indicacion de en que tabla buscar
checa la linea

if en="articulos" then

ahi se define en que tabla se busca, si pones otro if con la variable en o cambias esa solo cambias la sentencia SQL
SQL="SELECT * FROM articulos where " &Sacar(cadena, campos)

por la tabla que necesites

Código:
<%
cadena = request.form("busca")
en=request.form("en")

if en = "" then
en=request.querystring("en")
end if

pagina = Request.servervariables("HTTP_REFERER")
if pagina = "" then pagina=en&".asp"

if cadena="" then cadena =request.QueryString("busca")

if cadena="" then
response.redirect pagina
end if
base = request.form("base")
function Sacar(cadena,campos)

dim i
dim SacarAux
while InStr(cadena," ")
   Cadena=Replace(Cadena," ","+")
wend

if len(cadena)>0 then
   if InStr(cadena," ")>0 then 
	  Sacar= Sacar(left(cadena,InStr(cadena," ")-1),campos) & " OR " & Sacar(right(cadena,len(cadena)-InStr(cadena," ")),campos)
   elseif InStr(cadena,"+")>0 then 
	  Sacar=Sacar(left(cadena,InStr(cadena,"+")-1),campos) & " AND "& Sacar(right(cadena,len(cadena)-InStr(cadena,"+")),campos)
   elseif InStr(cadena,"-")>0 then 
Sacar=Sacar(left(cadena,InStr(cadena,"-")-1),campos) & " AND NOT " & Sacar(right(cadena,len(cadena)-InStr(cadena,"-")),campos)
   else
   'fijamos la sentencia
   SacarAux=""

i=1
SacarAux= "( " & campos(i) & " Like '%" & cadena & "%'"
i=i+1

   while len(campos(i))>0
	  SacarAux= SacarAux & " OR " & campos(i) & " Like '%" & cadena & "%'"
	  i=i+1
   wend

   SacarAux=SacarAux & " )"
   Sacar=SacarAux
   end if

else

sacar=""

end if 
end function


Set conexion = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.RecordSet")

if en="articulos" then
basedatos = Server.MapPath("base.mdb")
dim campos(3)
campos(1)="titulo"
campos(2)="contenido"
SQL="SELECT * FROM articulos where " &Sacar(cadena, campos)

else 

basedatos = Server.MapPath("base.mdb")
dim campos3(3)
campos3(1)="nombre"
campos3(2)="descripcion"
SQL="SELECT * FROM productos where producto=True And " &Sacar(cadena, campos3)
end if

conexion.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & basedatos & ";"

RS.CursorType=1
RS.LockType=2

RS.Open SQL, conexion

If not RS.EOF then
%>
				  <p> 
				  <table width="97%" border="0" cellpadding="3" cellspacing="0" bgcolor="#f2f2f2" class="bordeTODO">
					<tr> 
					  <td height="23" class="fondotoptabla"> <font size=2 face=Verdana, Arial, Helvetica, sans-serif color=#FFFFFF>Se 
					    encontraron: <b><%=Rs.recordcount%></b> resultados Con el texto: <b><%=cadena%></b></font> <%
if en="articulos" then
Do while Not RS.EOF
titulo = RS("titulo")
comentario = RS.Fields("contenido")
clicks = RS.Fields("vistas")
id = RS("id")
%> 
					<tr> 
					  <td valign="top" align="left"> <font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#000099"> 
					    <a href="articulos.asp?nota=<%=id%>&t=t06" class="liga1"> 
					    <b><%=titulo%></b></a></font> </td>
					</tr>
					<tr> 
					  <td> <font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#000099"> 
					    <%=contenido%></font><font color="#000099" face="Verdana, Arial, Helvetica, sans-serif"><br>
					    </font></td>
					</tr>
					<tr> 
					  <td> <font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000099"> 
					    <i>Visitas: <%=clicks%></i></font> <p> </td>
					</tr>
					<% 
RS.MoveNext
loop

else

Do while Not RS.EOF
nombre = RS.Fields("nombre")
descripcion = RS.Fields("descripcion")
precio = RS.Fields("precio")
id = RS("id")

nombre = replace(nombre,cadena,"<b>"&cadena&"</b>")
descripcion = replace(descripcion,cadena,"<b>"&cadena&"</b>")

%>
					<tr> 
					  <td valign="top" align="left"> <font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#000099"> 
					    <a href="productos.asp?id=<%=rs("id")%>&t=t03" class="liga1" > 
					    <b><%=nombre%></b></a></font> </td>
					</tr>
					<tr> 
					  <td> <font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#000099"> 
					    <%=descripcion%></font><font color="#000099" face="Verdana, Arial, Helvetica, sans-serif"><br>
					    </font></td>
					</tr>
					<tr> 
					  <td> <font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000099"> 
					    Precio: <%=formatcurrency(precio,2)%>&nbsp;<%=moneda%></font> <p>
<% 
RS.MoveNext
if not rs.eof then%><hr width="100%" size="1" noshade ><% end if%>
				    </td></tr>
					<%
loop
end if
else
%>
				    <p> <font size="3" face="verdana, arial" color="#5A6A83"> 
					  <center>
					    <b>Datos no encontrados</b> 
					  </center>
					  </font> 
				    <p> <font size="1" face="verdana, arial" color="#5A6A83"> 
					  Para realizar otra busqueda intente usando "+" para buscar 
					  varios datos dentro de un mismo registro o "-" para omitir 
					  algunos datos</font> 
				    <p> <a href="javascript:history.back()" class="a2">Regresar</a> 
					  <%
end if
'end if
RS.Close
Conexion.Close
%>
				  </table>	  <br>
  #6 (permalink)  
Antiguo 15/02/2005, 10:34
Avatar de sjam7  
Fecha de Ingreso: diciembre-2001
Ubicación: Guadalajara, Mexico
Mensajes: 3.672
Antigüedad: 22 años, 5 meses
Puntos: 16
de igual forma en www.desarrolloweb.com hay algunos ejemplos de buscador muy bien explicados
  #7 (permalink)  
Antiguo 15/02/2005, 10:58
Avatar de akela  
Fecha de Ingreso: septiembre-2000
Ubicación: Frente a la compu
Mensajes: 660
Antigüedad: 23 años, 9 meses
Puntos: 2
No yo creo que es mas fàcil mamon, que crear tablas temporales ya que armando un buen SQL todos los resultados quedan en tu RecordSet.

a lo que yo me refiero es que es complicado porque para mi lo fue, te cuento...

Historia de un buscador:
Hace poco me topé con la necesidad de hacer un buscador y yo pensé que con un simple LIKE de SQL lo iba a solucionar, entonces escribí mi sentencia

" SELECT * FROM T_documentos WHERE contenido LIKE '%"&palabra&"%' "

Y funcinò a medias porque la primera busqueda funcionó perfecto, pero luego quiese buscar una palabra con Acento (tilde) por ejemplo: "información" y mi super buscador no regreso nada, pero yo sabía que la palabra estaba ahí.

y luego un sudor frio recorrio mi frente y pensé (¿y si la palabra empieza con mayuscula?) ý ahí me dí cuenta de que nesecitaba hacer algo mas. buscando en el foro me encontrè con varias respuestas, que si quita el keysensitive de la base de datos que si haz una función para agregar los acentos, en fin....

terminè haciendo una funciòn que quitara la vocal acentuada y me la cambiara por un comodín de Informix para un solo caracter (en este caso el guión bajo "_" ) quedando la palabra así: "Informaci_n" (creo que el comodín para un sólo caracter en otros SQL's es el ?)

y mi SQL así:

" SELECT * FROM T_documentos WHERE contenido LIKE '%"&Ucase(palabra)&"%' OR contenido LIKE '%"&Lcase(palabra)&"%' "

asi me busca en mayusculas, minusculas y con acentos y sin acentos


con respecto a lo que dice masser de buscar en todas las tablas pues tendría que hacer asi una funciòn que recupere el nombre de las tablas de la base de datos:


[extraido de la biblioteca de funciones, y modificada]
<!-- #INCLUDE File="adovbs.inc" -->
<script runat=server LANGUAGE="VBSCRIPT">
Dim oConn,rstSchema
Set oConn = Server.CreateObject("ADODB.Connection")
Set rstSchema = Server.createobject("ADODB.Recordset")
oConn.Open ("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("TU BASE DE DATOS.mdb"))
Set rstSchema = oConn.OpenSchema(adSchemaTables)
no_tabla=1
Do Until rstSchema.EOF
nombre_tablas(no_tabla)= rstSchema("TABLE_NAME")
no_tabla=no_tabla+1
rstSchema.MoveNext
Loop
rstSchema.Close
oConn.Close
</script>


y ya teneindo el arreglo con los nombres haría algo asi:

SQL=" SELECT * FROM "
For i=1 to no_tabla
SQL=SQL&nombre_tabla(i)&","
Next
SQL=SQL&" WHERE contenido LIKE '%"&Ucase(palabra)&"%' OR contenido LIKE '%"&Lcase(palabra)&"%' "

Ups, lleguè un poco tarde
__________________
Si quieres que las cosas sucédan

provocalas!

Última edición por akela; 15/02/2005 a las 11:24
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:00.