PDA

Ver la Versión Completa : Controlar insercion de fecha y hora en una tabla paradox


Muten
14-07-2003, 19:12:57
Hola a todos, este es mi primer mensaje en este foro.. así q sed buenos conmigo ;)
Tengo creada una tabla en Paradox con varias columnas, entre ellas una de tipo fecha (Date) y otra de tipo hora (Time), me gustaría saber cuál es la forma más común de controlar la entrada de estos tipos de datos desde un formulario en delphi. Supongo q lo más común es tener dos TDBText con una máscara, una para tipo fecha y la otra para tipo tiempo. Pero la cosa no me va...
Alguna sugerencia??

marcoszorrilla
14-07-2003, 19:27:30
En el Ttable con el que te conectes haces doble clic sobre el campo en cuestión despues de haber añadido todos los campos, y ahí le das el formato, luego lo heredarán todos los DbEdit que tengas e incluso las rejillas.

Un Saludo.

Muten
14-07-2003, 23:13:20
Gracias por tu respuesta marcos, mejora lo de la mascara en el tdbText, pero no me soluciona el problema, intentaré ser más claro:
Supongamos q tomamos una de las máscaras para la hora que nos proporciona delphi, esto es: '!90:00;1;_'
En una BD paradox, está permitido meter un 8 únicamente para indicar que son las 08:00:00, si metemos un 8 con esta máscara se produce un error. He mirado muchas formas para cambiar la máscara y q se puedan meter lo distintos formatos q admite la BD (p.ej 8:2 se convierte en 08:02:00), pero no me sale :confused:
De todas formas no sé cómo evitar q se muestre esa pantalla tan fea cuando metemos los datos de la hora, p.ej y nos salimos del dbeText ("Invalid input type...."). El evento OnValidate de la TTable se ejecuta cuando se han introducido correctamente los datos, y no veo ningún otro evento interesante por ahí.

Saludos a todo el foro!

marcoszorrilla
15-07-2003, 16:32:48
Prueba con este ejemplo, un poco forzado pero funciona:

Bájate un TApplicationEvents lo tienes en la paleta adicional y para interceptar este error de conversión, que no la lanza el BDE, sino Delphi pones este código, solamente pongo el ejemplo con fechas, pero con tiempos funcionará igual interceptando el mensaje correspondiente.


procedure TForm1.ApplicationEvents1Exception(Sender: TObject;
E: Exception);
begin
if (lowercase(copy(E.Message,(Length(E.Message) - 18),19 )))='is not a valid date' then
Application.MessageBox('La fecha introducida no es correcta','Atención',mb_Ok +
mb_IconQuestion);
end;



Un Saludo.

Muten
16-07-2003, 12:10:06
Gracias otra vez marcos, basándome en tu idea, me he puesto con la ayuda de delphi y lo he hecho de ésta forma, a ver q te parece:


procedure TfrmRegistro.ApplicationEvents1Exception(Sender: TObject;
E: Exception);
begin

if (E is EDBEditError) then
begin
if (dbeFecha.Focused) then
begin
MessageDlg('¡Fecha incorrecta! ' +#13+dbeFecha.text +#13 +
'No tiene formato de fecha.',mtWarning,[mbOK],0);
dbeFecha.Text :='';
end


Un saludo!

marcoszorrilla
16-07-2003, 20:30:03
Lo veo correcto, lo único es que solamente te sirve para ese control en concreto y con la solución que yo te dí, que habría que mejorar pero no voy bien de tiempo, serviría para cualquier mensaje de error de "fecha incorrecta" 'is not a valid date'

Un Saludo.

Muten
16-07-2003, 20:37:43
Pues tienes razón, de la forma que indicas nos cubrimos las espaldas para cualquier tipo de error relacionado con la fecha.. D todas formas el uso d excepciones no me terminan de convencer a la hora de controlar la fecha y la hora, pero vamos, no pienso seguir comiendome mas el coco con el tema.
Una vez mas, gracias.

pgraciap
13-08-2003, 17:42:53
Hola, Muten.

Mira yo no entiendo cual es la finalidad de controlar la insercion de los datos Fecha y Hora, pero hay varias formas de introducir estos datos.

Yo controlo hago que el sistema controle estos datos con lo siguiente:
FrmDatos.Acceso.FieldByName(Fecha).AsDatetime:= Date;
FrmDatos.Acceso.FieldByName(Hora).AsDatetime:= Time;
y asi me evito errores, pero si lo que quieres es introducir estos datos de la forma que el usuario los introduzca creo que primero tendras que ver el formato de la hora y la fecha, es por ello que te marca errores.....

creo que la hora no es: 08:02:50 creo que es: 08:02:00 p.m. o algo asi busca primero como se convierte el dato y veras tu solucion al igual que la fecha........ :D

Espero te sirva de algo......