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 visualizadoLuego 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 postgresLimit 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
como puedo hacer una consulta para que me traiga datos de diferentes tablas relacionadas en postgresql desde visual estudio en un formulario..??? se puede hacer esto, como.?
ResponderEliminares sencillo no es nada diferente de como haces la consulta normal....
ResponderEliminarprimero debes hacer la consulta en sql
select *
from tabla1 as a, tabla2 as b
where a.campo_comun=b.campo_comun
luego en mi ejemplo reemplazas el script anterior en esta linea
_adapter = New NpgsqlDataAdapter("SCRIPT QUE PUSE ANTES", _conn)
y listo!