Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Maximum validity check failed (https://www.clubdelphi.com/foros/showthread.php?t=40044)

gesDelf 06-02-2007 10:22:04

Maximum validity check failed
 
Buenos días a tod@s,

Al trabajar con Delphi tengo el siguiente problema, a ver si me pueden ayudar.

Tengo una tabla de la base de datos asociada a un dbGrid que me sirve para insertar datos en la tabla.

Cuando quiero meter una fecha muy elevada por ejemplo "31/12/5999" (se usa para marcar que no hay fecha final, como si fuese un infinito), me sale este error "Maximum validity check failed".

Hay datos metidos en la base de datos con esa fecha, así que descarto que sea cosa de la tabla de la base de datos o algo así.

Si alguien me puede decir a qué se debe y me puede decir como habría que solucionarlo, lo agradecería.

Saludos a todos.

Lepe 06-02-2007 16:33:17

Un TDate en delphi es un double, cuyo valor máximo es 1.7e+308 según la unidad Math.pas donde está definida la constante MaxDouble.

Creo sería más conveniente añadir un campo Booleano "Tiene vencimiento" si/no, y entonces usar esa fecha.

Usar "un valor de un rango" para un propósito específico no es buena idea, ya que obliga a tener ese valor especial en cuenta dentro del rango y las consultas, listados, etc, pueden ensuciarse mucho.

También está el conocido problema de usar 2 o 4 dígitos para el año, cosa que nos podría hacer fallar algunas rutinas a la hora de convertir las fechas.

Saludos

gesDelf 06-02-2007 16:58:32

Gracias por la idea.

El problema es que tenemos que intentar, en la medida de lo posible, ajustarnos a cómo está montada esta base de datos y sus criterios, pues es algo que ya venía hecho, hay muchisimos datos ya metidos ahí, siguiendo ciertos criterios, y los usuarios que van a usarlo les va ir mejor no cambiar las cosas, y poderlo meter aquí igual que lo van a ver en otros formularios (que no necesariamente son Delphi).

Campos que tienen este valor metido en la base de datos se muestran perfectamente en la tabla, el "único" problema es al meter o modificar una fila, ya que al meterlo solo con saltar a la siguiente columna me salta este error.

Si alguien tiene alguna idea de como evitar este error. Me gustaría saber si podría hacer 1 columna en el grid que no esté en la tabla y que no sea un calculado. La podría usar para que el usuario metiera ese dato como un string, yo trataría esa cadena para comprobar la fecha, y luego, una vez introducido, realizar un update con ese string, y cambiar el valor de ese campo, sin utilizar directamente esa tabla. (no sé si he explicado muy bien mi idea).

A ver si alguien me puede ayudar y decirme si puedo hacerlo así como planteo y cómo lo he de hacer.

Muchas gracias.

gesDelf 07-02-2007 16:02:36

Doy una idea, que es lo que he acabado utilizando yo, y así ya si alguien tiene un problema o así que mire de acatar el problema por ese camino.

El caso es que yo he tirado por una solucion atacando el problema por el PL (en este caso se puede hacer así, otros casos será más dificil). Como necesito que la fecha sea esa (31/12/5999) para indicar el infinito, para no perder la compatibilidad con otras aplicaciones que atacan la base de datos, que ya sigue ese criterio, he implementado un trigger del tipo Before Insert en la tabla, que si se pasa un null fije el valor al 31/12/5999, eso sí, hay que indicar esta forma de actuación al usuario de forma clara.

Gracias por la ayuda ofrecida!! :)


La franja horaria es GMT +2. Ahora son las 04:09:26.

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