Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Insertar Fecha (DatetimePicker) en MYSQL (https://www.clubdelphi.com/foros/showthread.php?t=85088)

Parsec 27-01-2014 20:36:55

Insertar Fecha (DatetimePicker) en MYSQL
 
Hola,

tengo un TADOQuery que se llama InsertaFichajes con la siguiente sentencia:
Código:

insert  into aluminio.fichajes(Orden, Operacion, Empleado, Inicio, Fin, Maquina, TiempoTeorico, UnidadTiempo, Tipo, Tipo_Incidencia, Observaciones_Incidencia, Composicion, Cantidad, Buenas, Malas, Motivo, Observaciones, AyudaStr1) values (:Orden, :Operacion, :Empleado, :Inicio, :Fin, :Maquina, :TiempoTeorico, :UnidadTiempo, :Tipo, :Tipo_Incidencia, :Observaciones_Incidencia, :Composicion, :Cantidad, :Buenas, :Malas, :Motivo, :Observaciones, :AyudaStr1)
Concretamente tengo problemas con los campos Inicio y Fin.
Cuando llega el momento de asignar valores a los campos Inicio y Fin me sale un error de que el formato no es compatible.
Para asignar valores a Inicio y Fin (solo presento Inicio, el campo Fin es idéntico) he utilizado esto:
Código Delphi [-]
InsertaFichaje.Parameters.ParamByName('Inicio').Value:=DatetimePicker3.DateTime;
Y, también, esto que he encontrado por el foro:
Código Delphi [-]
            InsertaFichaje.Parameters.ParamByName('Inicio').Value:=QuotedStr(FormatDateTime('yyyy-mm-dd',DateTimePicker3.Date));
Y mucho más...llevo toda la tarde probando.
Siempre me sale un error, la cuestión es que MYSQL tiene un formato del tipo 'yyyy-mm-dd hh:mm:ss' y el DateTimePiker es del tipo 'dd/mm/aaaa hh:mm:ss' y no encuentro la forma de poder insertar el valor.
Si me podéis echar un cable os lo agradecería.

Saludos

ecfisa 28-01-2014 00:23:50

Hola Parsec.

Revisa la función MySQL DATE_FORMAT()

Saludos :)

Parsec 29-01-2014 18:41:44

Hola Ecfisa,

Delphi no reconoce date_format() :confused:

Exactamente, lo que necesito es convertir un datetimepicker en aaaa-mm-dd hh:mm:ss (formato fecha de MYSQL) y que delphi lo reconozca como un formato bueno al pasárselo al 'Parameter' de un 'ADOQuery'.
Esta es la instrucción insert en SQL del comoponente ADOQuery:
Cita:

insert into aluminio.fichajes(Orden, Operacion, Empleado, Inicio, Fin, Maquina, TiempoTeorico, UnidadTiempo, Tipo, Tipo_Incidencia, Observaciones_Incidencia, Composicion, Cantidad, Buenas, Malas, Motivo, Observaciones, AyudaStr1) values (:Orden, :Operacion, :Empleado, :Inicio, :Fin, :Maquina, :TiempoTeorico, :UnidadTiempo, :Tipo, :Tipo_Incidencia, :Observaciones_Incidencia, :Composicion, :Cantidad, :Buenas, :Malas, :Motivo, :Observaciones, :AyudaStr1)
Y cuando le intento asignar el valor al 'Parameter' del ADOQuery con el formato que necesita MYSQL es cuando me da el error, (lo he probado de muchas formas, te presento las 2 últimas):

Código Delphi [-]
InsertaFichaje.Parameters.ParamByName('Inicio').Value:=DatetimePicker3.DateTime;
// También he probado con esta sentencia
InsertaFichaje.Parameters.ParamByName('Inicio').Value:=QuotedStr(FormatDateTime('yyyy-mm-dd',DateTimePicker3.Date));

¿Hay solución?.
Gracias y saludos

