Portal    Foro    Buscar    FAQ    Registrarse    Conectarse

Mostrar Minúsculas Y Mayúsculas Igualmente (sqlite3)

Mostrar Minúsculas Y Mayúsculas Igualmente (sqlite3)
Artículo
Responder citando    Descargar mensaje  
Mensaje Mostrar Minúsculas Y Mayúsculas Igualmente (sqlite3) 
 
buenas

SELECT * FROM palabras WHERE palabra='marcelo' COLLATE NOCASE


con la sentencia anterior nos mostrará tanto:

marcelo como, Marcelo como, maRcelo etc

ahora como sería si queremos hacer lo mismo pero con un filtro mediante where y like?
o se hace con algún pragma?


escucho sugerencias  



 
v3ctor - Ver perfil del usuario Enviar mensaje privado  
v3ctor [ Sabado, 27 Agosto 2016, 23:54 ]
 


Mostrar Minúsculas Y Mayúsculas Igualmente (sqlite3)
Comentarios
Responder citando    Descargar mensaje  
Mensaje Re: Mostrar Minúsculas Y Mayúsculas Igualmente (sqlite3) 
 
SELECT * FROM palabras WHERE palabra LIKE '%Marcelo%'

PRAGMA case_sensitive_like=0

PRAGMA case_sensitive_like=1



esto funciona en las consulta de gambas pero no funciona en el programa, tal vez algo no hago bien  


Public Sub PragmaSensitive(accion As Boolean)
  
  If accion Then
    Conexion.Exec("PRAGMA case_sensitive_like=1")
  Else
    Conexion.Exec("PRAGMA case_sensitive_like=0")
  Endif
  
End

  PragmaSensitive(chkbNoCase.Value)  

ResultadoX2 = Conexion.Exec("Select * from '" & NomTablaX & "' where texto like '%" & EsteFiltro & "%'")




 
v3ctor - Ver perfil del usuario Enviar mensaje privado  
v3ctor [ Domingo, 28 Agosto 2016, 00:21 ]
Responder citando    Descargar mensaje  
Mensaje Re: Mostrar Minúsculas Y Mayúsculas Igualmente (sqlite3) 
 
este es el contexto donde se encuentra la sentencia sql

Public Sub PragmaCaseSensitiveLike(accion As Boolean)
  
'   PRAGMA case_sensitive_like = [true|false];
'PRAGMA case_sensitive_like = 1;
'Select * From 'Mateo' where texto like '%Padre%';
  
  If accion Then
    Conexion.Exec("PRAGMA case_sensitive_like=true")
  Else
    Conexion.Exec("PRAGMA case_sensitive_like=false")
  Endif
  
End


Public Sub BuscarTexto(EsteFiltro As String, EstosLibros As Integer[])
  Dim ResultadoX, ResultadoX2 As Result
  Dim ContadorVersiculos, NumTabla, Buscando, InicioTitulo, FinTitulo, coincidencias, CoincidenciasLibro, iVeces, i As Integer
  Dim iVersPorLibro, iTotalAT, iTotalNT As Integer
  Dim NomTablaX, Titulo, TituloOK, ContadorCoincidencias As String
  Dim Proceso1, Proceso2, Proceso3, Proceso4, Proceso5 As String
  Dim AquiReferencias, ResultadosEncontrados As String
  Dim PrimeraLinea As Boolean = True
  Dim Encabezado As Boolean = True
    
  ContenidoBusquedaGuardar = ""
  
  FiltroLibros = EstosLibros
      
   Inc Application.Busy
      
      PragmaCaseSensitiveLike(chkbNoCase.Value) 'nueva linea
      
      
  For Each NumTabla In FiltroLibros
      ResultadoX = Conexion.Exec("select * from 'biblia'")
                
      Do While ResultadoX.Available
        If ResultadoX!indicelibro = NumTabla Then
          NomTablaX = ResultadoX!nombretabla
          
          'Select * From 'Mateo' where texto like '%Padre%';
           ResultadoX2 = Conexion.Exec("Select * from '" & NomTablaX & "' where texto like '%" & EsteFiltro & "%'") ' original
