Resumen Y2K - Problemas de Y2K conocidos en MS Access 97 y VB

Mensaje enviado por MMANRIQUE@PILLSBURY.COM


Algunos problemas conocidos para el año 2000 son los siguientes:

MS Access 97

Utiliza una Tecnología de Ventaneo para las fechas introducidad con 2 dígitos en el campo para el año, en la que la Fecha Pivote es el 31 de Diciembre del año 2029, por lo que todas las fechas introducidas en el rango de 01/01/00 a 12/31/29 serán reconocidas como dentro del rango del 01/01/2000 al 12/31/2029, y las fechas introducidas en el rango de 01/01/30 al 12/31/99 se reconocerán como dentro del rango 01/01/1930 al 12/31/1999.

Para formateo de la entrada, pueden utilizarse tanto Formatos Predefinidos como Formatos Definidos por el Usuario. En la Máscara de Entrada puede utilizarse cualquiera de éstos tipos de formato. Si se utiliza un Formato Predefinido de Fecha Corta, este forzará la entrada de 2 dígitos para el Año. Sin embargo, puede declarar un Formato Definido por el Usuario para permitir la entrada de fechas con años de 4 dígitos. Como sea, Access no requiere que se utilicen Máscaras de Entrada. Si no las usa, la conducta por default será que Access le
permitirá introducir fechas en formatos de 2 y 4 dígitos para el año.

Con respecto al despliegue de datos de salida, pueden utilizarse -igual-, Formatos Predefinidos o Formatos Definidos por el Usuario usando, ya sea, de la Propiedad Format o de la funcion Format(). Por omisión Access despliega fechas utilizando el Formato de Fecha General que es una combinación del Formato de Fecha Corta y del Formato de Hora Corta definidos en el applet de Configuración Regional del Panel de Control. Es posible crear un Formato Definido por el Usuario que emplee 4 dígitos para el año.

Dependencias del Producto: Para sistemas Window 95 o Windows NT 3.51 se requiere SP 5 o posterior, para Sistemas Windows NT 4.0 no se require ningún SP específico, pero se recomienda SP 2.

Visual Basic (16 Bits)

VB (de 16 Bits) incluye varias funciones y procedimientos para manipulación de fechas, que son intrínsecas del lenguaje, la mayoría de las cuales no manejan ningún tipo de consideración en particular para el año 2000, lo cual representa un riesgo muy alto de fallo en el año 2000, para aquellas aplicaciones desarrolladas bajo este entorno.

Visual Basic 5.x y 6.x

Aunque estas versiones cumplen con el Año 2000, existen ciertas recomendaciones (algunas de las cuales, obvias) que debería considerar.

Dependencias del Producto: Para sistemas Windows NT 4.0 SP4 o posterior, Windows 95 OSR2 y Windows 98, con actualizaciones de software para Año 2000.

Campo de Año con 2 dígitos:
VB utiliza una Tecnología de Ventaneo similar a la descrita más arriba para MS Access 97, cuando se introducen años de 2 dígitos.

Variables:
Recuerde que las fechas pueden ser almacenadas en variables de tipo Variant, Data o String. Recuerde también que, si no declara una variable antes de utilizarla, esta será de tipo Variant.

Cálculos de Fecha:
VB almacena fechas y realiza cálculos de fecha correctamente, tomando en cuenta las consideraciones explicadas más arriba para Campos de Año con 2 dígitos.

Introducción de Fechas:
La entrada de datos realizada por un operador humano debe considerarse crítica, ya que este puede introducir una fecha con dos dígitos en el año, aún cuando la aplicación le requiera una fecha con 4 dígitos en el año. Para este caso, el programa debería convertir la fecha introducida con 2 dígitos en el año a una fecha que tuviera 4 dígitos en el año, y mostrar la fecha obtenida al operador tan pronto como se realice la conversión. Esto podría hacerse por medio del Evento LostFocus, u otro parecido. Por ejemplo:

     Private Sub Text1_LostFocus()
          Text1.Text = Format(Text1.Text, "MM/DD/YYYY HH:MM AMPM")
     End Sub

Despliegue de Fechas:
Procure desplegar las fechas con el año a 4 dígitos. Puede hacerlo de muchas maneras; una de ellas es por medio de la función Format. Por ejemplo:
     lblCurrDateAndTime.Caption = FORMAT(NOW, "MM/DD/YYYY HH:MM AMPM")

Entrada de Fechas desde Otras Fuentes: Las fechas también pueden ser introducidas desde fuentes externas, tales como Hojas de Cálculo, Bases de Datos, Archivos de Texto, etc. En este caso, las fechas pueden venir con el año en 2 dígitos, lo cual puede causar que la aplicación procese las fechas incorrectamente, dado el mecanismo implementado por VB para procesar fechas de 2 dígitos (según se describe más arriba).

