Trasteando en un dataset: seguimos jugando con valores timestamp

Hace unas semanas hablé de usar valores timestamp para controlar la versión del registro de cara a controlar a su vez los problemas de concurrencia, para actualizar datos, etc. Hoy voy a dar un posible uso a todo eso, usando dataset tipados. Vamos a trabajar con una tabla de ejemplo. Supongamos que:

  1. La tabla en cuestión tiene definida una columna, Control, del tipo timestamp.

  2. En el TableAdapter correspondiente hemos añadido dos consultas: una que nos recupera el MAX(Control) de la tabla (el valor más alto de control) y otra que nos devuelve las filas actualizadas desde que obtuvimos ese MAX(Control), o sea, aquellas cuyo valor timestamp sea mayor que el que tenemos guardado.

Sigue leyendo

Filtrar y apilar

Todo el mundo sabe, a tenor de lo que se cuenta en Internet, que Vista es menos usable (curioso palabro) que XP y el rendimiento es, igualmente, menor. Por ejemplo, si yo necesito encontrar un archivo que fue modificado el miércoles o el jueves pasado en una carpeta con unos doscientos archivos, en XP es tan fácil como abrir el menú contextual con el botón derecho del ratón y elegir Organizar iconos, Modificado y así tendré todo el contenido ordenado por la fecha en orden ascendente. Si quiero orden descendente, debo primero poner la Vista detalles. Puedo marcar la opción Mostrar en grupos y así tendré algo más manejable y en orden descendente (primero lo de hoy, luego lo de ayer, y así).

En Vista es mucho más largo, complicado y lento. Tengo que desplegar Fecha modificación, seleccionar (pinchar y arrastrar) los días y se me filtra el contenido, de forma que sólo se mostrarán aquellos archivos modificados en esas fechas. En fin, desde mi punto de vista de vago altamente especializado, sé qué me gustaría tener en el curro. Sigue leyendo

No es conmutativo, no

Supongamos lo siguiente: tengo un formulario con, entre otros, los siguientes controles:

  1. Un ListBox que se usa como control de navegación. En este caso, muestra los nombres de todos los clientes. Está enlazado mediante un BindingSource a la DataTable de clientes.

  2. Un TextBox que muestra la fecha de adquisición de «algo» por el cliente.

  3. Un DateTimePicker que permite seleccionar la fecha de adquisición de «algo» por el cliente.

El DateTimePicker no se muestra cuando estamos en modo «Ver datos», sólo al crear o modificar un «algo» comprado por el cliente. Para ello tenemos un método que se encarga de que en modo «Ver datos» se vea el ListBox y el TextBox y en modo «Altas y modificaciones de algos» se vea el DateTimePicker y no el ListBox ni el TextBox.

Hasta aquí sencillo, ¿no?

Bien, pues si al pasar a modo «Ver datos» el orden es el siguiente:

MiListBox.Visible = True

MiDateTimePicker.Visible = False

MiTextBox.Visible = True

Si el DateTimePicker tiene el foco se selecciona el último cliente que hay en el ListBox. Sin embargo, si el orden es:

MiListBox.Visible = True

MiTextBox.Visible = True

MiDateTimePicker.Visible = False

Se queda seleccionado el cliente en el que estaba.

Supongo que sus razones habrá, pero a mí me lleva dando la tarde. Y no ha sido mucho tiempo porque la gestión de las Visitas también tiene su DateTimePicker y su TextBox, pero por casualidad en el orden correcto y sólo he tenido que comparar línea a línea qué se hacía en Visitas y no en «algos», que si no…

Mecanizado de pieza, te odio

Llevo unos días más gruñón y contestón que de costumbre. Las razones son, principalmente, dos. La primera es que estoy incubando algo: me duele la garganta, me zumban los oídos… veremos mañana como me levanto. La segunda es que estoy atascado con la aplicación que ando haciendo para fábrica.

El jefe decidió este verano dos cosas: la primera es que había que hacer una base de datos de lo que fabricamos para poder sacar unas órdenes de fabricación en condiciones, gestionar nuestros productos, control de stock y lo que se tercie, que las hojas manuscritas al final se pierden o de tantas tachaduras y enmiendas no se entienden. Y más teniendo en cuenta que anda reduciendo plantilla y, claro, si echa al responsable de tal colección la llevamos clara porque es él quien sabe cómo se hace cada pieza.

La segunda cosa que decidió el jefe es que me encargara yo del asunto. Sin quejas por mi parte, porque así practico y le doy caña a Visual Basic. Llevo dos meses muy entretenido dando caña a los datasets. Este julio estuve preparando las especificaciones (no las hice bien, para variar) y documentándome sobre LINQ to SQL.

Sigue leyendo

Corrijo: Windows 7 = Windows 2000 Service Pack 12

Y Debian Lenny es Woody SP3. Mac OS X Snow Leopard debería llamarse Puma SP5. Y Ubuntu 8.10… eh… Debian Me SP3 (más o menos).

Mi Auris es en realidad un Corolla SP4 ó SP5.

Y la ISS (estación espacial internacional) no es más que Cabaña Neolítica Service Pack 512 con AMT (Advanced Materials Technologies), con la apariencia copiada de CHV 15 SE (Casa de Hombrecitos Verdes versión 15 Space Environment) ed. Especial Roswell 47.

En serio, lo que tiene uno que oír.

PD: gracias, Manu, por indicármelo.

Jugando con DataTables

Hace unos días veíamos una forma de trabajar con una relación m:n usando LINQ. En esta ocasión vamos a ver otra posibilidad y no voy a poner código, que ando mal de tiempo, así que a ver si consigo explicarme bien.

Supongamos que tengo dos tablas, Series y Personajes. Entre ellas hay una relación n:m (una serie tiene varios personajes, un personaje puede salir en varias series). La tabla que nos permite esta relación digamos que se llama PersonajesDeSerie y que sólo tiene dos campos: IdSerie e IdPersonaje. Por otra parte, en el formulario de personajes, que es donde podemos añadir las series donde aparece el mismo, queremos mostrar el título de la serie y el año de producción (podían ser más cosas, pero tampoco es plan de complicar el ejemplo). Para facilitar las cosas, nos creamos una vista en la base de datos que metemos como DataTable en el DataSet de Personajes. Es decir, tengo tres DataTable: Personajes, PersonajesDeSerie y vMisSeries, ésta última con los campos IdPersonaje, IdSerie, Titulo y Año. En mi caso, metidos en el mismo DataSet por comodidad.

Sigue leyendo

Windows 7 será un 2000 con la apariencia de KDE4

A esa conclusión llegaría si me hiciera caso de lo que leo por ahí. Vamos por partes: se ha presentado una versión preliminar de la Beta 1 (las Beta son versiones de prueba que más o menos funcionan y se parecen bastante a lo que será el producto final) del futuro Windows 7 y todo el mundo está opinando sobre lo que se ha visto (es decir, un vídeo, unas capturas de pantalla y poco más). Ya leo por ahí mil y un comentarios que dicen que es poco más que un Vista con una apariencia que es una copia de KDE4.

El aire a KDE lo vi yo ya con Vista, aunque sería difícil decir quién se inspiró en quién o si llegaron a soluciones parecidas independientemente. No me refiero a una similitud directa, salvo en algunos iconos, sino a un «aire». En 7 sigue con el mismo aire (es decir, algo «bonito» frente a la tosquedad de Gnome o el modo clásico de Windows), y, como KDE, con iconos grandes en la barra de tareas, mientras que hasta ahora habían sido bastante pequeños. Es una copia descarada, claro. El hecho de que cada vez trabajemos con pantallas más grandes y de mayor resolución y que se quiera dar impulso a las pantallas táctiles no tiene nada que ver.

Sigue leyendo

Número de cifras de un número

Comentando anécdotas de clase el otro día me acordé de un problema chorra de programación, de esos para que la gente se acostumbre a usar bucles, variables y tal: invertir el orden de las cifras de un número dado (por ejemplo, convertir el 768 en el 867). Lo primero era conocer el número de cifras del número dado. La solución dada fue jugar con sucesivas divisiones enteras y el resto que daban. Yo llamé al profesor y le dije y, ¿no es más simple tomar la parte entera del logaritmo decimal del número dado y sumarle 1? El profesor lo pensó unos momentos y me contestó ¿y cómo se lo explico a ellos?, señalando a mis compañeros. Y tenía razón, porque ahí había gente de ciencias y de letras y alguno que no había terminado bachillerato. Seguro que se pone a hablar de logaritmos y a más de uno le da un patatús.

Por otra parte, sigo pensando que mi forma es la más simple y elegante.

Una lanza a favor de UAC

Pues sí, yo estoy a favor de UAC y considero que es un gran invento. ¿La razón? La combinación de seguridad y comodidad (¡Hala lo que ha dicho! ¡Que UAC es cómodo!).

En Windows NT y Linux tenemos básicamente dos tipos de usuarios: el usuario normal y el superusuario (administrador en Windows, root en Linux). El superusuario puede realizar tareas administrativas, esto es, puede cambiar la configuración del sistema, instalar y desinstalar aplicaciones, asignar los permisos que van a tener los usuarios normales… la teoría y la historia dicen que lo más seguro es trabajar como usuario normal y usar un superusuario sólo cuando tengamos que hacer esas tareas administrativas.

En XP todos sabemos que lo más habitual, fuera de entornos empresariales (y aún en estos) es usar usuarios con derechos administrativos, usuarios administradores. No sé si fue con idea de facilitar el cambio de Windows 9x a Windows NT para el entorno doméstico, pero en XP el primer usuario que se crea es administrador y es con el que se acostumbró la gente a trabajar. El problema de esto lo hemos podido ver y sufrir estos años: aplicaciones mal programadas que pedían derechos administrativos por poco que hicieran, profusión de virus y malware sin control…

Sigue leyendo

XP, Vista y el rendimiento

Estoy ya hasta las narices, casi dos años después de la salida al mercado de Vista y a poco más de uno (esperemos) del lanzamiento del futuro Windows 7 (a ver qué nombre comercial le ponen) de oír todavía «XP tiene mejor rendimiento que Vista». Ah. Guay. La pregunta con la que se responde a esta afirmación es obvia: «¿qué entiendes por rendimiento?». Sin embargo, esa pregunta apenas la he visto formulada. No sé, igual son mis años pasados estudiando ingeniería los que me hacen hacer esta incómoda pregunta, pero las veces que la he realizado la respuesta obtenida (tras una mirada de incomprensión, si la pregunta la he hecho en persona) es «está claro, Vista es más lento que XP». Hale.

Sigue leyendo