22 marzo 2006

Truquillos para programar en VS2005

Sigo negándome a creer que en los Visual Studio de .net hayan eliminado la característica de VB6 de moverse entre procedimientos usando Control + Flecha arriba o abajo. ¿Tan difícil es? Sólo he encontrado un artículo de un coreano que programa una macro para el IDE de VS 2003 con el que ofrece algo parecido. Pero no he llegado ni a probarlo.
Bueno, la cosa es que gugleando por ahí he encontrado el artículo que os enlazo en el título, con algunos truquitos de teclas (accesos rápidos) para Visual Studio. Espero que os aprovechen. Especialmente prácticos los de cortar y pegar líneas sin seleccionarlas, y el de insertar línea nueva sobre la actual o bajo ella.

16 marzo 2006

Las interioridades del Databinding

Hoy estaba buscando cómo utilizar un XML como fuente de datos. Creo recordar que el asistente de VisualStudio 2005 con el que se selecciona el DataSource de un control permitía crear un XMLDataSource (igual que un ObjectDataSource como los que ya tenemos), pero buscando veo que no, que quizá lo permita para un proyecto asp.net, pero no para una aplicación Windows. Así que me encuentro con el artículo premiado de hoy, que para ofrecer un enlace a datos con un archivo XML primero nos comenta brevemente el comportamiento interno de una BindingList (hablando desde CurrencyManager y PropertyManager) y me ha aclarado mucho las ideas en este campo.
Una vez explicado qué es un databinding en .net 2.0, se mete a convertir un documento XML en una clase fuertemente tipada, para lo que se define clases en tiempo de ejecución que representen los elementos del XML (cuyo esquema no conocíamos previamente). Sí, has oído bien, "define clases en tiempo de ejecución", para eso usa una librería CodeDom que (creo que) incorpora el Framework. Esta parte es más compleja y nos toca mucho más de lejos, pero no puedo dejar de reseñarlo porque es genial.
Por último, sobre ese objeto, se crea un ObjectDataSource para enlazar los controles a él.
En conclusión, un artículo complejo pero muy chulo, con el que aprender muchas cosas nuevas.

Etiquetas:

13 marzo 2006

Databinding en Flash

Para introducir datos en una película Flash, hasta ahora habíamos barajado y utilizado con éxito un método: el acceso a variables públicas de la película desde fuera. Pero es un método escaso, sobre todo por nuestra intención de mostrar mini-listados dentro de la película. Aunque si las variables fueran de tipo array... pero no voy a adelantar nada, vamos a ir viendo otra forma, y después decidiremos.
La otra posibilidad, mucho más potente, de nuevo se llama Databinding. Flash, desde su versión 2004, ofrece un mecanismo de enlace a datos. No he profundizado mucho, pero dejo algunos artículos que me parecen interesantes:
  • Tutorial de Databinding en Flash. Ejemplo en español usando XMLConnector de cómo acceder a un archivo XML por su URL y conectar controles con sus campos. Al cambiar un combo, se actualizan el resto de controles con los datos de otro registro automáticamente.
  • En la página de Macromedia viene Data Binding in Flash, un artículo de un guaperas que puede ser interesante (el artículo, no el guaperas, hombre) aunque es muy básico y sencillo.
  • Data Binding (Ultrashock) es un completo artículo que detalla casi todas las posibilidades que ofrece la tecnología de una forma muy sencilla y con muchos ejemplos totalmente funcionales. Además es como debe ser: una página que enseña flash y que está hecha en flash, y bastante bien por cierto.
  • Binding Flash Movie to a MS SQL Server Database and a Web Service. Por lo que he mirado el título dice más que el artículo, pero a ver si encontráis más que yo, lo bueno es que viene de una página que suelo mirar, que da el código fuente (y suele ser más completo que el artículo), y lo malo que habla de ASP (Responses y Redirects), aunque creo que será adaptable a WinForms.
Una vez que seamos capaces de probar a conectar con una bd y mostrar sus datos, el siguiente paso es intentar conectarnos con objetos de negocio. Esto creo que va a ser mucho más difícil, aunque en un artículo se habla algo de recibir datos en un DataSet o algo así, y otra posibilidad de más nivel es generar un XML con los datos de negocio y pasárselo al Flash para enlazarnos con esos datos.

Por último, mirando cómo funciona el Datagrid que ofrece Flash, encuentro este tutorial en español también (anda, que hoy me estoy portando bien). Quedaros con esa página, que para Flash parece una buena fuente de información (ya van 2 artículos de ahí). Además de cómo configurar el Datagrid, algo que debemos conocer (habrá que buscar más información al respecto), también comenta el rellenado de datos, y aunque lo hace a partir de un array, es algo en lo que tenemos que profundizar. Como esbozaba al principio de este escrito, una alternativa cuya implementación puede funcionar de forma sencilla es el rellenado de un array público desde fuera, aunque no es la alternativa más elaborada.
Mezclando las ideas del XML y del Datagrid, aquí os dejo otro artículo en dos partes que viene muy clarito, y de una página que también os podéis guardar para ir aprendiendo otras cositas de Flash.

En resumen, existe la posibilidad de conectarse con bases de datos o con archivos XML (a través de una URL, creo que también debe poder hacerse sobre un fichero local, o mejor, sobre un string que almacena los datos XML; programáticamente, esta opción parece la mejor). También podemos usar un array. Hay que probar las opciones y decantarse después por una.

PD: Para terminar, y de regalo, os dejo una página con ejemplos de código en Action Script (parecidas a las bibliotecas de funciones de Java Script). Sirve para copiar funcionalidades que se necesiten, para aprender buenas prácticas, pero sobre todo para aprender a programar mirando cómo lo hacen los que ya saben.

Etiquetas: ,

10 marzo 2006

Utilización de SQL Express en aplicaciones

Desde Lepe con amor. Así nos trata el Rafita, siempre mirando lo mejor para nosotros y para nuestros programitas. Pero como lo hace desde la sombra, pues me ha mandado a mí este articulito que puede ser muy productivo, sobre la integración de SQL Server Express en una aplicación personalizada y distribuible.
La verdad es que mi preferencia por Access frente a SQL Server para una aplicación monopuesto está empezando a tambalearse. Según este artículo, es muy sencillo generar un ejecutable que instale en el cliente tanto nuestro programa como el servidor SQL Server Express y añada nuestra base de datos (o genere una nueva) en ese SQL Express. Luego falta añadir una opción de copia de seguridad a nuestra aplicación para generar la copia automáticamente, y de vez en cuando compactar la bd (y lo que necesite, estoy poco puesto en administración-de-bases-de-datos-SQL-Server-Express-dejadas-de-la-mano-de-dios-en-el -equipo-de-un-cliente-lejos-de-un-desarrollador-cariñoso-que-la-arrope).
Y recadito (más bien trabajo) para nuestros super-becarios: Juan y Salva, a ponerlo a funcionar. Pasos:
  1. Salva: construir una BD en SQL Server Express con la tabla y campos que necesite Juan.
  2. Juan: probar que lo que llevamos hecho se conecta con igual facilidad a una SQL Server que a una Access (y crear un DSqlServer). Para esto hará falta tener ya la fábrica de D's.
  3. Salva otra vez: A investigar qué necesidades tiene una bd SQL Server, como compactación, regeneración de índices, etc. y cómo se hace la copia de seguridad. Investigar un interfaz programático (desde código) para hacer todas estas cosas.
  4. Juan: implementar en nuestro DSqlServer las 'necesidades' encontradas por Salva.
Íremos desgranando todo esto, no es urgente pero organizaros para irlo haciendo pronto.
Bueno, y corto ya que se me está enfriando la calzone del Hacendado que me he traído hoy para comer. Por cierto, Berny, está muy buena si te gusta la abundancia del queso cutre de las pizzas congeladas, pero hay que calentarla varias veces, porque fría está muy mala. Y conviene traerse un cuchillo (ups).

01 marzo 2006

Recuperar autonumérico generado en un AddNew

Hoy me he embalado. Hemos retomado un tema que teníamos pendiente, la recuperación de valores autonuméricos generados por la base de datos tras añadir un nuevo registro a una tabla. Es necesario usarlo para obtener el Id del objeto, y ADO.net, a diferencia de su hermano chico de VB6, no incorpora la posibilidad de hacerlo. ¿Por qué? Por varias cosas: porque el DataSet está desconectado de la bd y es el DataAdapter el que gestiona esto, porque cada bd tiene un mecanismo distinto para devolver el autonumérico, yo que sé. La cosa es que, aunque esos argumentos no me convencen del todo, el hecho y verdad (que me gusta esta coletilla) es que lo han quitado, y hay que buscarse la vida para obtenerlo manualmente. En el artículo que os enlazo (en el título del artículo) comenta los 2 casos, SQL Server y Access. El de Access es aplicable también a SQL Server (reutilización), pero el de SQL Server es más eficiente por requerir sólo una excursión (roundtrip) a la bd, no 2 como en el método de Access. A pesar de lo cual, la decisión ahora va a ser hacerlo de forma genérica, con el SELECT @@IDENTITY en el evento RowUpdated del DataAdapter. ¿Lo estamos haciendo así actualmente, Carvajal?
Como tenemos que rediseñar la capa de acceso a datos para adaptarnos al tipo (web o bd, y qué tipo concreto de bd), quizá especialicemos la clase para aprovechar mejor SQL Server, pero para eso hay que añadir procedimientos almacenados a la bd, otra pega. De momento lo dicho, la doble arroba y palante.

Nos ponemos al día

Tras un mes movidito en el que no he tenido mucho tiempo para escribir, empiezo Marzo con la intención de ponerme al día y ser más aplicado. Resumiendo un poco la situación actual:
  • Comenzamos por la terraza: interfaz de usuario.
    Caña dejó terminado el CEV de páginas, para mostrar las ventanas tipo explorador web. Esto ya fue revisado por mí, y compilado en una dll propia: Nibi.UI.CEVPaginas. Notar que vamos a usar Nibi como espacio de nombres para nuestras funcionalidades genéricas, y el subespacio UI o Negocio o Datos según a qué capa de aplicación se aplique. Ah, saludos al Cañita si todavía nos lee de vez en cuando.
  • A medio hacer tenemos FListadoBase, que ya muestra una colección de negocio sobre un DataGridView, y muestra unos filtros sobre ese control pero que aún no están operativos.
  • Bajamos al nivel de calle: el negocio.
    El objeto EBase está ya casi terminado, incluye ya la gestión y notificación de errores y de avisos (con o sin respuesta). A falta de una cruel revisión, está ya operativo.
  • Estamos trabajando con EColBase, raíz de las colecciones de negocio. Le estamos incluyendo actualmente funcionalidad para filtrar mediante una estructura de filtros que reutilizaremos después también para las Vistas, que están a medio camino del interfaz de usuario, por lo que aún no sé dónde se implementarán.
  • Y nos queda pendiente limpiar el almacén del sótano: el acceso a datos.
    Vamos a definir una jerarquía, para no atacar a DAccess directamente, sino contar con varias maneras de acceder a los datos y de específicar de forma genérica cuál usar.
Nos hemos planificado un poquito, y la semana del 13 esperamos comenzar a generar objetos de negocio como churros, contando con que toda la funcionalidad de apoyo esté lista.

P.D. Aunque no tiene nada que ver con este proyecto, os dejo un artículo muy interesante sobre cómo introducir código .net en SQL Server 2005, usando lo que llaman SQLCLR. En sota vamos a usar Access, así que esto no se aplica, pero ahí queda para ir abriendo boca y para futuros proyectos (y para que no se me pierda el enlace, carajo, para qué inventar más excusas). Por cierto, en ese artículo hacen uso de la instrucción using (ojo, no directiva ni declaración, sino instrucción), no la conocía y me ha resultado curiosa, creo que debe emplearse sobre todo al abrir conexiones a una base de datos.