Retroceder   Foros del Web > Programación para sitios web > ASP Clásico

Respuesta
 
Herramientas Desplegado
Antiguo 13-abr-2002, 13:31   #1 (permalink)
urjose está en el buen camino
 
Avatar de urjose
 
Fecha de Ingreso: noviembre-2002
Mensajes: 5.289
Enviar un mensaje por ICQ a urjose Enviar un mensaje por Yahoo  a urjose
Buscar en una base de datos (E-Commerce)

Hi,

Pues no se si sabían pero acabo de descubrir que Access soporta en el SQL la función Instr. Por lo tanto me fue posible hacer un pequeño buscador para una tienda virtual que estoy elaborando, utilice el siguiente código por si les sirve:

Busqueda=Split(Replace(Request.Form("busqueda "),"'","''"))
SQL="SELECT * FROM PRODUCTOS WHERE INSTR(NOMBRE,'"&Busqueda(0)&"')& quot;
For i=1 to Ubound(Busqueda)
SQL=SQL&" OR INSTR(NOMBRE,'"&Busqueda(I)&"')& quot;


Por lo que pueden ver esta basntante sencillo y hasta el momento me ha funcionado, si encuentran algun error o ven que no funciona en algo pues avisenme por fa.

Saludos

<center><img src="http://www.pcmasmas.com.ar/foro/images/avatars/043.gif"><br>
Urjose</center>
urjose está desconectado   Responder Citando
Antiguo 13-abr-2002, 14:06   #2 (permalink)
almaluz está en el buen camino
 
Fecha de Ingreso: noviembre-2002
Mensajes: 262
Re: Buscar en una base de datos (E-Commerce)

Gracias por compartir tus ideas

Ahora si no es mucho pedir, porque no comentas un poquitin el codigo y lo acabas :P,

Esque no me funciona ;)


Saludos Urjose

<a href="http://www.almaluz.com"><Img src="http://www.almaluz.com/banners/B_almaluz.gif"></a>
almaluz está desconectado   Responder Citando
Antiguo 13-abr-2002, 14:09   #3 (permalink)
almaluz está en el buen camino
 
Fecha de Ingreso: noviembre-2002
Mensajes: 262
Re: Buscar en una base de datos (E-Commerce)

Ah,

A proposito Urjose, yo tengo un minibuscador con Like, asi:

Código:
 
SQL = &quot;SELECT * FROM articulo &quot;
SQL = SQL &amp; &quot; WHERE nombre LIKE '%&quot; &amp; BUSCAR &amp; &quot;%'  ORDER BY nombre ;&quot;
	  SET rs=con.Execute (SQL)
Que ventajas ( que seguro que las hay ) tiene utilizar Instr

Saludos de nuevo amigo. ;)

<a href="http://www.almaluz.com"><Img src="http://www.almaluz.com/banners/B_almaluz.gif"></a>
almaluz está desconectado   Responder Citando
Antiguo 13-abr-2002, 14:30   #4 (permalink)
urjose está en el buen camino
 
Avatar de urjose
 
Fecha de Ingreso: noviembre-2002
Mensajes: 5.289
Enviar un mensaje por ICQ a urjose Enviar un mensaje por Yahoo  a urjose
Re: Buscar en una base de datos (E-Commerce)

es cierto bueno no puedo poner todo por que es un poco extenso.

