Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-02-2007
gesDelf gesDelf is offline
Miembro
 
Registrado: sep 2006
Posts: 18
Poder: 0
gesDelf Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 06-02-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 06-02-2007
gesDelf gesDelf is offline
Miembro
 
Registrado: sep 2006
Posts: 18
Poder: 0
gesDelf Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 07-02-2007
gesDelf gesDelf is offline
Miembro
 
Registrado: sep 2006
Posts: 18
Poder: 0
gesDelf Va por buen camino
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!!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Maximum user count exceeded !!!! erickperez6 Firebird e Interbase 2 07-04-2008 17:31:09
Failed to stablish a connection Tcmn Firebird e Interbase 5 30-05-2007 18:18:32
A call to OS failed VRO OOP 5 20-07-2005 11:52:59
Maximum user count exceeded jmbarrio Firebird e Interbase 1 19-07-2005 17:18:35
Too many Contexts f Relation/Procedure/Views. Maximum allowed is 127 xcostey Firebird e Interbase 0 26-05-2005 16:30:50


La franja horaria es GMT +2. Ahora son las 19:18:29.


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
Copyright 1996-2007 Club Delphi