Portada | Monotemáticos | Secciones | Desarrolladores | Comunidad | Servicios | Servicios profesionales | RSS
Desde 0 | HTML | CSS | ASP | PHP | AJAX | Javascript | Promoción de webs | Rentabilidad de webs
Directorio | Manuales | Scripts | FAQs | Programas | Artículos Copyleft | Actualidad | La Cosecha | Colabora
Registrarse | Vuestras páginas | Foros del web | Lista de correo | Boletín de novedades
Generador METAs | Compras | Busca cursos
Alojamiento | Dominios.es | Micropagos SMS | Buscadores | Patentes, marcas | Creación web | Multimedia | Videos
Desarrollo Freelance | Buscar proyectos | Buscar profesionales | Solicitar desarrollo

Crea tu propio buscador


Te proponemos un buscador básico para implementar en tu sitio web además de mostrarte funciones para el tratamiento de variables tipo cadena que pueden resultarte muy útiles para otras aplicaciones.


01/1/70 - Cuando trabajamos con sitios basados en bases de datos y nuestros contenidos empiezan a crecer, puede resultar muy práctico para el navegante poder recurrir a un formulario en el que introducir palabras claves y operadores que le ayuden a matizar el elemento que está buscando. Este tipo de campos pueden verse en multitud de páginas y, aunque distintos en su funcionamiento en muchos casos, todos tienen algo en común: Se trata de programas que permiten procesar una variable de tipo cadena y transformarla en una orden de búsqueda para la base de datos.

En este reportaje os proponemos un par de funciones que, usadas conjuntamente, permiten la creación de una instrucción SQL. El script permite especificar cuáles serán los campos de búsqueda y dentro de qué tabla la realizaremos.

Este programa debería ir combinado con otro pequeño script de toma de datos por formulario como los vistos en nuestro manual de ASP a partir del cual obtendríamos la variable cadena introducida por el internauta. En este sentido, en DesarrolloWeb.com hemos publicado un manual que explica la creación de un buscador simple en ASP, empezando desde la definición de la base de datos, continuando por la inserción de los datos en la base y la búsqueda por palabras clave.

Estas dos funciones pueden ser utilizadas directamente para cada caso particular a condición de especificar los campos de búsqueda en el array campos, especificar la tabla y modificar la función generasql para que realice la selección de los campos que deseemos.

En este caso, con el objeto de facilitar la comprensión, hemos simplificado al máximo las funciones que el buscador puede realizar. En realidad, el buscador sólo tratará campos usando el operador like. Por otra parte, únicamente empleará como operadores "+" y "-".

Todo tipo de modificaciónes más o menos complejas pueden ser introducidas de manera a mejorar su versatilidad:

-Empleo de paréntesis para mayor eficacia de los operadores

-Eliminación de secuencias repetidas como "++" o "--"

-Eliminación de operadores al principio y final de la cadena

-Utilización de comodines...

Pasemos ahora a mostrar el listado para comentarlo más detalladamente a continuación:

<%
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

function GeneraSql(cadena,tabla,campos)
if len(cadena)>0 then
   generaSql="Select * from " & tabla & " Where " & Sacar(cadena,campos)
else
   Response.Write "No hay criterios"
end if
end function

dim campos(3) 'el tamano del array debe superar en uno al numero de campos
campos(1)="nombre_campo1"
campos(2)="nombre_campo2"

'para mostrar cual seria el resultado...
cadena="hola cariola+cocacola-colacao"
tabla="cualquiera"
resultado=GeneraSql(cadena,tabla,campos)

Response.Write resultado
%>


Aquí puedes descargar y ejecutar este script.

Como hemos dicho, el script consta principalmente de dos funciónes. La primera de ellas, sacar, se encarga de tratar la cadena para separar las palabras y, teniendo en cuenta los operadores, construir el fragmento final de la sentencia SQL. La búsqueda se realiza dentro de una serie de campos que son definidos al exterior de la función en forma de array.

En esta función se emplean diferentes funciones de tratamiento de variables de tipo cadena las cuales explicamos a continuación:

InStr(cadena,subcadena) Devuelve el número de las posiciones en las que una determinada subcadena aparece en la cadena principal
Replace(cadena,subcadena1,subcadena2) Sustituye un fragmento (subcadena1) de una cadena por un nuevo fragmento (subcadena2)
Len(cadena) Nos devuelve la longitud de la cadena
Left(cadena,numero_caracteres) Selecciona una determinada cantidad de carácteres de nuestra cadena comenzando por la izquierda
Right(cadena,numero_caracteres) Selecciona una determinada cantidad de carácteres de nuestra cadena comenzando por la derecha


Es interesante observar la técnica de recursividad que se utiliza para desglosar la cadena principal en palabras independientes. Esta técnica se basa en que función sacar se llama a si misma para cada una de las subcadenas de la cadena principal. Aparte de esa pequeña astucia el resto de la función es de lectura fácil.

La segunda función, generasql, se encarga de añadir al fragmento final creado por nuestra función sacar un fragmento inicial en el que especificamos la tabla y el tipo de selección que queremos realizar. En este caso se han selecciónado como resultado todos los campos de la tabla pero, evidentemente, esto no tiene por qué ser así.

La última parte del script consiste en la especificación de los campos dentro de los cuales deseamos llevar a cabo nuestra búsqueda. A notar que el array ha de tener una longitud mayor al número de campos para el correcto funcionamiento del programa.

Referencia: Hemos publicado un artículo en DesarrolloWeb.com donde explicamos como integrar el presente script en un buscador en ASP. El artículo en concreto es Buscador simple en ASP mejorado, y el buscador que mejora está comentado en el manual Buscador simple en ASP.

Esperamos que este buscador os sirva de base para realizar el propio vuestro con todo tipo de personalizaciones que consideréis oportunas.

 Seguir navegando a partir aquí:
+ 1 manual relacionado
+ 4 categorias relacionadas
+ 2 comentarios (Añadir)
+ 9 comentarios no revisados

 Autoría, licencia y acciones sobre este artículo

Informe de Rubén Alvarez*

Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.

* Para consultas técnicas utilizar la lista de correo.

Versión imprimible Versión imprimible del artículo
Enviar artículo por e-mail Enviar artículo por e-mail
Añadir un comentario al artículo Publicar un comentario del artículo

Manuales relacionados con este artículo
Dentro de Taller de ASP

Categorias relacionadas
A través de las categorías de nuestro directorio se pueden encontrar otro tipo de recursos relacionados con este artículo:
+ Entrar en Colecciones de scripts
+ Entrar en Scripts en ASP
+ Entrar en Manuales de ASP
+ Entrar en buscadores para webs


 Comentarios de los visitantes
Los comentarios de los visitantes son para ampliar la información del artículo. Cualquiera puede participar.
Se muestran 2 comentarios revisados

 Comentario de Angel Garcia
13/9/02 
¿Como puedo modificar esto con el buscador simple en ASP?

RESPUESTA:

Pues en el archivo buscar.asp del buscador simple, a la hora de construir la sentencia sql (variable Temp), utilizas la función de este artículo.

Debes inicializar el array de campos en los que deseas buscar, para pasarlos a la función generaSql como la variable camopos. Luego, lo que recibes por el formulario lo debes pasar también a dicha función como la variable cadena. Por último, la variable tabla debe ser pasada a la función con el nombre de la tabla de la base de datos donde estás buscando.

De todos modos, esto se está complicando para explicarlo en este espacio. Mejor lee este artículo que he escrito sobre el tema: Buscador simple en ASP mejorado.


 Comentario de Asier García
18/10/04 
Hola,

Se podría añadir al principio de la función Sacar el siguiente código, para evitar los errores de SQL que se producen si el usuario introduce en los criterios de búsqueda cadenas como "prueba +probando" o "prueba - probando"...

'===
while InStr(cadena,"+ ")
    Cadena=Replace(Cadena,"+ ","+")
wend
while InStr(cadena,"- ")
    Cadena=Replace(Cadena,"- ","-")
wend
while InStr(cadena," +")
    Cadena=Replace(Cadena," +","+")
wend
while InStr(cadena," -")
    Cadena=Replace(Cadena," -","-")
wend
'===

Un saludo

Añadir un comentario al artículo Añadir un comentario del artículo
 Comentarios sin revisar
Entre los comentarios no revisados puede haber algunos interesantes que se hayan enviado recientemente.
 Se han encontrado 9 comentarios sin revisar

Ver el comentario no revisadoVer los comentarios no revisados
Añadir un comentario al artículo Añadir un comentario del artículo



Enlaces:
Maestrosdelweb
  Ir arriba

Manuales relacionados
+Taller de ASP
Categorías
+Colecciones de scripts
+Scripts en ASP
+Manuales de ASP
+buscadores para webs

Lectura recomendada

Compra este libro en Agapea, la librería urgente a domicilio.

Tienda DesarrolloWeb

DesarrolloWeb.com | Copyright | Anunciese | Acerca de | Datos legales | Contacta | Por GuiarteMultimedia