Ayuda Con Sensitive Case En Sql


Objetivo: Ayuda Con Sensitive Case En Sql
buenas

les muestro en que ando en estos días.

visorrv1960_1


mas o menos logre una rutina para filtrar las búsquedas y colorear las palabras claves, pero....
el inconveniente me lo da sql pues si pongo pablo no me muestra resultados, y si, si pongo Pablo con mayúsculas,
también me sucede si pongo las palabras sin tilde cuando estas llevan tilde no muestra resultados.
otra cosa me olvidaba es que como se hace en sql hacer busquedas estrictas?


alguna sugerencia que no sea anda a estudiar sql? jajajajja

como hago para desactivar sensitive case de sql?

Public Sub BuscarEnTodos()
Dim Xtabla As Table
Dim ResultadoX As Result
Dim ContadorVersiculos, Buscando As Integer
Dim Proceso1, Proceso2 As String

For Each Xtabla In Conexion.Tables
If Left$(Xtabla.Name, 7) = "sqlite_" Then Continue
If Xtabla.Name = "biblia" Then Continue

' Print "Select * from '" & Xtabla.Name & "' where texto like '%" & txtFiltro.Text & "%'"
Try Conexion.Exec("Select * from '" & Xtabla.Name & "' where texto like '%" & txtFiltro.Text & "%'")
If Error Then
' Print "error con tabla" & Xtabla.Name
Continue
Else
' Print "ok=" & Xtabla.Name
Endif

ResultadoX = Conexion.Exec("Select * from '" & Xtabla.Name & "' where texto like '%" & txtFiltro.Text & "%'")
If ResultadoX.Available = True Then

Application.Busy = 1

Do While ResultadoX.Available

Print "resultadoX!texto=" & ResultadoX!texto
Buscando = InStr(ResultadoX!texto, txtFiltro.Text)
If Buscando = 0 Then Break

Proceso1 = Mid(ResultadoX!texto, Buscando, Len(txtFiltro.Text))

Proceso2 = Replace$(ResultadoX!texto, Proceso1, "<FONT><b>" & txtFiltro.Text & "</b></font>")

txtEcapitulo.RichText &= "<FONT><b>(" & Xtabla.Name & " " & ResultadoX!capitulo & "." & ResultadoX!versiculo & ")</b></font> " & Proceso2 & gb.NewLine
Inc ContadorVersiculos
' DatosEncontrados = True
ResultadoX.MoveNext
Loop
Application.Busy = 0
Else
' Balloon.Info("No se encontraron resultados", txtFiltro)
Endif
Next

' If DatosEncontrados = False Then
' Balloon("No se encontraron coincidencias", txtFiltro)
' Wait 2
' Balloon.Hide
' txtFiltro.SetFocus
' Return
' Endif
LabContadorVers.Text = "Coicidencias encontradas " & ContadorVersiculos

End



Proceso2 = Replace$(ResultadoX!texto, Proceso1, "<FONT><b>" & txtFiltro.Text & "</b></font>")

txtEcapitulo.RichText &= "<FONT><b>(" & Xtabla.Name & " " & ResultadoX!capitulo & "." & ResultadoX!versiculo & ")</b></font> " & Proceso2 & gb.NewLine

última edición por v3ctor el Lunes, 25 May 2015, 03:24; editado 3 veces
Objetivo: Re: Ayuda Con Sensitive Case En Sql
Pues lo más simple es convertir el campo todo a mayúsculas o todo a minúsculas antes de hacer la comparación:

Conexion.Exec("Select * from &1 where lower(`texto`) like '%&2%'", Xtabla.Name, lcase(txtFiltro.Text) ) 'si usas sqlite

Conexion.Exec("Select * from &1 where lcase(`texto`) like '%&2%'", Xtabla.Name, lcase(txtFiltro.Text) ) 'si usas mysql

Perfil MP  
Objetivo: Re: Ayuda Con Sensitive Case En Sql
Shordi:

Para evitar la pequeña diferencia que tiene la instrucción en sqlite y mysql en esta parte:

..."Select * from &1 where lower(`texto`) ...


Donde encontramos lower y lcase, ¿ no podíamos usar una sentencia como lcase de gambas y concatenar ? .
No notaríamos diferencia entre los dos motores.

Saludos

Objetivo: Re: Ayuda Con Sensitive Case En Sql
Como no hagas una consulta doble, no puedo ver cómo se haría eso. Tienes que hacer que la consulta compare el campo convertido a minúsculas con el texto convertido a minúsculas. Si no lo hace el servidor, lo tendría que hacer el cliente, está claro, lo que implicaría un proceso de comparativa en gambas más complicado. Para que sea ambivalente a las dos bases de datos sólo puedes hacer esto:

Conexion.Exec("Select * from &1 where " & iif(conexion.type="mysql","lcase","lower") & "(`texto`) like '%&2%'", Xtabla.Name, lcase(txtFiltro.Text) )


O esto:
if conexion.type="sqlite" then
Conexion.Exec("Select * from &1 where lower(`texto`) like '%&2%'", Xtabla.Name, lcase(txtFiltro.Text) )
else
Conexion.Exec("Select * from &1 where lcase(`texto`) like '%&2%'", Xtabla.Name, lcase(txtFiltro.Text) )
endif

Perfil MP  
Objetivo: Re: Ayuda Con Sensitive Case En Sql
mira el operador ilike, no se si lo admiten todas las BD es case-insensitive.
SELECT nombre FROM cliente WHERE nombre LIKE '%va%';

Perfil MP  
Objetivo: Re: Ayuda Con Sensitive Case En Sql
Estoy buscando y jugando con los caracteres algunos de las posibles filtros.

Select * from '1Juan' where texto like 'sab%' todo lo que empieza con sab al principio del parrafo (no en el medio o final)

Select * from '1Juan' where texto like '_i%' todo lo que comienza con cualquier caracter seguido de la i

Select * from '1Juan' where texto like 'A_%'
todo lo que comienza con la A y sigue con cualquier caracter

sigo investigando.....

tendre que recopilar mascaras de busquedas y después ver como las implemento en el programa

Objetivo: Re: Ayuda Con Sensitive Case En Sql
Ayer en el código que puse como ejemplo puse LIKE y es ILIKE.
SELECT nombre FROM cliente WHERE nombre ILIKE '%va%';

Yo lo utilizo y funciona muy bien, dicen que es lento en las búsquedas pero en mi Bd que es pequeña va como un tiro.

Perfil MP  

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.5673s (PHP: -77% SQL: 177%)
Consultas SQL: 46 - Debug off - GZIP Activado