Mostrar Minúsculas Y Mayúsculas Igualmente (sqlite3)
Artículo |
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 [ Sabado, 27 Agosto 2016, 23:54 ]
|
|
Mostrar Minúsculas Y Mayúsculas Igualmente (sqlite3)
Comentarios |
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 [ Domingo, 28 Agosto 2016, 00:21 ]
|
|
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 [ Domingo, 28 Agosto 2016, 01:01 ]
|
|
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 [ Domingo, 28 Agosto 2016, 06:40 ]
|
|
|
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
|
|