Cuando trabajamos con tablas con grandes cantidades de registros y necesitamos presentar información en un DataGridView, por ejemplo, ya habrán visto que el poblado del DataTable se puede tardar unos segundos, en algunos casos, ésta cantidad de tiempo es considerada aceptable, pero en ocasiones, como dice el refran "el tiempo es oro"; es necesario recurrir a agotar todo lo posible para mostrar información en el menor tiempo posible.
Quiza dirán que aquí depende del usuario, recriminando el uso incorrecto de la opción de Buscar; por no buscar cosas específicas sino, por criterios muy generales.
Esta vez, veremos como implementar la opción de "Ver más registros" de dos formas. Y limitar los registros mostrados en la consulta
Es algo sumamente sencillo y pequeño en código, pero con grandes posibilidades en uso.
Opción 1: usando Visual Basic
Cuando hagan el Fill del DataAdapter, pongan esto:
Private _posinicial, _limit as Integer _posinicial=0 ' esta será la que utilizaremos para saltar de fila en fila _limit=100 ' cuanto es lo máximo permitido para mostrar en cada bloque Private _conn As Npgsql.NpgsqlConnection Private _tabla As DataTable Private _adapter As Npgsql.NpgsqlDataAdapter _adapter = New NpgsqlDataAdapter("select * from foo", _conn) _tabla = New DataTable _adapter.Fill(_posinicial, _limit, _tabla)Con esto estamos haciendo que sólo se agreguen a la Tabla "_tabla" los primieros 100 registros obtenidos en nuestra consulta; y agregando a la posición inicial la cantidad de registros que se han visualizado
Luego para implementar la filosofía "Ver más..." hay que simplemente trabajar con esto:
_posinicial+=_limit 'para actualizar la posicion inicial según lo último mostrado _adapter.Fill(_posinicial, _limit, _tabla)Éstas tres líneas pueden estar en el botón "Ver más...", esto muestra una cantidad igual de registros y reescribimos el valor de la posición inicial, para que siga agregando donde se quedo.
Al llegar al máximo, obviamente dejará de presentar registros, tampoco esperen que se invente filas y las agregue hasta que dejen de dar clic en "Ver más..."
Opción 2: usando POSTGRES
Utilizando SQL es más rápido, porque la primera opción realmente hace la consulta total a la tabla, no se cuál es la pila de los desarrolladores de Microsoft, porque la idea principal es el performance, al menos para mí, pero con la forma anterior, siempre hace toda la consulta, la guarda en memoria y la va mostrando poco a poco. Por eso para mí esta es la mejor manera:
_adapter = New NpgsqlDataAdapter("select * from foo order by codigo limit" & _limit & " ofsset " & _posinicial, _conn) _tabla = New DataTable _adapter.Fill(_tabla)Para referencias, visiten el siguiente link en el sitio oficial de postgres
Limit y Offset en Postgresql
Para el botón "Ver Más..." ahora sería lo siguiente:
_posinicial+=_limit 'para actualizar la posicion inicial según lo último mostrado _adapter.SelectCommand.CommandText="select * from foo order by codigo limit" & _limit & " ofsset " & _posinicial _adapter.Fill(_tabla)Lo que hacemos es nada más actualizar la posición inicial (Offset en postgres) para mostrar los siguientes registros y; reemplazar el SelectCommand del DataAdapter, luego hacer nuevamente el Fill al DataTable y así, adherir los siguientes registros del resultset.
En este caso es muy importante utilizar un ORDER BY, para que tengamos mejores resultados.
Cordialmente,
Juan Ramirez
El Salvador