Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Ayuda Con Sensitive Case En Sql
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
 
última edición por v3ctor el Lunes, 25 May 2015, 03:24; editado 3 veces 
v3ctor - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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

 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 

 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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%';
 

 



 
angelnu - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
 
v3ctor - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 



 
angelnu - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Anidar Un Select Case Dentro De Otro Sele... ivanovichenco General 2 Jueves, 16 Junio 2011, 17:18 Ver último mensaje
ivanovichenco
No hay nuevos mensajes Ordenaciones Case Sensitives E Insensitive... shordi General 3 Jueves, 11 Abril 2013, 12:30 Ver último mensaje
jguardon
No hay nuevos mensajes Ejemplo Select Case Y Choose Shell General 1 Lunes, 10 Junio 2013, 12:39 Ver último mensaje
shordi
No hay nuevos mensajes Select Case Anidado No Funciona Bien v3ctor General 6 Viernes, 18 Abril 2014, 19:30 Ver último mensaje
v3ctor
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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



  

 

cron