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)
-   -   Como guardar la fecha de hoy en mysql? (https://www.clubdelphi.com/foros/showthread.php?t=61734)

lucho1981 19-11-2008 23:20:26

Como guardar la fecha de hoy en mysql?
 
Hola gente, mi duda es sobre como guardar la fecha actual en delphi y viceversa.
Cuando capturo la fecha actual esta en el formato dd/mm/aaaa y mysql toma valores aa/mm/dd.
Como hago para guardarlas y como hago luego para mostrarlas?
Muchas gracias.

droguerman 19-11-2008 23:38:16

En caso de fechas actuales yo prefiero que sea el servidor de base de datos el que las guarde (Un usuario puede cambiar la fecha del sistema pero no del servidor) para lo cual puedes usar la función de mysql NOW()

Besto 20-11-2008 12:29:24

Hola,

a mi las fechas siempre me han dado bastantes problemas. Al final lo que hago es crear un campo en mysql que sea datetime y luego las trato antes de insertarlas en la base de datos.

Cuando inserto un registro en la base de datos formateo antes la fecha:

"insert into .....(..., campotipofecha,...) values (...,FormatDateTime('yyyymmdd',EFecha.date),...)

Para recuperarla no hay ningún problema , el mismo campo se le asigna al componente:

EFecha.date := FieldByName('fecha').AsDateTime;

Si realizas alguna comparación igual que con el insert.

Desde que uso esto no he tenido ningun problema con ellas.

lucho1981 20-11-2008 20:01:40

Cita:

Empezado por Besto (Mensaje 326956)
Al final lo que hago es crear un campo en mysql que sea datetime y luego las trato antes de insertarlas en la base de datos.

Cuando inserto un registro en la base de datos formateo antes la fecha:

"insert into .....(..., campotipofecha,...) values (...,FormatDateTime('yyyymmdd',EFecha.date),...)

Para recuperarla no hay ningún problema , el mismo campo se le asigna al componente:
EFecha.date := FieldByName('fecha').AsDateTime;

Gracias Besto, pero no pude resolver todavia mi problema.

Les cuento q intente en un query
Código SQL [-]
INSERT legajo, duracion, dia INTO tiempotrabajado
VALUES
(:leg, :dura, FORMATDATETIME('yyyymmdd',:hoy))

Donde :hoy es el parametro q recibe
Código Delphi [-]
 ParamByName ('hoy').value:= DATETOSTR(date());

La cuestion es q o hay algo q no comprendi o algo estoy haciendo mal.

Te cuento q uso mysql 5 y delphi 7.
Alguna sugerencia? O como podria guardar la fecha desde la consulta directamente? algo asi como lo q dice Droguerman.

roman 20-11-2008 20:14:44

Los problemas con las fechas se evitan si se pasan correctamente como parámetros:

Código SQL [-]
INSERT legajo, duracion, dia INTO tiempotrabajado
VALUES
(:leg, :dura, :hoy)

Código Delphi [-]
ParamByName('hoy').AsDate := date();

O sea, el valor se pasa como tipo TDate y es el propio componente Query quien se encarga del formato adecuado para el motor en cuestión. Observa que debes poner AsDate y no Value.

Si quieres que sea el mismo MySQL el que asigne la fecha usa la función curdate:

Código SQL [-]
INSERT legajo, duracion, dia INTO tiempotrabajado
VALUES
(:leg, :dura, curdate())

// Saludos

Caral 20-11-2008 20:58:41

Hola
Es raro pero a mi access no me deja hacerlo asi:
Me da error de sintaxis:
Código SQL [-]
INSERT legajo, duracion, dia INTO tiempotrabajado
VALUES (:leg, :dura, :hoy)
Lo tengo que hacer asi:
Código SQL [-]
INSERT INTO tiempotrabajado (legajo, duracion, dia) 
VALUES (:leg, :dura, :hoy)
Osea esto:
Código Delphi [-]
var
dia: Tdatetime;
begin
  dia:= now;
  ADOQuery1.SQL.Text:= 'INSERT INTO tiempotrabajado (legajo, duracion, dia)'+
                       'VALUES (:leg, :dura, :dia1)';
  ADOQuery1.Parameters.ParamByName('leg').Value:= Edit1.Text;
  ADOQuery1.Parameters.ParamByName('dura').Value:= Edit2.Text;
  ADOQuery1.Parameters.ParamByName('dia1').Value:= FormatDateTime('yyyy/mm/dd',dia);
  ADOQuery1.ExecSQL;
end;
Saludos

roman 20-11-2008 21:06:19

No me había fijado más que en la parte del VALUES, pero desde luego tienes razón. Tal como lo pones es la sintaxis correcta.

En el caso de ADO, no existe el AsDate como lo había puesto, así que hay que especificar el tipo de datos del parámetro:

Código Delphi [-]
ADOQuery1.Parameters.ParamByName('hoy').DataType := ftDate;
ADOQuery1.Parameters.ParamByName('hoy').Value := date();

// Saludos

lucho1981 20-11-2008 21:13:29

Gracias
 
Gracias Roman, probare de hacerlo a tu manera.
Disculpen mi ignorancia:confused:
Gracias caral, como siempre dando en el blanco de mi problema..
;)

Caral 20-11-2008 21:15:31

Hola
Es que entre Novatos nos entendemos.:D:D:D
Saludos

lucho1981 20-11-2008 21:48:54

Cita:

Empezado por Caral (Mensaje 327070)
Hola
Es que entre Novatos nos entendemos.:D:D:D
Saludos

Me parece q ya pasaste la etapa de novato, me haces quedar como algo menor a un novato (q era lo q yo me consideraba) jejee.

Aprovecho la oportunidad para preguntar si alguien sabe como capturar el evento anterior al de cerrar la ventana principal.
Trate de usar el evento OnClose del formulario, pero no se si escribo mal el codigo o en el evento equivocado, porq si o si se cierra la ventana.
Código Delphi [-]
procedure TPrincipal.FormClose(Sender: TObject; var Action: TCloseAction);
begin
     if((application.messagebox('Esta seguro que desea cerrar su sesión, y abandonar el programa?','Confirmar', MB_YESNO)=MRYES))then
      begin
        close;
      end;
end;

En el caso de q diga q no....q debo hacer para q no se cierre la ventana principal?

Caral 20-11-2008 21:55:48

Hola
Esta deberia de ser otra pregunta, otro hilo, pero bueno.
Código Delphi [-]
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    if MessageDlg('¿Esta seguro que desea cerrar su sesión, y abandonar el programa?', mtConfirmation,
       [mbYes, mbNo], 0) = mrYes then
       Action := caFree
     else
       Action := caNone;
end;
Saludos


La franja horaria es GMT +2. Ahora son las 09:57:01.

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