PDA

Ver la Versión Completa : consulta con fecha de nacimiento


ebeltete
10-09-2003, 20:32:54
Hola amigos del foro, trabajo con DELPHI 5 y tablas PARADOX, tengo dos tablas una padres.db y otra hijos.db, estan relacionadas con el campo hijos_cod, donde un renglon de la tabla padres hace referencia a uno o más renglones de la tabla hijos; ademas la tabla padres.db tiene dos campos tipo date uno para la fecha de nacimiento del padre y otro para el de la madre, en tanto la tabla hijos.db tiene un campo tipo date para la fecha de nacimiento del hijo.
Mi pregunta es como puedo hacer una consulta para que me devuelva todos los padres, madres e hijos que cumplan año en el día de hoy???
probe con EXTRACT pero solo con una tabla no he podido con las dos, tal vez con UNION, agradezco una ayuda, saludos.

javiermorales
10-09-2003, 21:30:48
Hola, has comentado que tienes unidas las tablas padre e hijo con un código, pero ¿tienes un registro diferente en la tabla padres, para la madre y para el padre o existe un solo registro?.

marcoszorrilla
10-09-2003, 22:13:31
Bueno primera parte, a mi entender como lograr extraer de la tabla que sea las fechas que coinciden con la del día en que estamos, tratandose de Paradox, no nos permite incluir Date dentro del Sql, quedaría así la seleccion:


procedure TForm1.Button1Click(Sender: TObject);
Var
nDia:Word;
nMes:Word;
nAgnus:Word;
begin
DecodeDate(Date,nAgnus,nMes,nDia);
Query1.Close;
Query1.Sql.Clear;
Query1.Sql.Add('Select fecha, busqueda from Factura');
Query1.Sql.Add('Where Extract(Month From Fecha)= '+IntToStr(nMes));
Query1.Sql.Add('And Extract(Day From Fecha) = '+IntToStr(nDia));
Query1.Open;
end;


Yo a modo de ejemplo he seleccionado 2 campos de una tabla que tenía a mano, habrá que reconvertir el SQL a tu conveniencia.

Bueno pues con esta idea, que no desarrollo, puedes obtener lo que quieres.

1º.- Create Table xxxxxx tendra los campos que se necesiten.

2º.- Ejecutar el SQL anterior, pero con la clausula INSERT sobre la tabla recien creada.(Tabla Padres),

3º.- Lo mismo con la tabla Hijos.

4º.- Mostramos los resultados conectando una rejilla a la tabla creada que por ejemplo se podría llamar aniversarios.


El resto lo dejo para que lo desarrolles tu mismo.

Un Saludo.

guillotmarc
11-09-2003, 00:21:18
Hola.

No me parece necesario crear una tabla temporal para recoger el resultado, puede hacer 3 consultas : una para seleccionar los padres que tienen cumpleaños en la fecha, otra para las madres, y una tercera para los hijos. Finalmente para que estén todos los datos en un DataSet, se pueden unir las 3 consultas en un TQuery mediante el UNION.

No he trabajado con Paradox, pero la sintaxis debe ser algo parecido a :


SELECT NombrePadre As Nombre, NacimientoPadre As Nacimiento
FROM Padres
WHERE Extract(Month from NacimientoPadre) = :MES and
Extract(Day from NacimientoPadre) = :DIA
UNION
SELECT NombreMadre, NacimientoMadre
FROM Padres
WHERE Extract(Month from NacimientoMadre) = :MES and
Extract(Day from NacimientoMadre) = :DIA
UNION
SELECT Nombre, Nacimiento
FROM Hijos
WHERE Extract(Month from Nacimiento) = :MES and
Extract(Day from Nacimiento) = :DIA


NOTA : He supuesto que en la tabla Padres, están los dos progenitores en un mismo registro. En caso contrario aún es más senzillo, puesto que sería simplemente un UNION de dos consultas (una para cada tabla).

Saludos

marcoszorrilla
11-09-2003, 15:21:35
Tienes toda la razón Marc, la verdad es que dada la hora solamente pensaba poner el código para seleccionar quienes cumplen años y no entrar en detalles. Y luego por efectos de la hora me enrede en la explicación.

Por lo tanto mantengo el código, pero no la continuación, es mucho más simple como dice Marc Guillot, es decir uniendo las sucesivas consultas mediante la clausula SQL UNION, que por otra parte es como debe de hacerse.

Un Saludo.