28 diciembre 2010

Limitar las consultas desde Visual - "Ver más registros..."

Bueno, mas de medio año de haber dejado literalmente en el olvido este blog, retomo la pantalla de "publicar entrada", para compartir con ustedes un tip, acerca de como manejo el tema de Optimizar consultas usando un DataTable y poblarlo haciendo uso de un DataAdapter.




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

04 mayo 2010

El primer Beta de la versión 9.0 ha sido liberado

Saludos,  
Tengo una buena noticia que contar!!!
Anuncio original: http://www.postgresql.org/about/news.1198  MAY 3, 2010 9:00 EDT:  El primer beta de la versión 9.0 de PostgreSQL está ahora disponible. La versión 9.0 es la primera versión de PostgreSQL que incluye replicación binaria, en tiempo real, integrada y con capacidad de responder consultas en la réplica, este tipo de replicación consiste en dos características: "Hot Standby" y "Streaming Replication". Combinando esto con las otras características que se incluyen, está nueva versión permitirá expandir la adopción de PostgreSQL por nuevos usuarios y en nuevos tipos de aplicaciones.  

Esta es una versión beta. Eso significa que se espera que tenga errores, inconvenientes y documentación incompleta. 9.0 beta está siendo liberado para que nuestros usuarios puedan encontrar esos inconvenientes y nos permitan eliminarlos antes del lanzamiento final. El Grupo Global de Desarrollo de PostgreSQL requiere que todos los usuarios de PostgreSQL descarguen y prueben la versión 9.0 beta para ayudarnos a producir en un tiempo razonable una versión 9.0 libre de problemas.  

En la versión 9.0, una gran cantidad de nuevas características y mejoras permitirán a desarrolladores y DBAs ampliar su uso de PostgreSQL; estas incluyen:      
  • Nueva replicación binaria
  • Soporte para 64-bit en Windows
  • Un LISTEN/NOTIFY mejorado permite notificar los eventos de la base de datos de forma más rápida
  • Bloques de procedimientos anónimos con la sentencia DO
  • Triggers condicionales y triggers por columnas, estos últimos se ajustan al estándar SQL
  • Soporte para Python 3 en PL/Python y numerosas mejoras en PL/Perl
  • Restricciones de unicidad para datos no escalares (exclusion constraints)
  • Se mejoró el soporte para datos del tipo llave-valor
  • Remoción automática de joins, esto permitirá optimizar consultas generadas por sistemas ORM.

La lista completa de más de 200 cambios está disponible en las notas de versión: http://developer.postgresql.org/pgdocs/postgres/release-9-0.html.  

Usuarios interesados en sacarle el mayor provecho a estas nuevas características deberían descargar y migrar sus aplicaciones a PostgreSQL 9.0 beta ahora. Debido a que la versión 9.0 incluye algunas nuevas características importantes asi como código interno revisado, asi como cambios a la sintaxis permitida por el lenguaje PL/PgSQL, se espera que existan problemas de compatibilidad con versiones anteriores.  

El código fuente, asi como instaladores binarios para alagunas plataformas, están disponibles en el sitio web de PostgreSQL:     

Cordialmente,
Juan Ramírez
El Salvador

03 mayo 2010

Inicio

Bueno, hoy se escribe una parte más de mi historia, porque hoy? porque este día me encuentro en un lugar de los más difíciles para un simple mortal, un lugar donde se decide si te mueves hacia la izquierda o la derecha, no tiene nada que ver con política, claro esta, sino con una decisión de trabajo.


Lejos de ello, abro este blog, soñado días atrás, con la finalidad de plasmar mi trabajo desarrollando aplicaciones con Visual Basic .Net versión 2005. Pareciera que tengo años trabajando esta plataforma pero te puedo asegurar que no es así. En mis estudios en el ITCA aprendí Visual Basic 6.0, Don Jesús, Don Santiago, Don Boris, fueron parte de mis profesores en aquellos años, sino menciono a los demás, no es porque no agradezca sus conocimientos, sino, porque ya es hora de la salida del trabajo y tengo compras que ir a hacer y además no quiero hacer de este blog un lugar para historias de mi vida, sino, un blog con puro código del Net Framework.


Saludos y espero poder continuar con este blog, sin perder el objetivo principal, dar a conocer que en Zacatecoluca se programa en Visual Basic .Net



Cordialmente,
Juan Ramírez
El Salvador