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

| ||||
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) ![]() |
| ||||
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. |
| ||||
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)%> <%=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> |
| ||||
de igual forma en www.desarrolloweb.com hay algunos ejemplos de buscador muy bien explicados |
| ||||
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 |