¿Cómo puedo mostrar ordenadamente en un listbox, personas y días que faltan para su cumpleaños, teniendo su fecha de nacimiento?

Trabajando en Access, VBA y alguna instrucción sql

Tengo una tabla con Nombres y Fechas de nacimiento, en un formulario quiero mostrar en un listbox, de tal manera que salgan ordenados dichos nombres con sus Fechas de nacimiento, más otro campo calculado que le llamaremos "Días que faltan" hasta su próximo cumpleaños .

No se si se puede hacer con una instrucción sql y cargarlo al RowSource o bien por código VBA

Gracias acepto ideas, de como llevarlo a cabo, la verdad es que estoy perdido.

S2

1 respuesta

Respuesta
2

Tienes, al menos 3 opciones de hacerlo, todas más o menos igual de fáciles:

1º/ Crear una consulta en la que tengas los dos campos de la tabla y el calculado, y luego pones en el RowSource el nombre de la Consulta.

2º/ Poner en el RowSource directamente la SQL (puedes hacer previamente la consulta en el diseñador y copiarla)

3º/ Asignarle el RowSource por VBA, para lo que también has de conocer la SQL:

Me.NombreCuadro.RowSource=laSQL

Me. NombreCuadro. Requery

Lo más "complicado" es hacer el campo calculado, que podrías hacerlo así:

DiasRestantes: SiInm(DifFecha("d";Fecha();SerieFecha(Año(Fecha());Mes([FNac]);Día([FNac])))>0;DifFecha("d";Fecha();SerieFecha(Año(Fecha());Mes([FNac]);Día([FNac])));DifFecha("d";SerieFecha(Año(Fecha());Mes([FNac]);Día([FNac]));AgregFecha("aaaa";1;Fecha())))

Un saludo.


Como bien menciona Jacinto en su comentario, el último DifFecha está mal. Sería así:

DiasRestantes: SiInm(DifFecha("d";Fecha();SerieFecha(Año(Fecha());Mes([FNac]);Día([FNac])))>0;DifFecha("d";Fecha();SerieFecha(Año(Fecha());Mes([FNac]);Día([FNac])));DifFecha("d";Fecha();AgregFecha("aaaa";1;SerieFecha(Año(Fecha());Mes([FNac]);Día([FNac])))))

¡Gracias!

Lo he hecho con un campo calculado, que la instrucción sql parece un chorizo de largo que funciona, me puse ayer ha hacerlo y me salio a la primera... eso si estoy convencido que si lo intento hacer no me sale.

Eso si he usado la opción nº1 que me has pasado

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas