Mostrar Tablas y sus registros - Versión para impresión +- Comunidad Gambas-es (https://gambas-es.org) +-- Foro: Gambas (https://gambas-es.org/forum-3.html) +--- Foro: Aplicaciones/Fragmentos de Código (https://gambas-es.org/forum-8.html) +--- Tema: Mostrar Tablas y sus registros (/thread-1894.html) Páginas:
1
2
|
Mostrar Tablas y sus registros - Shell - 16-03-2025 Buenas!. Quizás deba mejor mostrar esto en el foro de bases de datos. ![]() He creado un ejemplo para mostrar las tablas de una base de datos y sus registros. Se puede seleccionar el archivo en concreto y ver en un GridView como es la tabla en cuestión. ![]() He probado con distintos archivos de distintos tamaños. ¿ Qué hacéis cuando la base de datos es enorme ?. En este ejemplo observo dos cosas. Imaginar una base de datos que contiene muchos registros. A la hora de seleccionar en el combobox la tabla en concreto,si esta tiene muchos registros hay una demora, en mostrar el nombre de la tabla tanto en el combobox como en el gridview. El efecto es, ves la lista de tablas en el combobox, seleccionas y hasta que no se muestra la tabla en el gridview no se muestra el nuevo cambio de item en el combobox. He probado con un base de 40K registros y se nota. Siempre se nota esto si la base contiene muchos registros. He probado con la base de los libros que se ha compartido por febrero. Esta tiene tres tablas, hay una que se llama "fondo" que en este ejemplo le cuesta muuuuucho mostrar, se muestra el reloj varias veces y desistí. ¿ Cómo solucionáis esas situaciones ? Estamos hablando de que la tabla fondos de la base libro tiene alrededor de 300K registros... ![]() Ah, no he añadido ordenar las columnas. Estoy usando el evento Data para mostrar los registros en el gridview. Sobre todo si son muchos. Para el retardo del cambio de item a mostrar en el combobox he usado esto: Código: Public Sub cmbTablas_Click() Eso parece funcionar, otra es muy distinta el tiempo que se tarde en mostrar los registros en el GridView Saludos 1:50'' para mostrar la tabla Fondos. RE: Mostrar Tablas y sus registros - Shordi - 16-03-2025 He visto tu código y lo he probado con 1.000.000 de registros. Tarda la vida entera. Le he echado un vistazo y es una pequeña tontería: Haces esto para construir el gridview: Código: For Each HRsf In HResul.Fields Si cambias de lugar la línea donde asignas el número de filas: Código: For Each HRsf In HResul.Fields Te correrá infinitamente más. Por otra parte, no es buena política asignar -1 en gridviews de ancho variable como es el caso porque ese ancho se calcula según el ancho del título y no se altera si el gridview aumenta su tamaño. Tampoco tiene mucho sentido hacer dos bucles recorriendo las columnas, si lo haces así: Código: For Each HRsf In HResul.Fields Por último una pequeñez, pero que también enlentece algo: En el evento Data utilizas la propiedad .Data, que es una referencia a la celda activa, pero eso requiere de más trabajo porque antes de saber y asignar el texto hay que buscarlo dentro del objeto. Usa la referencia directa a la celda (que para eso se facilitan las coordenadas row y column) y se ejecuta unas tres veces más rápido... aunque quizá no se perciba al ser un evento interactivo con el usuario. Corrección: con el método .Data tarda muuucho menos que con la referencia de row, column. Había confundido los archivos .prof del perfilador. O sea que no le toques al evento Data. Así con algo más de un millón de registros me tarda menos de un segundo en actualizar el gridview al seleccionar la tabla. Saludos Estoy planeando hacer un vídeo con tu programita para ilustrar la aceleración de los gridviews. ¿Me das permiso para adjuntar tu código al vídeo? Saludos RE: Mostrar Tablas y sus registros - Shell - 16-03-2025 Gracias Shordi. Que diferencia!. (16-03-2025, 20:37)Shordi escribió: Estoy planeando hacer un vídeo con tu programita para ilustrar la aceleración de los gridviews. ¿Me das permiso para adjuntar tu código al vídeo? Naturalmente, todo lo que ayude con Gambas es bueno para todos. ![]() He intentado usar el método expand poniéndolo a True, ademas añadí en la propiedad .autoresize del gridview a True y no se ajusta bien el tamaño de la columna. Lo estoy probando con la base que comente del ordenador ZxSpectrum y si uso el método expand la columna de los nombres de los programas queda así: ![]() El tipo de title es varchar y su ancho es de 250 Código: With grdTabla ![]() Si uso -1 en el ancho: ![]() Según la ayuda de Gambas: El método expand puesto a True: Cita:Devuelve o establece si una columna de GridView se expande automáticamente para ajustarse al ancho de GridView. Y sobre la propiedad .Width y usar -1 dice: Cita:Devuelve o establece el ancho de la columna. El ancho máximo es 1024. Si establece un ancho negativo, la columna se ajustará automáticamente para ajustarse a su contenido. Solo se tienen en cuenta las primeras mil líneas para calcular el ancho ideal. Parece que solo lo hace con las primeras 1000 líneas solo. En su día creo que usaba el tipo font y calculaba entre el ancho de la columna y el ancho del texto que usaba esa fuente. creo que lo llegué a usar con el evento Data, en este trozo de código no: Código: Public Sub MostrarEnGrid(lista As Collection) RE: Mostrar Tablas y sus registros - Shell - 17-03-2025 ¿ Y si hiciera algo como esto ? Pero declarando la fuente fuera del evento Data claro. Código: Public Sub grdTabla_Data(Row As Integer, Column As Integer) RE: Mostrar Tablas y sus registros - Shordi - 17-03-2025 No hace falta liarse tanto, simplemente activa la propiedad WordWrap del gridview a True y se comportará como las tablas de HTML, es decir, ampliará el alto de la fila para que quepa el contenido cuando sea necesario. Más simple y elegante... Saludos RE: Mostrar Tablas y sus registros - Shell - 17-03-2025 WordWrap no ajusta el ancho. Eso hay que verlo mejor. Aunque fuese a lo alto que no se deformase. Este método me ha resultado mejor. Sin usar expand ni -1 en el ancho de la columna Código: Public Sub grdTabla_Data(Row As Integer, Column As Integer) En concreto hay títulos de juegos que son exageradamente largos, pero son menos: Como este y ademas puede que sea hasta gracioso. ![]() ![]() Atención a la traducción: Cita:Tenía una cabeza tan grande que si fuera un gato tendría que tirar los ratones de debajo de la cama con una ceja Lo cierto es que no ha perdido rendimiento con ese método y la base de los libros. Saludos RE: Mostrar Tablas y sus registros - Grandamakulo - 17-03-2025 (17-03-2025, 10:54)Shordi escribió: No hace falta liarse tanto, simplemente activa la propiedad WordWrap del gridview a True y se comportará como las tablas de HTML, es decir, ampliará el alto de la fila para que quepa el contenido cuando sea necesario. Más simple y elegante... Creo, en mi infinita zotez, que, además del .Wordwrap, se debe poner el .Rows[k].High = -1. RE: Mostrar Tablas y sus registros - Shordi - 17-03-2025 Efectivamente ha sido un lapsus mental de un servidor mientras hacía el vídeo (las cosas del directo). En realidad la solución que yo encontré al alto de fila hace un siglo era éste: Código: Public Sub grid_Data(row As Integer, col As Integer) Extraído del control wGrid que subí por algún lado hace ni se sabe. Tengo que probar la solución de Grandamakulo, si funciona es mucho más simple y rápido que el mío. Saludos. RE: Mostrar Tablas y sus registros - Grandamakulo - 17-03-2025 A mí me funciona, lo implemento en el evento _ColumnResize: Código: Public Sub grwPral_ColumnResize(Column As Integer) RE: Mostrar Tablas y sus registros - Shordi - 18-03-2025 La solución de Grandamakulo sólo es válida para GridViews con pocas líneas, porque recorre el millón de filas y vuelve a tardar la vida. He intentado pasar esa solución al evento Data... pero cambiar el tamaño de la fila dispara a su vez el evento Data y se produce un desbordamiento de pila. La que me funciona es la que encontré en su día... eso sí, hay que trabajar con el Richtext de las celdas en lugar del Text y colocarlo en el evento data. Para éste ejemplo sería: Código: Public Sub MostrarTablaEnGridView(nomtabla As String) El tema no es perfecto porque se me amplía bien, pero si se hace el gridview más grande y el ancho de las celdas aumenta, las filas no se encogen de alto... Es un fallo menor porque el texto sigue viéndose bien. Para encogerlas habría que cambiar el Mas(grdTabla... etc por un Min(grdTabla... etc) Sólo que me da pereza hacerlo ahora mismo. Saludos |