| Portada | Monotemáticos | Secciones | Desarrolladores | Comunidad | Servicios | Servicios profesionales | RSS | ||||
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 %> |
| 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 |
| 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. |
| 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.
|
| Los comentarios de los visitantes son para ampliar la información del artículo. Cualquiera puede participar. |
| Se muestran 2 comentarios revisados |
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.
| Añadir un comentario del artículo |
| Comentarios sin revisar |
| Entre los comentarios no revisados puede haber algunos interesantes que se hayan enviado recientemente. |
| Ver los comentarios no revisados |
| Añadir un comentario del artículo |
| Enlaces: |
| Maestrosdelweb |
Lectura recomendada Compra este libro en Agapea, la librería urgente a domicilio. |
||||||||||||||
Tienda DesarrolloWeb