Parsec 29-01-2014 18:58:44

Hola de nuevo,

muestro el error y la línea donde ocurre.
Código Delphi [-]
              InsertaFichaje.Parameters.ParamByName('Inicio').Value:=StrToDateTime('2014-01-20 01:02:33');

Y este es el error:



Saludos

Parsec 29-01-2014 19:19:29

Hola otra vez,

este es el error que me sale si le paso un fecha con formato delphi:
Instrucción:
Código Delphi [-]
InsertaFichaje.Parameters.ParamByName('Inicio').Value:=StrToDateTime('20/01/2014 01:02:33');
Error:


Saludos

ecfisa 29-01-2014 22:26:10

Cita:

Empezado por Parsec (Mensaje 472199)
...
Exactamente, lo que necesito es convertir un datetimepicker en aaaa-mm-dd hh:mm:ss
...

Hola Parsec.

Para ese punto que solicitas, intenta de este modo:
Código Delphi [-]
...
var
  tmp: string;
begin
  tmp:= ShortDateFormat; 
  try
    ShortDateFormat:= 'yyyy-MM-dd';
    ShowMessage(DateTimeToStr(DateTimePicker1.DateTime)); // (para que verifiques el valor)
    ...
    InsertaFichaje.Parameters.ParamByName('Inicio').Value:= DatetimePicker3.DateTime;
    InsertaFichaje.ExecSQL; // (supongo)
  finally
    ShortDateFormat:= tmp;
  end;
end;

Saludos :)

Parsec 30-01-2014 18:34:41

Hola,

hemos avanzado!!, he conseguido grabar la fecha pero la hora la deja en 00:00:00, te pego una imagen de la BBDD MYSQL:



Es posible que haya otro problema en el parameter 'Inicio' (fecha con formato DateTime) del componente ADOQuery, te pego la imagen:



He cambiado varias veces los valores del parameter 'Inicio' pero siempre deja la hora '00:00:00'.

¿Hay alguna incompatibilidad entre Delphi y MYSQL?, con PHP va como la seda.
¿Hay solución?, estoy pensando en asignar otro tipo de variable al campo Inicio en MYSQL, pero tengo más de 20 páginas en PHP que trabajan con él y modificarlo significaría un montón de horas de trabajo.

Saludos

ecfisa 30-01-2014 20:18:59

Hola Parsec.

No uso MySQL, pero jamás escuché que tuviera incompatibilidad con Delphi.

A ver, fijate si así...
Código Delphi [-]
var
  sdt, ltf: string;
begin
  sdt:= ShortDateFormat;
  ltf:= LongTimeFormat;
  try
    ShortDateFormat:= 'yyyy-MM-dd';
    LongTimeFormat := 'hh:mm:ss';
    ...
    InsertaFichaje.Parameters.ParamByName('Inicio').Value:= DatetimePicker3.DateTime;
    InsertaFichaje.ExecSQL;
  finally
    ShortDateFormat:= sdt;
    LongTimeFormat := ltf;
  end;
end;

Saludos :)

Parsec 30-01-2014 21:39:12

Hola,

sigue sin guardar la hora, la deja a '00:00:00', pero he metido un parchecito que me soluciona el problema.

Una vez insertado el registro (con inicio = 2014-01-30 00:00:00), realizo una búsqueda al último campo insertado y modifico el campo 'Inicio', como ahora no es ningún parámetro puedo utilizar 'AsDateTime' y si que graba la hora:
Código Delphi [-]
begin
            ModificaInicio.Edit;
            ModificaInicio.FieldByName('Inicio').AsDateTime:=DateTimePicker3.DateTime;
            ModificaInicio.FieldByName('Tipo').AsString:='Prueba1';
            ModificaInicio.Post;
          end;

Muchas gracias por tu ayuda.
saludos


La franja horaria es GMT +2. Ahora son las 20:30:34.

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