'           ResultadoX2 = Conexion.Exec("Select * from '" & NomTablaX & "' where texto like '%" & EsteFiltro & "%'") 'original
          
          Encabezado = True
          iVersPorLibro = 0 'contador por libro
          
           If ResultadoX2.Available = True Then

              Do While ResultadoX2.Available
                 Buscando = InStr(ResultadoX2!texto, EsteFiltro)
                 InicioTitulo = InStr(ResultadoX2!texto, "- ")
                 FinTitulo = InStr(ResultadoX2!texto, " -")

                 If chkVerRef.Value Then AquiReferencias = ResultadoX2!referencias

                 If InicioTitulo > 0 Then
                    Titulo = Left$(ResultadoX2!texto, FinTitulo + 2)
                    TituloOK = "<b><i>" & Titulo & "</i></b>"
                 Endif
            
                 If Buscando = 0 Then 'si no hay ninguna coicidencia pasa al siguiente dato
                    ResultadoX2.MoveNext
                    Continue
                 Endif
                  
                 iVeces = 0
              
                 Do
                   i = String.InStr(ResultadoX2!texto, EsteFiltro, i + 1)
                   If i > 0 Then
                      Inc coincidencias
                      Inc CoincidenciasLibro
                      Inc iVeces
                      
                      Select Case NumTabla 'contador por libro
                        Case 1 To 39
                          Inc iTotalAT
                        Case Else
                          Inc iTotalNT
                      End Select 'contador por libro
                    Endif
                    
                 Loop Until i = 0
                  
                 Proceso1 = Mid(ResultadoX2!texto, Buscando, Len(EsteFiltro))
                 Proceso2 = Replace$(Replace$(ResultadoX2!texto, Titulo, TituloOK), Proceso1, "<FONT><b>" & EsteFiltro & "</b></font>")
                 Proceso3 = Replace$(Proceso2, "[", "<FONT><b><i><sup>")
                 Proceso4 = Replace$(Proceso3, "]", "</sup></i></b></font>")
                 Proceso5 = Replace$(Proceso4, "*", "<FONT><b>*</b></font>")
                
                 If iVeces = 1 Then
                    If PrimeraLinea = True Then 'es true si es la primera linea es para evitar la primera linea vacia.
                       If chkVerRef.Value Then
                          ResultadosEncontrados = "<FONT><b>(" & NomTablaX & " " & ResultadoX2!capitulo & ":" & ResultadoX2!versiculo & ")</b></font>  " & Proceso5 & " <FONT><b>" & AquiReferencias & "</b></font>" & "<br>"
                          PrimeraLinea = False
                        Else
                          ResultadosEncontrados = "<FONT><b>(" & NomTablaX & " " & ResultadoX2!capitulo & ":" & ResultadoX2!versiculo & ")</b></font>  " & Proceso5 & "<br>"
                          PrimeraLinea = False
                        Endif                      
                    Else
                        If chkVerRef.Value Then
                           ResultadosEncontrados &= "<FONT><b>(" & NomTablaX & " " & ResultadoX2!capitulo & ":" & ResultadoX2!versiculo & ")</b></font>  " & Proceso5 & " <FONT><b>" & AquiReferencias & "</b></font>" & "<br>"  
                        Else
                           ResultadosEncontrados &= "<FONT><b>(" & NomTablaX & " " & ResultadoX2!capitulo & ":" & ResultadoX2!versiculo & ")</b></font>  " & Proceso5 & "<br>"  
                        Endif
                    Endif
                 Else
                    'entra en esta zona cuando hay mas de una coincidencia en un mismo versiculo.
                    If PrimeraLinea = True Then
                      ResultadosEncontrados = "<FONT><b>(" & NomTablaX & " " & ResultadoX2!capitulo & ":" & ResultadoX2!versiculo & ")</b></font><FONT><b> " & iVeces & "</b></font> " & Proceso5 & "<br>"
                      PrimeraLinea = False
                    Else
                      ResultadosEncontrados &= "<FONT><b>(" & NomTablaX & " " & ResultadoX2!capitulo & ":" & ResultadoX2!versiculo & ")</b></font><FONT><b> " & iVeces & "</b></font> " & Proceso5 & " <FONT><b>" & AquiReferencias & "</b></font>" & "<br>"
                    Endif
                 Endif
                  
                 Inc iVersPorLibro 'contador por libro                              
                 Inc ContadorVersiculos
                 ResultadoX2.MoveNext
              Loop
              
              If Not bSinLibros Then
                 If CoincidenciasLibro > 0 Then lstBPorLibro.Add(NomTablaX & "(" & CoincidenciasLibro & ")") 'contador por libro DE PRUEBA
              Endif
                          
             Endif
        Endif
        ResultadoX.MoveNext
        CoincidenciasLibro = 0
      Loop
      
  Next
  
  If Not bSinLibros Then lstBPorLibro.Add("Todos (" & coincidencias & ")", 0) 'contador por libro DE PRUEBAS
  If Not bSinLibros Then lstBPorLibro.Add("Antiguo (" & iTotalAT & ")", 1) 'contador por libro
  If Not bSinLibros Then lstBPorLibro.Add("Nuevo (" & iTotalNT & ")", 2) 'contador por libro
  
  txtEBuscar1.RichText = ResultadosEncontrados
  Wait 0.1
  ContadorCoincidencias = MostrarCoincidencias(ContadorVersiculos, coincidencias)
  ContenidoBusquedaGuardar &= ContadorCoincidencias & " (VisorRV1960 versión " & Application.Version & ")<br><br>" & txtEBuscar1.RichText
  Dec Application.Busy
  
End




 
v3ctor - Ver perfil del usuario Enviar mensaje privado  
v3ctor [ Domingo, 28 Agosto 2016, 01:01 ]
Responder citando    Descargar mensaje  
Mensaje Re: Mostrar Minúsculas Y Mayúsculas Igualmente (sqlite3) 
 
Creo que te lías innecesariamente. Si quieres búsqueda exacta, simplemente:
SELECT * FROM palabras WHERE palabra='marcelo'
 

Si quieres busqueda no sensible a mayúsculas y minúsculas:
SELECT * FROM palabras WHERE palabra LIKE 'marcelo'
 

Si quieres, además, buscar fragmentos de palabras (que contengan)
SELECT * FROM palabras WHERE palabra LIKE '%marcelo%'
 

O que empiecen por la cadena
SELECT * FROM palabras WHERE palabra LIKE 'marcelo%'
 

O que terminen por la cadena
SELECT * FROM palabras WHERE palabra LIKE '%marcelo'
 


El toqueteo de los pragmas te puede llevar a resultados espúreos por cuanto las igualdades de las cadenas pueden no ser correctas, etc. etc.



 
shordi - Ver perfil del usuario Enviar mensaje privado  
shordi [ Domingo, 28 Agosto 2016, 06:40 ]
Mostrar mensajes anteriores:    
 
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


 



 

cron