Beruflich Dokumente
Kultur Dokumente
CAPTULO 81
ndice de contenido
TRABAJEMOS CON FECHAS, FORMATOS Y CONVERSIONES DE DATOS............................3
COGER LA FECHA DEL SISTEMA (Date)..................................................................................3
APLICAR FORMATOS A LA FECHA..........................................................................................3
Formato Short Date.................................................................................................................3
Formato Long Date..................................................................................................................4
Formato personalizado ...............................................................................................................4
APLICAR FORMATOS A LA HORA (Time)................................................................................5
Obtener la hora del sistema.........................................................................................................5
Manipular la hora........................................................................................................................5
FECHA Y HORA A LA VEZ (Now)...............................................................................................6
FORMATO A CADENAS DE CARACTERES..............................................................................6
Valores a maysculas (UCase)....................................................................................................6
Propiedad InputMask..................................................................................................................6
Valores a minsculas (LCase).....................................................................................................7
La funcin StrConv.....................................................................................................................7
Inicio de palabras en maysculas (vbProperCase)......................................................................8
Eliminacin de espacios en blanco (Trim, LTrim, RTrim)..........................................................8
CONVERSIONES DE DATOS.......................................................................................................9
Funciones conversoras................................................................................................................9
Deteccin tipo de dato.................................................................................................................9
Unos cuantos ejemplos prcticos sobre funciones conversoras y tipos de datos........................9
Supuesto 1: aprendemos las funciones LEFT y RIGHT........................................................9
Supuesto 2: aprendemos la funcin MID.............................................................................10
Supuesto 3: aprendemos la funcin INSTR y la funcin LEN............................................11
Supuesto 4: aprendemos la funcin REPLACE...................................................................13
Supuesto 5: practicamos con IsNumeric()............................................................................14
SEGUIMOS MANIPULANDO FECHAS....................................................................................14
Analizar el da de una fecha: funcin Weekday().....................................................................14
Obtener los elementos de una fecha: funciones Day(), Month(), Year()...................................16
Ver el nombre del mes de una fecha: funcin MonthName()...................................................16
La funcin DatePart()................................................................................................................17
La funcin DateDiff()...............................................................................................................18
Sumar das a una fecha..............................................................................................................18
Pequeo ejercicio prctico........................................................................................................19
1
Vistame en http://siliconproject.com.ar/neckkito/
Vistame en http://siliconproject.com.ar/neckkito/
Vistame en http://siliconproject.com.ar/neckkito/
End Sub
Formato personalizado
Podemos convertir el formato de fecha de un tipo de fecha espaol a un ingls, o viceversa.
Las abreviaturas que utilizaremos para cada uno de los elementos de la fecha sern:
d
m
y
para da
para mes
para ao
Vamos a convertir nuestra fecha espaola a una fecha inglesa. No podemos asignar el
resultado al textbox directamente como dato tipo Date porque Access detecta que nuestra
configuracin es espaola y lo muestra en formato espaol. Para poder ver el efecto debemos
tratar la fecha como si fuera un String, y el cdigo que deberamos utilizar es:
Ni que decir tiene que si queremos el formato en sistema espaol la expresin sera:
vFecha = Format(vFecha, "dd/mm/yy")
Nota: es importante recordar este punto porque, en ocasiones, buscamos filtrar una fecha
en una tabla y, a pesar de que constatamos que la fecha buscada existe, nuestro filtro no nos
muestra ningn registro. En este caso deberemos probar el filtro por fecha dndole el formato
ingls, por si Access entendiera que, aunque vemos las fechas en espaol, el dato est
guardado en formato ingls (un lo, ya s, pero pasa).
Vistame en http://siliconproject.com.ar/neckkito/
Manipular la hora
Los componentes de la hora son:
hh
mm
ss
para la hora
para los minutos
para los segundos
Como otra posibilidad podramos indicar la hora en formato 12 horas. La expresin que
deberamos utilizar sera:
Format (Time, hh:mm:ss AMPM)
Es decir:
Vistame en http://siliconproject.com.ar/neckkito/
Propiedad InputMask
Tenemos un segundo sistema, que es a travs de la funcin INPUTMASK. En realidad, lo que
6
Vistame en http://siliconproject.com.ar/neckkito/
hace esta funcin es aplicar una mscara 2 al TextBox. Slo explicar el ejemplo aplicado a
conseguir la conversin de minsculas a maysculas y no en los siguientes, dado que la
mecnica es siempre la misma (slo tenemos que definir la mscara que queramos).
El cdigo que nos podra hacer eso sera, por ejemplo:
La funcin StrConv
Los dos ejemplos anteriores hubiramos podido aplicarlos a travs de la funcin StrConv. Esta
funcin consta de dos elementos:
Cadena a convertir / Tipo de conversin
Hay diversos tipos de conversin, que no se explicarn aqu (podis abrir, en VBE, buscar
StrConv en la ayuda). El tipo de conversin viene determinado por una constante de VB. De
esta manera, tendramos que:
vbUpperCase nos convertira la cadena a maysculas.
vbLowerCase nos convertra la cadena a minsculas.
La aplicacin de esta funcin, si seguimos nuestro ejemplo, sobre la variable vText sera:
vText = StrConv(vText, vbUpperCase)
o
vText = StrConv(vText, vbLowerCase)
Hay una constante interesante que explicamos en el siguiente apartado.
Os remito a la ayuda de Access sobre el tema de mscaras de entrada. Tambin podis consultar el anexo al
captulo 2 del Manual de Access, en el apartado correspondiente a mscaras de entrada.
Vistame en http://siliconproject.com.ar/neckkito/
Comentar tambin que si slo queremos quitar los espacios iniciales (los de la izquierda),
podemos utilizar la funcin LTRIM; si queremos quitar los espacios finales (los de la derecha),
podemos utilizar la funcin RTRIM.
Vistame en http://siliconproject.com.ar/neckkito/
CONVERSIONES DE DATOS
Funciones conversoras
En ocasiones tenemos un tipo de dato y necesitamos
cambiarlo de tipo. Para ello existen funciones que realizan
ese trabajo. Vamos a ver las que considero ms
interesantes:
Para
Para
Para
Para
Para
Para
Vistame en http://siliconproject.com.ar/neckkito/
a travs de un InputBox.
Cmo lo hacemos?
Vamos a ver cmo sera el cdigo:
Como vemos, si queremos extraer caracteres de una cadena de caracteres, empezando por la
izquierda utilizamos la funcin Left. Su estructura es
Left(cadena, n de caracteres a extraer)
De la misma manera, si queremos extraer caracteres empezando por la derecha utilizamos la
funcin Right, con la misma estructura:
Right(cadena, n de caracteres a extraer)
En captulos posteriores veremos cmo recorrer registros de una tabla o consulta a travs de un recordset.
Paciencia!
10
Vistame en http://siliconproject.com.ar/neckkito/
Pues para extraer esos cuatro nmeros de la cadena, para convertirlos posteriormente a tipo
nmero, podemos utilizar la funcin Mid()
La estructura de dicha funcin es:
Mid(cadena de texto, posicin inicial de extraccin, n
caracteres a extraer)
Con todo lo anterior nuestro cdigo quedara de la siguiente
manera (para simplificar el texto lo tratar como constante,
pero ya sabemos que podemos obtenerlo de diversas
fuentes):
Vistame en http://siliconproject.com.ar/neckkito/
Es decir, que, por ejemplo, un artculo tiene este cdigo: 3410ZNDE5A6J, y podemos tener
otro artculo con el siguiente cdigo 874532SNSP3R6H8K.
Entonces se acerca nuestro jefe con una sonrisa en la boca y nos dice: tendramos que
actualizar la informacin en la base de datos. Los 5.000 artculos y poco que tenemos con
referencia interna SP han cambiado, y ahora su referencia debera ser ST. Los cambiars para
maana? Por cierto, no podemos pagarte las horas extras...
Primer problema: no podemos utilizar la funcin Left() porque el cdigo del artculo es
variable: de 4 a 6 caracteres.
Segundo problema: no podemos utilizar la funcin Right() porque el cdigo de ubicacin es
variable: de 4 a 6 caracteres
Tercer problema: si no podemos utilizar Left() ni Right(), cmo utilizamos Mid()?
Un sudor fro recorre nuestro cuerpo... Ser verdad que tendremos que quedarnos toda la
noche cambiando cdigos... o no?
Vamos a hacer el razonamiento en trminos humanos, para despus aplicarlo a cdigo, a ver
cmo podemos solventar nuestro problema.
.- Sabemos que el nmero de caracteres mnimo de cdigo de artculo es 4. Luego la posicin 5
ser nuestro inicio de bsqueda (el primer argumento de InsStr())
.- Sabemos que la cadena que debemos buscar es SP
.- Sabemos que InStr() nos dar la posicin donde se encuentra la cadena
.- Con Len() sabemos la longitud total del cdigo entero del artculo
.- Con todo lo anterior sabemos:
.- a) Cuntos caracteres hay antes de SP
.- b) Cuntos caracteres hay despus de SP
Es decir, que si el cdigo del artculo es 3410ZNSP5A6J tenemos que:
.- InStr() nos dir que la posicin es la 7 Luego hay 6 caracteres antes de SP
.- Len() nos dir que la longitud de la cadena es 12.
.- Si la posicin anterior a SP es la 6, y sabemos que SP son 2 caracteres, eso nos sita en la
posicin 8. Entonces 12 8 = 4 Hay 4 caracteres de ubicacin de almacn.
Ya tenemos pues los elementos necesarios para destruir nuestro cdigo y volverlo a construir.
12
Vistame en http://siliconproject.com.ar/neckkito/
Veris que, al inicio del cdigo, os he dejado una constante como comentario, por si queris
probar el cdigo con un segundo artculo con diferentes dgitos. Para probarlo slo tenis que
convertir en comentario la primera constante codAntiguo y eliminar el comentario de la
segunda (codAntiguo).
Por suerte para nosotros, el cdigo de proveedor no coincide nunca con el cdigo interno!!!
El cdigo VB anterior puede parecer complicado, y lo he puesto, primero, para poder
entender el funcionamiento de la funcin InStr(), y, segundo, para ver que con la combinacin
de las funciones Len(), Left(), Right() -y, si lo necesitamos, Mid() e InStr()- se pueden
conseguir muchsimas cosas sobre una cadena de texto. En tercer lugar lo he puesto tambin
para exprimir un poco esas preciosas neuronas que nos caracterizan... je, je...
Podramos haber utilizado otra funcin para conseguir el mismo efecto, y que vemos en el
supuesto siguiente:
Vistame en http://siliconproject.com.ar/neckkito/
Private Sub cmdReplace_Click()
Const codAntiguo As String = "3410ZNSP5A6J"
Me.txtResultado.Value = Replace(codAntiguo, "SP", "ST")
End Sub
Je, je...
14
Vistame en http://siliconproject.com.ar/neckkito/
Simplemente haceros notar que para controlar la introduccin del valor por parte del usuario, y
que realmente introduzca una fecha, hemos aadido la lnea:
If Not IsDate(vFecha) Then Exit Sub
Otra manera de aplicar la funcin anterior, por ejemplo, sera para realizar una accin en
funcin del da que se seleccione. Por ejemplo, supongamos que nos proponen un da para ir a
realizar un trabajo. Lo introducimos en nuestra BD para podernos planificar y... vaya! El
cdigo sera el siguiente:
Vistame en http://siliconproject.com.ar/neckkito/
Day()
Month()
Year()
Extrae el nmero de da
Extrae el nmero de mes
Extrae el nmero de ao
Lo anterior nos permite una manipulacin prcticamente completa sobre la fecha introducida.
Vamos a ver un cdigo que nos desglosa una fecha y nos indica qu es cada elemento.
Vistame en http://siliconproject.com.ar/neckkito/
La funcin DatePart()
Para complementar las anteriores explicaciones echaremos un vistazo a la funcin de este
epgrafe y a la del siguiente. As tendremos, creo yo, una visin bastante amplia de todo lo que
se intentaba explicar en este captulo.
La funcin DatePart() nos permite obtener una serie de informaciones sobre elementos
relacionados con la fecha. Para ser ms claros, por ejemplo, nos indica el nmero de trimestre,
el nmero de semana del ao, adems de permitirnos obtener, con otro sistema, datos que
acabamos de explicar en apartados anteriores.
La estructura de esta funcin es:
DatePart(elemento a obtener, fecha, primer da de la semana, primera semana del ao).
Los dos ltimos argumentos son opcionales, y os remito a la ayuda de VB para ver su utilidad.
El primer argumento, <elemento a obtener>, lo deberemos definir a travs de un valor. Esos
valores son los siguientes:
yyyy
q
m
y
d
w
ww
h
n
s
Para
Para
Para
Para
Para
Para
Para
Para
Para
Para
obtener
obtener
obtener
obtener
obtener
obtener
obtener
obtener
obtener
obtener
el ao
el trimestre
el mes
el da del ao
el da
el da de la semana
el nmero de semana del ao
la hora
los minutos
los segundos.
Como podemos ver, la utilizacin de esta funcin es muy sencilla. No olvidemos que la
podemos utilizar tambin, por ejemplo, para filtrar datos, cuando utilicemos un recordset.
17
Vistame en http://siliconproject.com.ar/neckkito/
La funcin DateDiff()
Si queremos calcular un periodo que hay entre dos fechas tenemos la funcin DateDiff(). Su
estructura es:
DateDiff(elemento a obtener, fechaInferior, fechaSuperior,
primer da de la semana, primera semana del ao).
Los dos ltimos argumentos son opcionales, y os remito a
la ayuda de VB para ver su utilidad.
El primer argumento, <elemento a obtener>, corresponde al
mismo conjunto de elementos que explicbamos en el epgrafe
anterior, y a l os remito.
Por ejemplo, si queremos calcular el nmero de semanas que hay entre una fecha introducida
por el usuario y la fecha actual utilizaramos el siguiente cdigo:
18
Vistame en http://siliconproject.com.ar/neckkito/
Debemos comprobar que el usuario introduzca un valor que sea una fecha
Debemos comprobar que el mes introducido corresponda a julio
Debemos saltarnos todos los das de agosto. Esto es un bucle, y os recuerdo que en
un captulo anterior vimos estructuras de bucle.
Debemos acordarnos de convertir los valores de las diferentes variables para evitar
errores de cdigo.
En el formulario FEjercicios encontraris dos botones con cdigos con la solucin. Ambos
cdigos son muy similares, pero la mecnica del bucle es distinta.
Suerte!
19
Vistame en http://siliconproject.com.ar/neckkito/
20
Vistame en http://siliconproject.com.ar/neckkito/
21
Vistame en http://siliconproject.com.ar/neckkito/
vDia = 5
vMes = 2
vAno = vAno + 1
End If
End Select
Fcil, no? ;)
PARA ACABAR...
Creo que, tras el estudio de este captulo, ya podremos decir que somos unos profesionales
en el manejo de fechas y de cadenas de caracteres... je, je...
Como siempre, espero que alguna cosa de las aqu explicadas os pueda ser til para vuestras
aplicaciones (ntese que ya no hablo de BD's... ;)
Suerte!
22
Vistame en http://siliconproject.com.ar/neckkito/