SQL - Comparaci贸n de cadenas
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
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
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.
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.
