Incorporar meses y año en mi base de datos

Lo que necesito saber es como incorporar el tiempo en mi base de datos. Es decir enero 2015, febrero 2015 y así sucesivamente para adelante y atrás. Esto es porque mes a mes liquido horas extras para los trabajadores de la oficina en la cual trabajo y todos los meses sobreescribo la cantidad de horas extras realizads por los agentes. Tengo una tabla principal con todos los datos de los agentes como valor hora / cantidad de horas / nombre apellido y id pero todos los meses sobreescribo la cantidad de horas realizadas porque no se incorporar el factor transcurso del tiempo y así guardar registro de los meses que pasan.

1 respuesta

Respuesta
1

Puedes agregar dos campos numéricos a tu tabla, uno indicaría el mes ej (1) y el otro indicaría el año 2015 para cada registro de empleado, si no usas formularios y solo completas esa tabla, eso seria lo más sencillo . luego podrías filtrar la tabla por mes y por año para saber los registros que tienes . Un consejo si solo usas tablas de access lo mejor seria usar excel, es mucho mejor para estas tareas .

En principio gracias por contestar tan rápido. Te cuento que si utilizo formulario, el cual esta basado en la tabla principal, la cual tiene los datos personales de los agentes, que siempre son fijos, pero la cantidad de horas realizadas y el valor de la hora no son siempre iguales, si tu me dices donde te envío la base para que la mires y luego me comentas. Te agradezco

Ok, mándamela a [email protected]

Ahora entiendo perfectamente a lo que te referís, que en la tabla aparezca tal cual los días como en el calendario. Ésto resulta bastante complejo pero no imposible, ya que habría que crear las tablas de cada mes del año en cuestión por separado para que los días coincidan, es decir los campos de la tabla . ( no creo que sea lo más recomendable )

La manera facil: en cuanto a saber que día de la semana es para una fecha especificada existe una función Weekday(mifecha, vbMonday) para hoy que es martes daría un numero 2, ayer seria 1, primer día de la semana (lunes) en base a eso te dejo una función que te daría la letra de cada día que vos pones en las etiquetas, solo que ahora tienes que reemplazarlas por cuadros de texto para usar esta función:que te conviene poner en un modulo para llamarla desde cualquier parte de la aplicación

Public Function diaSemana(fecha As Date) As String
Select Case Weekday(fecha, vbMonday)
Case 1: diaSemana = "L"
Case 2: diaSemana = "M"
Case 3: diaSemana = "Mi"
Case 4: diaSemana = "J"
Case 5: diaSemana = "V"
Case 6: diaSemana = "S"
Case 7: diaSemana = "D"
End Select
End Function

Como te dije anteriormente la tabla debe estar dividida como en el ejemplo que te envíe, o sea personal ( sus datos ) y tabla horas donde hay un campo mes y año,

Relacionadas por el id de personal, los días van a ser del 1 al 31 para todos los meses pero tenemos otra función que nos puede indicar cual es el primer y el ultimo día de una fecha especifica aquí esta

Public Function PrimerUltimoDia(fecha As Date, PrioUlt As Integer) As Integer
' primer dia del mes usamos 1 para prioult , para ultimo dia del mes usamos 2
Select Case PrioUlt
Case 1: PrimerUltimoDia = Day(DateSerial(Year(fecha), Month(fecha) + 0, 1))
Case 2: PrimerUltimoDia = Day(DateSerial(Year(fecha), Month(fecha) + 1, 0))
End Select
End Function

En base a esta función podes saber si por el día 31 es del mes o no, entonces ocultar el campo en un formulario para no rellenarlo, con la propiedad visible a false, lo mismo para informes . Para rellenar los valores de los campos de la tabla horas usa un subformulario y usa la función para saber si el día existe o no para ese mes y ocultar el cuadro de texto de ese día .

La forma difícil : crear una tabla como la del ejemplo de horas por persona que te envíe pero crearla con código para solamente crear los días justos de ese mes de ese año esto es solo un ejemplo de como crear la tabla con código

Private Function Crear_Tabla_Dao(ByVal TableName As String) As Boolean 'DatabaseName As String
On Error GoTo errSub
' -- Variables para la base de datos, la tabla y el campo de tipo DAO
Dim db As DAO.Database
Dim Tabla As DAO.TableDef
Dim Campo As DAO.Field
' -- Abrir la base de datos
Set db = CurrentDb ' Workspaces(0).OpenDatabase(DatabaseName)
' -- Antes de crear la Tabla Comprobar que no exista
' -- Crear un objeto Tabla para poder hacer referencia al mismo _
' -- y agregarla a la base y también añadir 2 campos
Set Tabla = db.CreateTableDef(TableName)
' -- Crear un campo de tipo Long autonumérico llamado ID EMPLEADO
Set Campo = Tabla.CreateField("ID EMPLEADO", dbLong)
' -- Atributo de autonumérico
Campo.Attributes = DB_LONG
' -- Agregar el campo con el método Append
Tabla.Fields.Append Campo
' -- Crear un campo de tipo Long autonumérico llamado ID EMPLEADO
Set Campo = Tabla.CreateField("Nombre EMPLEADO", dbText)
' -- Agrega el campo con el método Append
Tabla.Fields.Append Campo
' -- Agregar la Tabla con el método Append
db.TableDefs.Append Tabla
' -- Cerrar la base de datos
db.Close
' -- Retornar si no hubo error
Crear_Tabla_Dao = True
Exit Function
' -- Rutina de Error
errSub:
If Not db Is Nothing Then db.Close
Set Tabla = Nothing
Set Campo = Nothing
If Err.Number Then
MsgBox Err.Description, vbInformation, " Error al crear la tabla "
End If
End Function

Dentro de esta función deberías usar un bucle for para poder generar los campos de los días del mes en conjunto con la función anterior que te da desde que día hasta que día final del mes debes crear los campos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas