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)
crevilla 01-04-2022, 07:09
Hola a tod@s,

Tal vez muchos ya sepan sobre este pedacito de código a continuación. A mi me tomó bastante tiempo aprender a utilizarlo bien y aquí lo posteo para cualquiera que vaya comenzando su camino y quiera aprender un poco más a usar este control tan útil.
El código sirve para popular un GridView (llamado "gridIzq") con los resultados de un query desde una base de datos. El Gridview muestra los encabezados con los nombres de cada campo del recordset. 
Código:
Try rsRecords = Connection.Exec(sQuery)
    gridIzq.header = GridView.Horizontal
    gridIzq.grid = True
    gridIzq.Rows.count = 0
    gridIzq.Columns.count = rsRecords.Fields.Count
    
    For iInc = 0 To rsRecords.Fields.Count - 1
      iJnc = 1
      Do While Mid(rsRecords.Fields[iInc].Name, iJnc, 1) <> "." 'En MySQL el formato es nombreTabla.nombreCampo, así recuperamos el nombre de campo solamente para el Título de la columna
        iJnc += 1
      Loop
      gridIzq.Columns[iInc].Text = Right(rsRecords.Fields[iInc].Name, Len(rsRecords.Fields[iInc].Name) - iJnc)
      gridIzq.Columns[iInc].Width = 10 * Len(Right(rsRecords.Fields[iInc].Name, Len(rsRecords.Fields[iInc].Name) - iJnc))
    Next
    
    gridIzq.Rows.Count = rsRecords.Count

y no olvidarse de agregar el siguiente código al evento _Data del GridView:

Código:
Public Sub gridIzq_Data(Row As Integer, Column As Integer)
  If (rsRecords <> Null) Then
    If Row >= 0 Then
      rsRecords.moveTo(Row)
      Try gridIzq.Data.Text = Str(rsRecords[Column])
    Endif
  Endif
Catch
Print Error.Text
End

Espero esto ayude a alguien. 
Saluditos, 
Yo.
Páginas (560):    1 311 312 313 314 315 560   
Bienvenido, Invitado
Tienes que registrarte para poder participar en nuestro foro.
Recordarme?
Miembros: 288
Último miembro: shoUsho
Temas del foro: 1,729
Mensajes del foro: 8,985
Últimos temas
Paren...WAIT !!!
Foro: Aplicaciones/Fragmentos de Código
Último mensaje por: guizans, 25-08-2025, 14:49
Respuestas: 3 - Vistas: 420
GambOS
Foro: General
Último mensaje por: guizans, 20-08-2025, 13:58
Respuestas: 0 - Vistas: 284
Gambas y Wayland
Foro: General
Último mensaje por: guizans, 20-08-2025, 13:56
Respuestas: 6 - Vistas: 567
Odio a gb.Report
Foro: General
Último mensaje por: guizans, 19-08-2025, 10:40
Respuestas: 8 - Vistas: 921
Powered By MyBB, © 2002-2025 MyBB Group.
Made with by Curves UI.