• Viernes 8 de Noviembre de 2024, 15:47

Autor Tema:  Calendario para Reservar Fechas  (Leído 1896 veces)

judamo

  • Miembro activo
  • **
  • Mensajes: 74
  • Nacionalidad: co
    • Ver Perfil
Calendario para Reservar Fechas
« en: Domingo 14 de Septiembre de 2008, 16:33 »
0
Un cordial saludos para los foreros.

Abro este foro por que tengo un problema con respecto al manejo de las fechas en VB6.

pasa lo siguiente!.

el proyecto consiste en reservar una fecha cualquiera (fecha inicio y fecha salida), todo esto se guarda con una llave primaria con un indice, en un tabla. He tenido problemas es cuando voy a crear otro Registro, la idea que es no puedo reservar sobre una FECHA QUE YA ESTA RESERVADA.

lo anterior es mi problema!, he estado haciendo algunas cosas como.

* una es recorrer todas las fechas de la tabla y mirar si alguna se repite, Pero me imagino que esta mal hecho, Ademas, si la base de datos tiene muchos registros  no es muy bueno, en optimizacion. (DESCARTADA)

Espero me pueda Colaborar!!!

la verdad he estado mirando por internet!! algunos tipos de agenda!, el manejo de Calendarios. Cosas relacionadas, pero no he encontrado mucho..

Espero me puedan Colaborar, Y si no les queda claro lo que necesito, me lo hagan saber, Gracias,
[size=85]Ingenieria de Software VII, EAM.[/size]

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Calendario para Reservar Fechas
« Respuesta #1 en: Lunes 15 de Septiembre de 2008, 04:24 »
0
La idea es que si tienes 100.000 registros sería en efecto excesivamente lento compararlo con todos los registros.

Por eso hay que hacerlo a la inversa...
Creas unas tablas llamadas 'enero' febrero.. diciembre ...
cada mes cuenta con 2 (ó 4 y más campos según sea el caso)
los campos son Dia numérico y libre buleano
rellenas la tabla inicialmente con todos los registros propios del año o de la temporada...
 registro paa cada tabla: en la tabla enero
dia 1 ... 31, al crearse se crean con el campo libre=true
para febrero: dia =1... 28  ídem

Ahora cuando vayas a hacer una reserva sólo tienes que hacer en mitabla=elmes el  'where' para usar la tabla del mes que se quiere hacer la reserva y en ese día   elregistro=eldia and libre=true y si libre es true, acepta la entrada del registro y cambias el registro a false.

El tercer campo que te indicaba es para casos en los que se acepte un número máximo de reservas, por ejemplo si son camas de un albergue de montaña y tiene pongamos 7 camas, necesitarías un tercer campo que señalara camasExistentes y un 4º camas ocupadas, en ese caso podrías eliminar el campo 'libre' si cambiaras la sentencia  por 'and camasOcupadas<camasExistentes'...

Resumiendo aunque tengas 100.000 registros sólo precisas mirar uno el del mes y día pedido... cuando esté libre se marca ocupado y cuando esté ocupado se deniega otra reserva para dicha fecha. Si el número de reservas posibles es mayor que uno, entonces haces el cambio que te anoté antes, y queda que mientras en ese mes y día las ocupadas sean menor que las existencias se acepta la reserva y se suma 1 a ocupadas al registro de ese día y si la ocupadas=existencias se deniega la reserva...

Un año solo tiene 365 días, o bien 12 meses con sus alrededor de 30 días, por tanto por muy mal que diseñaras tu sentencia nunca tendrías que buscar entre más de 365 registros indistintamente de que haya 1 millón de registros en la BD, pero de hecho sólo necesitas compararlo con un registro combinando campos....

Las fechas tienes que mirarlas como los 'productos', el género los clientes se introducen en su tabla correspondiente pero si un cliente compra 10 sacos de patatas, hay que actualizar el alamacen de acuerdo a las existencias, así en el caso de fechas, la fecha se 'agota' y debe marcarse...
Además debes fijarte que si hago una reserva nunca pueda hacer una reserva para ayer, ni para un día ya pasado, por tanto si el año marcado es el actual el mes no puede ser anterior al presente y si el mes seleccionado es el actual el día no puede ser menor que al actual ...
«Ma non troppo»
----> ModoVacaciones = False<----

judamo

  • Miembro activo
  • **
  • Mensajes: 74
  • Nacionalidad: co
    • Ver Perfil
Re: Calendario para Reservar Fechas
« Respuesta #2 en: Lunes 15 de Septiembre de 2008, 06:07 »
0
Gracias nebire, por tomarte tu tiempo.

Primero ne gustaría saber si ya haz implementado esto?

Nebire, si estoy de acuerdo de que recorrer el numero de registros en una tabla no es lo mas optimizable, pero como no he tenido opciones es lo primero que me imagino, lo que usted me dice es crear una tabla por cada mes con dos o mas registros segun sea el contexto.

ejemplo, Enero                             Febrero
              * indice:                          *indice                   ..............
                 ocupado:boolean           ocupado:boolean

esto es lo que entiendo? si es asi?

solo dos preguntas: cuando diferencio el year?
2. ejemplo. cuando reserva va de 15 enero a 20 de enero, se supones que todas esas fechas tendria ocupado false?

Gracias, espero tener todo claro..


___________________________________________________________________________________________________________

aparte de esto, pues estuve indagando por el cyberespacio que esperencia tenes con los numero juliano, pues la verdad es un metodo que encontre mas facil en el sentido de una consulta SQL, ademas de q, es mas facil comparar cadenas que fechas!!!

creo yo

fecha              ||||               numero juliano

01/ene/2008                          2008001

me gustaria saber si alguien conoce mas a fondo este metodo
[size=85]Ingenieria de Software VII, EAM.[/size]