Busqueda=Split(Replace(Request.Form(&quot;busqueda &quot;),&quot;'&quot;,&quot;''&quot;))
SQL=&quot;SELECT * FROM PRODUCTOS WHERE INSTR(NOMBRE,'&quot;&amp;Busqueda(0)&amp;&quot;')& quot;
For i=1 to Ubound(Busqueda)
SQL=SQL&amp;&quot; OR INSTR(NOMBRE,'&quot;&amp;Busqueda(I)&amp;&quot;')& quot;
Next
SET RS=oConnProductos.Execute(SQL)

Bueno primero que nada debemos tener una pagina con cualquier nombre que vaya a la pagina donde tenemos el codigo de arriba, a esta ultima le llamaremos resultados.asp

La pagina que apunta a resultados.asp la llamaremos formulario.asp

En formulario.asp debemos tener un formulario con un Textbox llamado Busqueda.

Ahora viene lo bueno jeje

Busqueda=Split(Replace(Request.Form(&quot;busqueda &quot;),&quot;'&quot;,&quot;''&quot;))

Con la linea anterior primero limpiamos el contenido del textbox, es decir le quitamos los ' con el Replace, una vez que se limpia la cadena cortamos el contenido del campo por medio de la función Split lo cual nos convertira la variable busqueda en un Arreglo de n elementos dependiendo del numer de palabras que introdujo el usuario.

Supongamos que el usuario ingreso &quot;PHP ASP&quot; en el formulario el arreglo quedaría.

Busqueda(0)=&quot;PHP&quot;
Busqueda(1)=&quot;ASP&quot;


Ahora bien, con el codigo que mande se genera la Query de forma dinámica, ya que depende del numero de palabras.

SQL=&quot;SELECT * FROM PRODUCTOS WHERE INSTR(NOMBRE,'&quot;&amp;Busqueda(0)&amp;&quot;')& quot;

Lo anterior es la primera parte de la query ya que suponemos que al menos el usuari ingreso una palabra.

Ahora con lo siguiente se crea la query dinámica.

For i=1 to Ubound(Busqueda)
SQL=SQL&amp;&quot; OR INSTR(NOMBRE,'&quot;&amp;Busqueda(I)&amp;&quot;')& quot;
Next

Lo anterior: Desde el elemento 1, es decir el segundo, hasta el final del arreglo agrega otro INSTR. Con lo que supusimos que introdujo el usuario quedaría:

SELECT * FROM PRODUCTOS WHERE INSTR(NOMBRE,'php') OR INSTR(NOMBRE,'mysql')

Y por ultimo ejecutamos el query

SET RS=oConnProductos.Execute(SQL)

Continua...

<center><img src="http://www.pcmasmas.com.ar/foro/images/avatars/043.gif"><br>
Urjose</center>
urjose está desconectado   Responder Citando
Antiguo 13-abr-2002, 14:34   #5 (permalink)
urjose está en el buen camino
 
Avatar de urjose
 
Fecha de Ingreso: noviembre-2002
Mensajes: 5.289
Enviar un mensaje por ICQ a urjose Enviar un mensaje por Yahoo  a urjose
Re: Buscar en una base de datos (E-Commerce)

Y listo he ahi todo el chiste de esto.

Ahora bien con respecto a tu preunta del LIKE, yo utilice LIKE y resulto que cuando introducia mas de una palabra como que no me funcionaba correctamente, es decir al parecer tenian que estar las dos palabras en el campo donde realizaba la busqueda para que me regresara dicho registro. Con la query que yo acabo de postear te regresa todos los registros que tengan dicho parametro, ya que toma las palabras como independientes.

Como te comente anteriormente el LIKE a mi no me funciono bien es por ello que me vi en la necesidad de intentar esto.

Saludos

<center><img src="http://www.pcmasmas.com.ar/foro/images/avatars/043.gif"><br>
Urjose</center>
urjose está desconectado   Responder Citando
Antiguo 13-abr-2002, 14:40   #6 (permalink)
almaluz está en el buen camino
 
Fecha de Ingreso: noviembre-2002
Mensajes: 262
Re: Buscar en una base de datos (E-Commerce)

OK Urjose.

Tienes toda la razón del mundo.

Voy a poner en practica tus enseñanzas ( asi mejoraré algo mi minibuscador ),

Yo tambien me estoy fabricando una web de e-commerce ( pero me queda ..... uf )Ahora estoy con lo del carrito


Saludos y gracias ;)

<a href="http://www.almaluz.com"><Img src="http://www.almaluz.com/banners/B_almaluz.gif"></a>
almaluz está desconectado   Responder Citando
Antiguo 13-abr-2002, 14:41   #7 (permalink)
urjose está en el buen camino
 
Avatar de urjose
 
Fecha de Ingreso: noviembre-2002
Mensajes: 5.289
Enviar un mensaje por ICQ a urjose Enviar un mensaje por Yahoo  a urjose
Re: Buscar en una base de datos (E-Commerce)

Por cierto... que error te mando o por que dices que no te funciono?

Saludos

<center><img src="http://www.pcmasmas.com.ar/foro/images/avatars/043.gif"><br>
Urjose</center>
urjose está desconectado   Responder Citando
Antiguo 13-abr-2002, 14:51   #8 (permalink)
almaluz está en el buen camino
 
Fecha de Ingreso: noviembre-2002
Mensajes: 262
Re: Buscar en una base de datos (E-Commerce)

No vi la Busqueda(I) de tu cadena SQL, y el problema vino porque yo puse For e=1 to Ubound(buscar), y claro, luego no encontraba la i. ; ha sido con tu explicacion cuando me he dado cuenta.

Supongo que son errores de principiante.

Saludos ( y sigue así )
almaluz está desconectado   Responder Citando
Antiguo 22-abr-2002, 16:55   #9 (permalink)
almaluz está en el buen camino
 
Fecha de Ingreso: noviembre-2002
Mensajes: 262
Re: Buscar en una base de datos (E-Commerce)

Hey Urjose.

Una ayudita más? :P

Estoy implementando tu estupendo buscador asi:
Código:
 
sql = &quot;SELECT * FROM articulo WHERE INSTR(nombre,'&quot;&amp;buscar(0)&amp;&quot;')&quot;
		for i=1 to Ubound(buscar)		' con este bucle añade un OR a la consulta SQL por cada palabra
		sql= sql &amp; &quot;OR INSTR(nombre,'&quot;&amp;buscar(i)&amp;&quot;')&quot;
		Next
Pero estoy migrando a SQL server en vez de Access y obtengo el siguiente error

Código:
 

Microsoft OLE DB Provider for ODBC Drivers error '80040e14' 

[Microsoft][ODBC SQL Server Driver][SQL Server]'INSTR' no es un nombre de función reconocido. 

/sql/buscar.asp, line 88
De lo que resumo que INSTR en sql nada de nada :(

¿alguna instruccion compatible ?

Un Saludo amigo.


almaluz está desconectado   Responder Citando
Antiguo 22-abr-2002, 17:28   #10 (permalink)
urjose está en el buen camino
 
Avatar de urjose
 
Fecha de Ingreso: noviembre-2002
Mensajes: 5.289
Enviar un mensaje por ICQ a urjose Enviar un mensaje por Yahoo  a urjose
Re: Buscar en una base de datos (E-Commerce)

Ops, en este momento no tengo documentación sobre TRANSACT-SQL (que es el SQL de SQL Server)a la mano , prometo investigar un poco para los que quieren migrar de BD, si alguien sabe pues eche una mano por este lado del foro, jeje

Saludos

<center><img src="http://www.pcmasmas.com.ar/foro/images/avatars/043.gif"><br>
Urjose</center>
urjose está desconectado   Responder Citando
Antiguo 23-abr-2002, 22:46   #11 (permalink)
urjose está en el buen camino
 
Avatar de urjose
 
Fecha de Ingreso: noviembre-2002
Mensajes: 5.289
Enviar un mensaje por ICQ a urjose Enviar un mensaje por Yahoo  a urjose
Re: Buscar en una base de datos (E-Commerce)

Bad News!

Primera restricción: NO he encontrado función INSTR en TRANSACT-SQL. Por lo cual por el momento solo funciona en Access y creo que MySQL tambien lo soporta.

:(

Si alguien sabe espero que nos aporte esto.

<center><img src="http://www.pcmasmas.com.ar/foro/images/avatars/043.gif"><br>
Urjose</center>
urjose está desconectado   Responder Citando
Antiguo 24-abr-2002, 00:50   #12 (permalink)
MartinAcevedo está en el buen camino
 
Fecha de Ingreso: noviembre-2002
Ubicación: Cordoba, Argentina
Mensajes: 190
Re: Buscar en una base de datos (E-Commerce)

Yo creo que las dos formas estan bien... la del like y la otra
la diferencia es que cuando uso &quot;and&quot; u &quot;or&quot;
en la primera se tiene que dar que todas las palabras de la busqueda coinsidan y en la segunda con una es sufuciente... Asi hice mi buscador y funciona de maravilla dando la opcion al cliente
Saludos.
MartinAcevedo está desconectado   Responder Citando
Antiguo 24-abr-2002, 00:54   #13 (permalink)
urjose está en el buen camino
 
Avatar de urjose
 
Fecha de Ingreso: noviembre-2002
Mensajes: 5.289
Enviar un mensaje por ICQ a urjose Enviar un mensaje por Yahoo  a urjose
Re: Buscar en una base de datos (E-Commerce)

Buen punto, como comente yo anteriormente a mi no me funciono.

Y por ejemplo si tengo en un campo algo asi &quot;JavaScript&quot;, y hago una busqueda de la cadena Java con LIKE, no me muestra nada.

A diferencia de si uso el INSTR.

Pero bueno es otra opción de hacer una búsqueda.

Saludos ;)

<center><img src="http://www.pcmasmas.com.ar/foro/images/avatars/043.gif"><br>
Urjose</center>
urjose está desconectado   Responder Citando
Antiguo 18-feb-2003, 11:53   #14 (permalink)
tarlipes está en el buen camino
 
Fecha de Ingreso: diciembre-2002
Ubicación: argentina... de ahí seran veinte cuadras
Mensajes: 381
__________________________________________________ __
Bad News!

Primera restricción: NO he encontrado función INSTR en TRANSACT-SQL. Por lo cual por el momento solo funciona en Access y creo que MySQL tambien lo soporta.

:(

Si alguien sabe espero que nos aporte esto.
__________________________________________________ __

Alguien supo como hacer esto con sql?
__________________
Juan Pablo
tarlipes está desconectado   Responder Citando
Antiguo 18-feb-2003, 11:59   #15 (permalink)
urjose está en el buen camino
 
Avatar de urjose
 
Fecha de Ingreso: noviembre-2002
Mensajes: 5.289
Enviar un mensaje por ICQ a urjose Enviar un mensaje por Yahoo  a urjose
En SQL Server puedes utilizar el LIKE

Busqueda=Split(Replace(Request.Form("busqueda"),"' ","''"))
SQL="SELECT * FROM PRODUCTOS WHERE NOMBRE LIKE '%"&Busqueda(0)&"%' "
For i=1 to Ubound(Busqueda)
SQL=SQL&" OR NOMBRE LIKE '%"&Busqueda(i)&"%' "
Next

Saludos
urjose está desconectado   Responder Citando
Antiguo 18-feb-2003, 12:03   #16 (permalink)
tarlipes está en el buen camino
 
Fecha de Ingreso: diciembre-2002
Ubicación: argentina... de ahí seran veinte cuadras
Mensajes: 381
osea que conviene unificar, porque de esta manera se puede utilizar tanto en access como sql.

thanks man!!!!


saludos...
__________________
Juan Pablo
tarlipes está desconectado   Responder Citando
Antiguo 18-feb-2003, 12:15   #17 (permalink)
bakanzipp está en el buen camino
 
Avatar de bakanzipp
 
Fecha de Ingreso: noviembre-2002
Ubicación: santiago de shilli
Mensajes: 2.554
Enviar un mensaje por ICQ a bakanzipp
Urjose.

si tratas de buscar la palabra Java dentro del texto Javascript me da la impresion de que no aparecia porque estabas utilizando mal la clausula like.

segun como posteaste en tu ultimo mensaje con ese codigo deberia encontrarla...

si colocan algo asi

Like '%" & Texto & "%'

quiere decir que buscara dentro de la tabla cualquier conjunto de caracteres que este contenido en una cadena larga

ej.

Texto: ol

esto puede buscar

Hola
olga
aol
etc....

si quieren buscar solo cadenas con el inicio de un texto deben usar el operador % al final de la busqueda y no entre el texto

Like ol%

y solo listara

olvido
olga
etc...

trabaja igual que cuando se busca un archivo en el explorador

*cadena* ó cadena* ó *cadena
bakanzipp está desconectado   Responder Citando
Antiguo 18-feb-2003, 12:15   #18 (permalink)
tarlipes está en el buen camino
 
Fecha de Ingreso: diciembre-2002
Ubicación: argentina... de ahí seran veinte cuadras
Mensajes: 381
te hago una pregunta...

a que se puede deber este error, que me tira tratando de usar tu buscador?


Gracias de antemano.
__________________
Juan Pablo
tarlipes está desconectado   Responder Citando
Antiguo 18-feb-2003, 12:16   #19 (permalink)
tarlipes está en el buen camino
 
Fecha de Ingreso: diciembre-2002
Ubicación: argentina... de ahí seran veinte cuadras
Mensajes: 381
perdon... no puse el error.


ahi va:

Error de Microsoft VBScript en tiempo de ejecución error '800a0009'

El subíndice está fuera del intervalo: '[number: 0]'

/BIBLIOTECA/busquedaprueba3.asp, line 26
__________________
Juan Pablo
tarlipes está desconectado   Responder Citando
Antiguo 18-feb-2003, 12:40   #20 (permalink)
bakanzipp está en el buen camino
 
Avatar de bakanzipp
 
Fecha de Ingreso: noviembre-2002
Ubicación: santiago de shilli
Mensajes: 2.554
Enviar un mensaje por ICQ a bakanzipp
ESTAS HACIENDO UN RECORRIDO DE ALGUN VECTOR O ALGO POR EL ESTILO?

MUESTRA EL CODIGO
bakanzipp está desconectado   Responder Citando
Antiguo 18-feb-2003, 12:44   #21 (permalink)
tarlipes está en el buen camino
 
Fecha de Ingreso: diciembre-2002
Ubicación: argentina... de ahí seran veinte cuadras
Mensajes: 381
ahí va:

busqueda = ucase(cstr(trim(request.querystring("busqueda"))))

Busqueda=Split(Replace(Request.Form("busqueda"),"' ","''"))
strsql="SELECT * FROM PRODUCTOS WHERE NOMBRE LIKE '%"&Busqueda(0)&"%' "
For i=1 to Ubound(Busqueda)
strsql=strsql&" OR autor LIKE '%"&Busqueda(i)&"%' "
Next
SET objRS=objConn.Execute(SQL)


dim encontrados
encontrados = 0
%><table>
<tr align = center><td bgcolor = "#00008b" align = center WIDTH = 800><font color = "#ffffff"><%Response.Write " <h4>Resultados de la busqueda en base a la aparición<b><i> " & busqueda & "</b><h4></i></font></td></tr><br>"



While Not objRS.EOF%>
<% if colorcelda="#ffffff" then
colorcelda="#87ceeb"
else
colorcelda="#ffffff"
end if %><P>

<table bgcolor="<%=colorcelda%>"ALIGN= CENTER WIDTH = 800 >
<tr><td FONT STYLE= VERDANA, ARIAL SIZE=2 align = <%=alineado%>>Autor: <%=objRS("AUTOR")%></FONT></td></tr>
<tr><td FONT STYLE= VERDANA, ARIAL SIZE=2 align = <%=alineado%>>Título: <%=objRS("TITULO")%></FONT></td></tr>
<tr><td FONT STYLE= VERDANA, ARIAL SIZE=2 align = <%=alineado%>>Publicación: <%=objRS("PUBLICACION")%></FONT></td></tr>
<tr><td FONT STYLE= VERDANA, ARIAL SIZE=2 align = <%=alineado%>>Fuente: <%=objRS("FUENTE")%></FONT></td></TR></table>
<tr><td FONT STYLE= VERDANA, ARIAL SIZE=2 ><input type = "checkbox" name= "cons" value =<%=objrs("id")%>></font></a></td>
<%
encontrados = encontrados + 1
%><%
objRS.MoveNext
Wend
%><br><%
response. write "TOTAL " & encontrados & " COINCIDENCIAS"
objRS.Close
objConn.Close
Set objRS = Nothing
Set objConn = Nothing
__________________
Juan Pablo
tarlipes está desconectado   Responder Citando
Antiguo 18-feb-2003, 13:02   #22 (permalink)
bakanzipp está en el buen camino
 
Avatar de bakanzipp
 
Fecha de Ingreso: noviembre-2002
Ubicación: santiago de shilli
Mensajes: 2.554
Enviar un mensaje por ICQ a bakanzipp
QUE CARACTER ESTAS USANDO PARA SEPARAR LA CADENA Y TRASNSFORMALA EN SPLIT?.

NO LO VEO

Split(Replace(Request.Form("busqueda"),"'","''"))

RECUERDA

VECTOR = SPLIT(CADENA,CARACTER SEPARADOR)

ADEMAS CUANDO RECORRAS EL VECTOR PARTE TU FOR DESDE 0 NO DE 1.
bakanzipp está desconectado   Responder Citando
Antiguo 18-feb-2003, 13:21   #23 (permalink)
tarlipes está en el buen camino
 
Fecha de Ingreso: diciembre-2002
Ubicación: argentina... de ahí seran veinte cuadras
Mensajes: 381
Esta en la segunda o tercer línea del codigo que te mandé antes.
__________________
Juan Pablo
tarlipes está desconectado   Responder Citando
Antiguo 18-feb-2003, 13:28   #24 (permalink)
bakanzipp está en el buen camino
 
Avatar de bakanzipp
 
Fecha de Ingreso: noviembre-2002
Ubicación: santiago de shilli
Mensajes: 2.554
Enviar un mensaje por ICQ a bakanzipp
VUELVO A REPETIR.

NO VEO POR NINGUN LADO EL CARACTER SEPARADOR QUE FORME EL SPLIT

Busqueda=Split(Replace(Request.Form("busqueda"),"' ","''"))
bakanzipp está desconectado   Responder Citando
Antiguo 18-feb-2003, 13:37   #25 (permalink)
tarlipes está en el buen camino
 
Fecha de Ingreso: diciembre-2002
Ubicación: argentina... de ahí seran veinte cuadras
Mensajes: 381
Gracias por tu tiempo

Disculpá mi ignorancia....

Lo que me estas diciendo es con que separo en el form?
ej busqueda: "asp php", te referis a ""
o a "asp""php"
o sigo siendo ignorante?

por otro lado, desde hoy estoy por preguntarte, como se denominan los caracteres que te permiten buscar (en este caso), de diferente manera ej: % en al% permite buscar las palabras que comienzan con al. Hay alguno mas?

Asi puedo buscar algún link?
__________________
Juan Pablo
tarlipes está desconectado   Responder Citando
Antiguo 18-feb-2003, 13:45   #26 (permalink)
bakanzipp está en el buen camino
 
Avatar de bakanzipp
 
Fecha de Ingreso: noviembre-2002
Ubicación: santiago de shilli
Mensajes: 2.554
Enviar un mensaje por ICQ a bakanzipp
Mira para formar el split debes tener en tu variable algun caracter separador en comun...

ej..si tu data es esta.

01/02/03/04...

el split quedaria formado de la siguiente manera

Código:
vector = split(data,"/")
asi tu vector kedaria asi

vector(0) = 01
vector(1) = 02
etc..

pero en tu codigo no estas colocando el caracter separador..

para que entiendas mejor te limpiare tu variable para que te des cuenta

Código:
data=Replace(Request.Form("busqueda"),"'","''")
Busqueda =Split(data)
te das cuenta que no tienes un caracter separador ahora?