Archivo

Archivo para Noviembre 2008

Guardar contraseñas de forma segura en la base de datos

En el siguiente ejemplo se utiliza un módulo con el que se puede obtener el hash de salida de una cadena que se le pasa como argumento a la función, mediante la codificación con el algoritmo MD5. Esta función puede resultar muy útil para guardar en una tabla de la base de datos la contraseña de acceso codificada. Hay que advertir que no es posible volver a obtener la cadena -contraseña- que se ha codificado, pero siempre que se la pase la misma contraseña devolverá la misma cadena: una propiedad fundamental del hashing es que si dos resultados de una misma función son diferentes, entonces las dos entradas que generaron dichos resultados también lo son. De esta forma se consigue que sólo el usuario sepa su contraseña.

Descargar: Access 2000

Leer más…

Plazo de días hábiles (II)

Como respuesta a uno de los comentarios del post Plazo de días hábiles, realizado por Fatiga, y aprovechando un ejemplo del post Cálculo de días útiles he realizado el siguiente ejemplo que espero solvente las dudas:

Descargar: Access 2000

Siguiendo las sugerencias de Fatiga, he creado un nuevo ejemplo en el que se obtiene la primera fecha hábil de la contenida en un registro de la base de datos.

Descargar. Access 2000

Añado una mejora al ejemplo anterior, realizando lo mismo pero en lugar de hacerlo en un informe ahora se muestra el primer día hábil en un formulario continuo.

Descargar. Access 2000

Buscar sin tildes

Este ejemplo muestra una función en la que se sustituye la vocal que contiene tilde por la misma vocal sin tilde, para facilitar de esta forma la búsqueda de términos en cadenas sin la preocupación de si las encontrará o no por llevar tilde. Una aplicación práctica de este código la podéis ver en mi post ‘Búsqueda activa en subformulario, sin tildes‘.

Function Buscaacent(X)
Dim i As Variant, A As Integer, l As Integer, busc As Variant
Dim letra As Variant, vocal As Variant, nuevaletra As Variant
Static letras(5) As Variant
l = Len(X)
busc = X
A = 1
letras(1) = "AÁÀÂÄ"
letras(2) = "EÉÈÊË"
letras(3) = "IÍÌÎÏ"
letras(4) = "OÓÒÔÖ0"
letras(5) = "UÚÙÛÜ"
While A < = l
letra = Mid(busc, A, 1)
For Each i In letras
vocal = InStr(1, i, letra, 1)
If vocal > 0 Then
nuevaletra = "[" & i & "]"
busc = Left(busc, A - 1) & nuevaletra & Right(busc, l - A)
A = A + 1 + Len(i)
l = l + 1 + Len(i)
Exit For
End If
Next
A = A + 1
Wend
If busc = "" Then
Buscaacent = X
Else
Buscaacent = busc
End If
End Function
Categorías:Microsoft Access Etiquetas:, ,

Devolver N registros (paginar)

Para que una consulta devuelva una cantidad concreta de registros, utilizamos la cláusula top :

Select Top 10 * From Pedidos;

O bien, si en vez de una cantidad, queremos un porcentaje :

Select Top 10 Percent * From Pedidos;

Pero puede presentarse la siguiente necesidad : Obtener n registros por grupo (ver). En este ejemplo, evidentemente no nos sirve utilizar ‘Top’. Una solución podría ser emplear una subconsulta que evaluara el número de registros devueltos para cada grupo. Y poner como condición que dicho número sea igual a n (ejemplo preparado para ejecutar desde el Editor Sql 1.2:

Parameters n Long;
Create Table Tareas (id Long Primary Key, titulo Text (255), ambito Text (255), prioridad Bit);
Create Table Avance_Tareas (id Long, fecha_avance DateTime, descripcion Text (255));
Insert Into Tareas Values (1, 'Primera', Null, Null);
Insert Into Tareas Values (2, 'Segunda', Null, Null);
Insert Into Avance_Tareas Values (1, #09/30/2008#, Null);
Insert Into Avance_Tareas Values (1, #10/01/2008#, Null);
Insert Into Avance_Tareas Values (1, #10/02/2008#, Null);
Insert Into Avance_Tareas Values (1, #10/06/2008#, Null);
Insert Into Avance_Tareas Values (2, #09/30/2007#, Null);
Insert Into Avance_Tareas Values (2, #10/10/2007#, Null);
Insert Into Avance_Tareas Values (2, #10/11/2007#, Null);
Insert Into Avance_Tareas Values (2, #10/10/2008#, Null);
Select tareas.titulo, tareas.ambito, tareas.prioridad, avance_tareas.fecha_avance, avance_tareas.descripcion From tareas Inner Join Avance_Tareas On tareas.id = Avance_Tareas.id
Where (Select Count(*) From avance_tareas As T Where T.id = tareas.Id And T.fecha_avance >= Avance_Tareas.fecha_avance) < = n;
Drop Table Tareas;
Drop Table Avance_Tareas;
Fuente: Ejemplos de lenguaje sql para Access

Categorías:Microsoft Access Etiquetas:, , , ,

Desde dónde me visitan

Categorías:General Etiquetas:

Ajustar el ancho de columnas

El siguiente ejemplo, posteado en el Foro de Access y VBasic por Emilio Sancha, muestra como ajustar el ancho de de las columnas de un subformulario que muestra los datos como una ‘hoja de datos’.

With Me.subClientes.Form
On Error Resume Next
For Each Columna In .Controls
Columna.FontName = "Verdana"
Columna.ColumnWidth = -2
intAncho = intAncho + Columna.ColumnWidth
Next
End With
Fuente: Emilio Sancha
Categorías:Microsoft Access Etiquetas:, , , , ,

Cáceres2016

Categorías:General Etiquetas:, , , , ,

Saber si una base de datos está abierta

La siguiente función devuleve ‘true‘ si la base de datos que se le pasa (strBase) está abierta, y ‘false‘ si no es así. El argumento strBase es el camino completo de la base de datos que se quiere comprobar.

Function BaseOpen(strBase As String) As Boolean
On Error Resume Next
Dim objAccess As Object
Set objAccess = GetObject(strBase)
If Err.Number <> 0 Then BaseOpen = False
If Err.Number = 0 Then BaseOpen = True
Set objAccess = Nothing
End Function
Fuente: access.jessy.free.fr
Categorías:Microsoft Access Etiquetas:, , , ,