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)
-   -   me hace falta un componente para trabajar con fechas y bases de datos (https://www.clubdelphi.com/foros/showthread.php?t=12348)

fearlex 13-07-2004 20:11:06

me hace falta un componente para trabajar con fechas y bases de datos
 
me hace falta un componente para trabajar con fechas en una base de datos, conocen alguno ??
desde ya gracias

marcoszorrilla 13-07-2004 20:12:24

Y no te sirve el DateTimePicker que viene con Delphi?

Un Saludo.

fearlex 13-07-2004 21:45:13

sip pero el error es otro
 
ya consegui un componente que se llama DBDateTimePicker y es igual que el que viene con delphi pero pa trabajar con bases de datos pero el problema es que cuando no hay ninguna fecha guardada en el campo me pone por defecto una fecha de 1889 y a mi esa fecha no me sirve pero si cada vez que el usuario tenga que introducir un registro tiene que hacer click constante para selecionar la fecha entonces no es etico, espero me ayuden

vic_ia 13-07-2004 21:56:35

Cita:

Empezado por fearlex
... el problema es que cuando no hay ninguna fecha guardada en el campo me pone por defecto una fecha de 1889 y a mi esa fecha no me sirve pero si cada vez que el usuario tenga que introducir un registro tiene que hacer click constante para selecionar la fecha entonces no es etico, espero me ayuden

me supongo que ese componente trabaja igual que el otro que te sugirieron, una forma simple de hacer lo que quieres (que cuando el usuario no haya introducido fecha no se registre fecha alguna en el campo) puedes poner en el beforepost de tu tabla una verificación de forma :
Código Delphi [-]
if Picker.Text = '' then tabla.campo.clear;
espero te sirva...

saludos...

fearlex 13-07-2004 22:20:37

gracias de todas formas
 
[quote=vic_ia](que cuando el usuario no haya introducido fecha no se registre fecha alguna en el campo) [quote]
no el problema es que en el campo de la tabla no se guarda nada pero miren paso por paso:
cuando agrego un registro nuevo me pone por defecto esa fecha en como decir el text del campo, por ke no tiene esa propiedad, la que tiene es date
si yo no le pongo nada cuando salvo el me guarda en blanco, no me guarda nada pero lo que quiero es que por defecto coja la fecha de la makina que la tengo almacenada en una variable globlal, entienden ?
de veras que no se que hacer ya llevo semanas en esto y no acabo de dar con la solucion ??
gracias de todas formas

roman 13-07-2004 22:28:24

Cita:

Empezado por vic_ia
Código Delphi [-]
if Picker.Text = '' then tabla.campo.clear;

Sólo que el DateTimePicker, y supongo que el mencionado DBTimePicker tampoco, no tiene una propiedad Text.

Por otro lado, la fecha de 1899 muy posiblemente se deba a que el DBTimePicker traduce un valor null (como lo será en un nuevo registro) a cero, que- traducido a tipo TDateTime -corresponde a 30/12/1899.

El problema con el DateTimePicker es precisamente que no maneja de forma nativa el concepto de fechas nulas. Y, sinceramente, cualquier control db que maneje fechas debiera tener en cuenta esto.

// Saludos

roman 13-07-2004 22:31:51

Cita:

Empezado por fearlex
lo que quiero es que por defecto coja la fecha de la makina que la tengo almacenada en una variable globlal

¡Ah! Entonces puedes asignarla en el evento OnNewRecord del dataset asociado:

Código Delphi [-]
procedure Form1.Table1NewRecord(DataSet: TDataSet);
begin
  DataSet['fecha'] := Now();
end;

// Saludos

fearlex 13-07-2004 22:35:25

Cita:

Empezado por roman
Por otro lado, la fecha de 1899 muy posiblemente se deba a que el DBTimePicker traduce un valor null (como lo será en un nuevo registro) a cero, que- traducido a tipo TDateTime -corresponde a 30/12/1899.

El problema con el DateTimePicker es precisamente que no maneja de forma nativa el concepto de fechas nulas. Y, sinceramente, cualquier control db que maneje fechas debiera tener en cuenta esto.

// Saludos

Exacto esa es la fecha, sabes como podria controlar eso por ke de veras que me tiene loco el problema ??

marcoszorrilla 13-07-2004 22:47:28

La solución que te propone Vic_ia es válida, simplemente tienes que controlar el evento BeforePost del Ttable, ahí compruebas si la fecha es nula ó no, y si es nula pues:

MiFecha.Clear;

De esta manera no se graba absolutamente nada.

Como veras tanto el DateTimePicker como el componente que dices has conseguido no tienen ningún problema, el problema es controlar cuando el usuario no introduce nada.

Un Saludo.

fearlex 13-07-2004 22:49:14

gracias mil gracias amigo...
 
Cita:

Empezado por roman
¡Ah! Entonces puedes asignarla en el evento OnNewRecord del dataset asociado:

Código Delphi [-]
procedure Form1.Table1NewRecord(DataSet: TDataSet);
begin
  DataSet['fecha'] := Now();
end;

// Saludos

Ops no entendi dond ees que se pone eso, ni a que te refieres con el dataset ni con fecha, explicame si puede que significan cada uno por ke no entendi despues de tantas horas de agobio ya casi no razono pero tengo que seguir por ke debo terminarlo cuanto antes, gracias mil gracias amigo...

marcoszorrilla 13-07-2004 22:55:33

Aquí tienes un ejemplo:
Código Delphi [-]
procedure TDmNes.RecibosBeforePost(DataSet: TDataSet);
begin
 if DmNes.RecibosFecha.Value = null then
 DmNes.RecibosFecha.Clear;
end;

DmNes es un DataModule en donde está alojada la tabla Recibos y como es lógico Fecha es el campo que queremos controlar que no contenga valores nulos.

Un Saludo.

roman 13-07-2004 23:00:40

Cita:

Empezado por marcoszorrilla
Como veras tanto el DateTimePicker como el componente que dices has conseguido no tienen ningún problema, el problema es controlar cuando el usuario no introduce nada.

Lamento diferir en este punto. La cuestión es precisamente que con el DateTimePicker no es posible "no introducir nada" y por ende no hay forma directa de guardar una fecha nula en la base. A juzgar por la descripción de fearlex, el DBTimePicker al menos guarda fechas "cero" (léase 30/12/1899) como nulos, pero esto tampoco es solución en los casos en los que tal fecha sea un valor válido (p. ej. la fecha de nacimiento de mi abuelo). Pero por otro lado está la cuestión de que la mencionada componente, al igual que el DateTimePicker interpretarán fechas nulas como 30/12/1899. El problema en principio se resuelve en registros nuevos con la técnica del evento OnNewRecord pero ¿qué pasará cuando no se trate de registros nuevos sino de registros ya existentes con fechas nulas o si no se desea dar ningún valor por defecto al campo fecha?

// Saludos

fearlex 13-07-2004 23:04:00

grcias
 
muchas grcias ya me funciona, de de veras que se los agradezco por ke estaba botado con el problemita ese, gracias mil gracias, y como dato les dire que la forma que dijo Roman fue la que me funciono, sale perfecto y la otra pues voy a probarla en estos instantes pero es que estaba tan emocionado que en cuanto me funciono quise agradecer.........gracias mil

Saludos desde cuba amigos

roman 13-07-2004 23:05:23

Cita:

Empezado por marcoszorrilla
Código Delphi [-]
procedure TDmNes.RecibosBeforePost(DataSet: TDataSet);
begin
 if DmNes.RecibosFecha.Value = null then
 DmNes.RecibosFecha.Clear;
end;

Disculpa Marcos pero en realidad este código no hace nada. El método Clear de TField lo que hace es precisamente poner en Null el valor del campo de manera que es como poner:

Código Delphi [-]
procedure TDmNes.RecibosBeforePost(DataSet: TDataSet);
begin
 if DmNes.RecibosFecha.Value = null then
   DmNes.RecibosFecha.Value := null;
end;

marcoszorrilla 13-07-2004 23:09:12

Es que por ejemplo en Paradox, sino haces esto te coloca la fecha 1899 o algo así y de esta manera deja el campo vacio totalmente, no contiene ningún valor, como si el usuario no hubiera escrito absolutamente nada.

Un Saludo.

Delfino 13-07-2004 23:25:54

No es recomendable usar el DateTimePicker segun este articulo http://delphi.about.com/library/weekly/aa042004a.htm

te recomiendo el DBDateEdit q viene con la suite JVCL http://homepages.borland.com/jedi/jvcl/

fearlex 13-07-2004 23:32:54

gracias
 
me funciona de la forma que dice roman por ke de la otra forma no por ke me hace falta utilizar eso cuando se agregue un nevo registro, corro el riesgo de ke cuando la tabla este vacia y se abra el form me tome esa fecha pero puse required en ese campo asi que no podra salvar hasta que no ponga la fecha, pero siempre y cuando agregue un nuevo registro me pondra la fecha de la maquina lista para guardar...
gracias de nuevo amigos, no se si crear un nuevo hilo pero me hace falta proteger una base una base de datos para que no accedan a ella por access que es lo que utilizo , o sea que solamente la puedan abrir con el programa que estoy creando, y que si alguien desea abrirla con el access no pueda, encriptarla o, algo, incluso en la propia base da datos guardo las contraseñas de administracion encrptadas pero si me las borren me fastidie, saben como hacerlo ??

roman 13-07-2004 23:37:28

Cita:

Empezado por fearlex
no se si crear un nuevo hilo

Crea un nuevo hilo.

// Saludos


La franja horaria es GMT +2. Ahora son las 06:18:37.

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