En términos generales, conviene revisar lo siguiente:

Si importa datos desde una base de datos, asegúrese de verificar si el campo desde el cual lee la fecha es un campo de fecha o una cadena de caractéres, verifique si la base de datos per se Cumple con el Año 2000 y determine si necesita convertir fechas con el año en 2 dígitos.

En el caso de importar Archivos de Texto, verifique si las fechas siempre vienen con 4 dígitos en el año, es decir, si el formato de fecha es uniforme en todas las fechas incluidas en el archivo y verifique también si necesitará convertir fechas con el año en 2 dígitos, a cuatro dígitos.

Verifique las fechas que son obtenidas de todas las fuentes externas, tales como hojas de cálculo, en donde deberá efectuar validaciones similares.

Controles personalizados:
Este es un caso particularmente complejo, ya que algunos controles pueden haber sido desarrollados por usted y otros pueden provenir de terceros. En todo caso, conviene efectuar pruebas en los Controles Personalizados para determinar la manera en que las fechas son procesadas. Específicamente lo que se busca -para determinar la Compatibilidad con el Año 2000-, es que tales controles:

a) Regresen fechas con el año en 4 dígitos.

b) En caso de aquellos controles que regresan años de 2 dígitos, verificar que tipo de tecnología incorporan para reconocer las fechas dentro de un rango (1900-1999) u otro (2000-2099).

c) Revisar si estos controles aceptan fechas con el año en 4 dígitos.

d) En caso de que lo anterior sea falso, que si reciben una fecha con el año en 2 dígitos puedan reconocerla y procesarla adecuadamente.

e) Verificar si el control procesa adecuadamente los años bisiestos. Un año bisiesto ocurre cada 4 años dentro de un mismo siglo (por ejemplo, 1988, 1992, 1996, etc.), y cada 400 años dentro de un milenio, en la frontera de siglo (por ejemplo, 1200, 1600, 2000, etc. Note que 1900 no fue año bisiesto). Si el control no procesa adecuadamente los años bisiestos podría notar una errática en el control, tal como pasar del 28-Feb al 1-Mar, o del 28-Feb al 29-Feb y entonces al 0-Mar.

f) Determinar el tipo de tecnología empleada por el control para reconocimiento de fechas con el año en 2 dígitos. Algunas tecnologías que pudieran utilizarse son: la ya tan mencionada tecnología de Ventaneo, la tecnología de Codificación en la que se utiliza algún tipo de codificación para representar internamente las fechas (por ejemplo, en COBOL podrían utilizarse campos de tipo COMP-3 para colocar los 4 dígitos del año en un espacio de 2 bytes) y la tecnología de Ampliación o Expansión, que pretende convertir una fecha con el año en dos dígitos a una fecha con el año en cuatro dígitos (como el ejemplo mostrado en "
Introducción de Fechas").

g) Determinar los rangos de fechas que son empleados para decidir si una fecha es procesable por el control (por ejemplo, Access 97 reconoce fechas desde el año 100 al año 9999, CA-Clipper 5.x reconoce fechas desde el año 100 al 2999).

h) En el caso de aquellos controles que pueden retornar el dia de la semana, verificar que el 1° de Enero del 2000 retorne "Sábado" y "Lunes", "Martes" y "Miércoles" para los dias 28 y 29 de Febrero y 1° de Marzo del año 2000. i) Para los controles que procesan fechas Julianas, verifique que el 29 de Febrero regresa 60 y el 31 de Diciembre 366.

Considere que los programas como MS Excel pueden también ser usados como controles a través de su modelo de objetos.

Protección contra fallos en el Reloj del Sistema:
El código siguiente puede ser añadido a cualquier proyecto para alertar al operador sobre una falla en el Reloj del Sistema. Se requiere que este código sea ejecutado a intervalos regulares. El código le dirá al operador cuando el Reloj del Sistema cae en algún momento en una fecha anterior a 1/1/1999.

     If Now < #1/1/1999# Then
          MsgBox "El Reloj del Sistema ha sido puesto a " & Format(Now,
"mm/dd/yyy") & _
                ". Esta Fecha/Hora incorrecta podría dañar datos del Sistema. "
& _
                "Restablezca la Fecha/Hora para corregir el problema."

     End If

Consideraciones Generales:

Recuerde que es posible incluir fechas en macros, scripts, campos que no son campos de fecha, Cut and Paste, tablas, queries, reportes e importación y exportación de datos.

Bueno amigos, espero que esta información les sea de utilidad.



Resumen Resumen

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com