tincho 03-04-2022, 22:40
Hola a todos.
[Imagen: 2ipbxXu.png]
Como algunos de ustedes sabrán, hay motores de bases de datos que soportan las expresiones regulares (REGEXP) en las sentencias SQL.
Esto es muy útil si se desea filtrar registros cuando las capacidad de LIKE se ve superada.
Si por ejemplo se buscan registros que en un determinado campo tengan los "A" o también "Á" con LIKE no se puede hacer pero con REGEXP si.
Ejemplo:
Código:
SELECT * FROM UnaTabla WHERE UnCampo REGEXP '[AÁ]'
El inconveniente sucede cuando escribimos un texto en una casilla de búsqueda de nuestro programa y queremos que al escribir "A" o "a" aparezcan listados todos los registros que en un campo tal tengan "A", "Á", "a" y "á", en este caso entra esta función llamada  SQLike que les comparto aquí, que en base a una cadena de texto que se pasa como parámetro esta devuelve otra pero con todas las posibilidades de las letras con tilde.
Código:
'' Converts the word into an expression that allows filtering with accents in a like statement.
'' The supported languages are: Spanish, Portuguese, Italian, French, German and Czech.

Static Public Function SQLike(sInput As String) As String

  Dim i As Integer
  Dim sSymbol As String
  Dim aOut As New String[]
  Dim sOut As String

  aOut.Clear

  For i = 1 To String.Len(sInput)
    sSymbol = String.Mid(sInput, i, 1)
    Select String.LCase(sSymbol)
      Case "a", "á", "à", "â", "ã", "ä", "æ"
        aOut.Add("[aáàâãäæ]")

      Case "e", "é", "è", "ê", "ë", "ě"
        aOut.Add("[eéèêëě]")

      Case "i", "í", "ì", "ï", "î"
        aOut.Add("[iíìïî]")

      Case "o", "ó", "ò" "ô", "õ", "ö", "œ"
        aOut.Add("[oóòôõöœ]")

      Case "u", "ú", "ù", "û", "ü", "ů"
        aOut.Add("[uúùûüů]")

      Case "c", "ç", "č"
        aOut.Add("[cçč]")

      Case "n", "ñ", "ň"
        aOut.Add("[nñň]")

      Case "y", "ý", "ÿ"
        aOut.Add("[yýÿ]")

      Case "b", "ß"
        aOut.Add("[bß]")

      Case "z", "ž"
        aOut.Add("[zž]")

      Case "d", "ď"
        aOut.Add("[dď]")

      Case "r", "ř"
        aOut.Add("[rř]")

      Case "s", "š"
        aOut.Add("[sš]")

      Case "t", "ť"
        aOut.Add("[tť]")

      Case Else
        aOut.Add(sSymbol)

    End Select
  Next
  sOut = aOut.Join("")
  Return sOut

End
Archivos adjuntos
.gz
sample-string-sqlike-0.0.1.tar.gz (Tamaño: 12.42 KB Descargas: 1)
tincho 03-04-2022, 19:49
Jesús: ¿Es posible para los usuarios no administradores cambiar un tema  de categoría? en caso afirmativo ¿como se hace?
Harpo 03-04-2022, 08:46
Saludos!
Les traigo una pequeña demo de cómo usar una característica de SQLite: Full-Text Search (FTS5). Iba a contestar al mensaje de Gambafeliz sobre filtrar acentos y pensé que quizá ya estuviera este tema expuesto en el foro antiguo, no encontré nada al respecto. Seguramente los veteranos ya conozcan esta característica, para los neófitos será algo nuevo. Y cómo lo mejor es un ejemplo práctico aquí tienen una demo básica para empezar con el tema.

¿Qué es FTS5?
En un módulo interno de SQLite que permite realizar búsquedas "Full-Text" mediante la creación de tablas virtuales. Este tipo de búsquedas ignora acentos, mayúsculas ... se lo traga casi todo. Aquí tienen un par de enlaces:
SQLite FTS5
Full-Text Search Wikipedia

Para los que no quieran descargar la demo:
Para usar FTS5 hay que crear una tabla virtual:
[code]
La tabla contendrá los campos de texto sobre los que queremos buscar.

Después la cargamos desde una fuente de datos estándar, en este caso una vista que recoge datos de otras tablas:
[code]

