Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con un Query para comparar (https://www.clubdelphi.com/foros/showthread.php?t=94121)

donpedro 13-08-2019 17:45:38

Ayuda con un Query para comparar
 
Hello, bendiciones para todos.

Estoy realizando un sistema en Delphi 2009 y Sql Server 2012.

Tengo un modulo donde registro horas por ejemplo:

08:00 am - 08:30 am
08:30 am - 09:00 am

Etc...

Y tengo un modulo para registrar CITAS donde tengo un DBLookUpCombobox que esta conectado al ListSource del DataSet del modulo Horas.

Lo que deseo realizar es que el DBLookUpCombobox solo me presente las horas que no han sido selecionadas en una fecha determinada.

Me explico:

Si se registra una CITA el 15/8/2019 a las 08:00 am - 08:30 am cuando tenga que registrar otra cita en la misma fecha que en el DBLookUpCombobox solo me aparezcan las Horas disponibles y que la hora 08:00 am - 08:30 am no aparezca.

Espero haberme explicado. Gracias anticipadas.

TiammatMX 13-08-2019 20:05:37

Cita:

Empezado por donpedro (Mensaje 533151)
...Lo que deseo realizar es que el DBLookUpCombobox solo me presente las horas que no han sido selecionadas en una fecha determinada.

Me explico:

Si se registra una CITA el 15/8/2019 a las 08:00 am - 08:30 am cuando tenga que registrar otra cita en la misma fecha que en el DBLookUpCombobox solo me aparezcan las Horas disponibles y que la hora 08:00 am - 08:30 am no aparezca...

Sugerencia: ¿por qué no separas horas y días? Es un poco menos complicado trabajar con dos campos que permitan hacer un NOT IN como índice y de ahí tomar los datos como los que requieres (DbLookupComboBox o en un LookupCombo simple) y evitas la complicación de pensar y centrar tus consultas. A veces, atomizar los datos es mejor que tener monolitos inmanejables...

mamcx 13-08-2019 20:34:41

La tarea es sencilla si la piensas.

Tienes una tabla de rangos de horas y una de citas programadas:

Código SQL [-]
--CITAS
08:00 am - 08:30 am  15/8/2019 
09:00 am - 9:30 am   16/8/2019

Solo tienes que hacer un WHERE del nuevo rango y la fecha. Si existe entonces ya esta agarrada. Para hacerlo como un conjunto solo creas una tabla dinamica en memoria (no he chequeado el sql pero es maso):

Código SQL [-]
SELECT current_date as fecha CROSS JOIN TablaRangos R WHERE (current_date, R.rango) NOT IN (SELECT (date, R.rango) FROM citas)

fjcg02 13-08-2019 20:54:38

Creo que es más sencillo.

Si tienes una tabla de CITAS y otra de HORARIOS, haces un left join y te quedas xon los que tengan la tabla de citas a nulos.

Código SQL [-]
SELECT * FROM HORARIOS
LEFT JOIN CITAS ON ( campo clave = campo clave)
WHERE CITAS.CAMPOX IS NULL

Creo que se entiende el código.

Saludos

donpedro 13-08-2019 21:05:33

Cita:

Empezado por TiammatMX (Mensaje 533153)
Sugerencia: ¿por qué no separas horas y días? Es un poco menos complicado trabajar con dos campos que permitan hacer un NOT IN como índice y de ahí tomar los datos como los que requieres (DbLookupComboBox o en un LookupCombo simple) y evitas la complicación de pensar y centrar tus consultas. A veces, atomizar los datos es mejor que tener monolitos inmanejables...

Las horas y los dias estan separados

mamcx 13-08-2019 21:53:53

Cita:

Empezado por fjcg02 (Mensaje 533155)
Creo que es más sencillo.

Si tienes una tabla de CITAS y otra de HORARIOS, haces un left join y te quedas xon los que tengan la tabla de citas a nulos.

Con join tambien se puede pero le falta tomar en cuenta las fechas..


La franja horaria es GMT +2. Ahora son las 10:37:38.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi