SQL - Comparación de cadenas

Ely
15 de Febrero del 2005
Hola,

Mi aplicación (VB6) realiza una búsqueda en una base de datos Access 2000, sobre un campo memo, en la cual el usuario ingresa las palabras a buscar, separándolas con el signo + (luego las separo con split en una matríz)

Por ej. si se busca: visual+basic, deberá devolver todos los registros en los cuales dichas palabras se encuentren presentes en el texto del campo, en cualquier orden (no necesariamente en el orden en que fueron introducidas por el usuario)

El problema surge si ingresa: basic+visual, ya que no devuelve ningún registro.

La intención es que, independientemente del orden en que las escriba, deben devolverme los mismos registros.

Aquí escribo el código que utilizo para la consulta:

ConsBuscaTxt = "Select PANCM, DC, DESC from NCMest WHERE DESC Like '"
For i = 0 To UBound(PAoTEX)
ConsBuscaTxt = ConsBuscaTxt & "* " & PAoTEX(i) & "*"
If i = UBound(PAoTEX) Then
ConsBuscaTxt = ConsBuscaTxt & "' ORDER BY PANCM"
End If
Next i

Si alguien tiene idea de como puedo solucionarlo, le pido que me conteste.

Desde ya, gracias

Elizabeth

krizall
15 de Febrero del 2005
hola elizabeth, creo que aqui tienes un problema la concatenar la clausula where, ya que por cada valor de tu arreglo haces esto:
consbuscatxt="*" visual "*"
cuando viene el segundo elemento sucede esto

conbuscatxt="*" visual "*""*" basic "*"

ademas, segun recuerdo, en visual basic se utiliza el signo % en lugar del *

ahora por ejemplo para que esto funcione deberia ser mas o menos asi:

For i = lbound(PAoTEX) To UBound(PAoTEX)
if consbuscatxt="" then
ConsBuscaTxt = "desc like "%' & paotex(i) & '"%""
else
if i=ubound(paotex) then
consbuscatxt=consbuscatxt & " order by pancm"
else
consbuscatxt=consbuscatxt & " or desc like "%' & paotex(i) & '"%""
end if
end if
Next i

mas o menos seria asi la estructura de tu codigo, aunque antes en ves de hacer la busqueda, al final del ciclo pones un debu.print consultagenerada
de esta manera podras ir viendo si las clausula where se construyo correctamente y asi poder probarlo directamente en tu bd

suerte.

krizall
15 de Febrero del 2005
disculpa, no habia checado que usas la misma variable para toda la consulta, pero mejor te aconsejo utilizar una variable para la clausula, asi cuando la tengas lista solo la concatenas con al anterior