Por último, podemos lanzar las consultas en formato FTS5 que tienen su particularidad:
[code]

La demo.
Antes de nada, el programa es un "hijo putativo" Angel  de una aplicación propia que utilizo para trastear con bases de datos, le he quitado lo irrelevante para el caso y limpiado, pero no tiene control de errores ni comentarios.... no debería darles ningún problema.

[Imagen: w1S9gCP.png]

En la imagen:
A la izquierda hay un GridView con información de la conexión y recoge el tamaño de la base de datos SQLite, tema relevante porque verán que esta engorda cual luchador de sumo, aunque no es un problema. Debajo un Log de lo que se va ejecutando con el tiempo empleado y el SQL ejecutado.

A la derecha empezando por arriba:
  • La primera linea contiene botones para ejecutar la demo (pasos 1 a 4), otro para borrar la tabla virtual FTS5, otro que muestra las tablas en la base de datos y el que cierra la aplicación.
  • La segunda es un Combobox que una vez completados los 4 pasos contiene sentencias SQL Full-Text de ejemplo para ver las posibilidades.
  • La tercera es TextArea donde se cargan las sentencias SQL, se pueden modificar y volver a lanzar. Todas las sentencias que ejecuta la demo pasan por aquí. A su lado hay 3 botones: ejecutar el SQL, limpiar el TextArea, limpiar el GridView. Si pulsan Enter en TextArea ejecuta la sentencia. Si hacen doble click sobre una linea del Log se vuelve a cargar el SQL aquí.
  • Por último un GridView con los resultados.
Todo, o casi todo, tiene un tooltip explicativo.

Los pasos a dar:
  1. Comprobar que nuestro SQLite tiene FTS5 habilitado, en la imagen se puede ver en la linea 8. En el LOG se ve la versión de SQLite que estamos utilizando.
  2. Crear y cargar los datos. Hubiera subido la base de datos que uso para pruebas, son datos de direcciones en España: Autonomía - Provincia - Población - Código Postal - Dirección. Pero hay una limitación de tamaño en lo que se puede subir al foro. Los datos van en un CSV con algo más de 100.000 registros, se puede limitar pero así se puede ver el rendimiento en las búsquedas. Ojo que este paso tarda sus buenos 15 minutos.
  3. Crear la tabla virtual para las búsquedas FTS5. Si pulsan el botón "Tables" verán lo que se crea en la base de datos.
  4. Cargar la tabla virtual con los datos del CSV. Estos dos últimos pasos son rápidos, no llegan a un 1 segundo a pesar de los 100.000 registros.
Una vez terminados los 4 pasos se carga el Combobox con búsquedas de prueba predefinidas, para trastear con ellas. Verán que la base de datos va engordando a medida que se ejecutan. Con el botón de "Remove" se puede borrar la tabla virtual y repetir los pasos 4 y 5.

El resultado:
[Imagen: N50ZYcB.png]

Espero que les sirva para sus proyectos, para mi es muy útil.
Un saludo.
Archivos adjuntos
.gz
FTS5_Demo.tar.gz (Tamaño: 925.02 KB Descargas: 5)
Páginas (566):    1 317 318 319 320 321 566   
Bienvenido, Invitado
Tienes que registrarte para poder participar en nuestro foro.
Recordarme?
Miembros: 295
Último miembro: ncofre98
Temas del foro: 1,748
Mensajes del foro: 9,072
Últimos temas
Problemas con las interru...
Foro: General
Último mensaje por: guizans, 14-12-2025, 18:40
Respuestas: 5 - Vistas: 247
Scrolling un ScrollArea
Foro: Controles/Librerías/Componentes
Último mensaje por: Shordi, 12-12-2025, 07:24
Respuestas: 5 - Vistas: 265
Ordenar en un TableView
Foro: General
Último mensaje por: guizans, 08-12-2025, 23:06
Respuestas: 9 - Vistas: 947
Resultados dispares según...
Foro: Bases de Datos
Último mensaje por: guizans, 04-12-2025, 22:49
Respuestas: 6 - Vistas: 402
Mover un Result a una pos...
Foro: Bases de Datos
Último mensaje por: guizans, 30-11-2025, 19:25
Respuestas: 2 - Vistas: 230
Powered By MyBB, © 2002-2025 MyBB Group.
Made with by Curves UI.