Ir al contenido



Foto

Duda con campo DateTime en tabla FoxPro


  • Por favor identifícate para responder
23 respuestas en este tema

#1 JordiP

JordiP

    Member

  • Miembros
  • PipPip
  • 19 mensajes

Escrito 23 octubre 2009 - 08:18

Perdona egostar, me aventuré al querer ver solucionado el tema de los DateTime. Resulta que en los campos "Date" el problema si que esta resuelto, pero en los DateTime se presenta otro totalmente diferente:

Al insertar un registro Date en una tabla DBF de FoxPro, el registro se crea corretamente, pero cuando intento utilizar un DateTime, no logro que guarde la Hora, siempre la graba como "12:00:00 AM".

El codigo es el mismo del otro POST pero varia en el valor del campo:



delphi
  1. with DataModule1.ADOQuery_Importar do
  2. begin
  3.   active:=false;
  4.   connectionString:='Provider=VFPOLEDB.1;Data Source=C:\IDX\Gesgru\2008;Password="";Collating Sequence=MACHINE';
  5.   SQL.Clear;
  6.   SQL.Add('INSERT INTO table2 (fecha) VALUES (:FECHA)');
  7.   Parameters.ParamByName('FECHA').DataType := ftDateTime;
  8.   Parameters.ParamByName('FECHA').Value := StrToDateTime('13/12/2044 11:22:33');
  9.   ExecSQL;
  10. end;



Como veras el tipo de campo es DateTime y el valor le añado la Hora, pues en la tabla FOX no guarda esa hora 11:22:33 sino que graba 12:00:00

He probado de pasarlo con diferentes separadores, con el AM y nada de nada. Que se me puede estar escapando ?

Gracias.
  • 0

#2 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 23 octubre 2009 - 08:35

el campo que esta definido en la tabla, estas seguro que es de tipo datetime y no solo date?
  • 0

#3 JordiP

JordiP

    Member

  • Miembros
  • PipPip
  • 19 mensajes

Escrito 23 octubre 2009 - 09:16

Si que es un DataTime ya que me crea un registro con el formato "dd/mm/yyyy hh:mm:ss AM".

Seguro que es una tonteria y no hayo la solución :cry:

Gracias.
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.130 mensajes
  • LocationMéxico

Escrito 23 octubre 2009 - 11:26

Hola

Intenta con esto, a ver si se soluciona.



delphi
  1. Parameters.ParamByName('FECHA').DataType := ftTimeStamp;



Salud OS
  • 0

#5 JordiP

JordiP

    Member

  • Miembros
  • PipPip
  • 19 mensajes

Escrito 26 octubre 2009 - 06:40

nada de nada, he hecho la prueba con ftTimeStamp y nada mas asignarle este valor, da error.
Por lo visto solo reconoce Date, Time y DateTime y en cualquier modo no graba la hora.

La fecha la graba correctamente pero la Hora siempre pone "12:00:00 AM"

Ya no se que mirar, he estado todo el fin de semana haciendo pruebas y ya no veo donde puede estar el problema.

Si teneis alguna idea será muy bien recibida.  :cry:
  • 0

#6 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 26 octubre 2009 - 07:29

¿Revisaste que no sea cosa de la configuración de la hora y fecha del equipo?


Saludos!
  • 0

#7 JordiP

JordiP

    Member

  • Miembros
  • PipPip
  • 19 mensajes

Escrito 26 octubre 2009 - 07:36

podría ser pero probando 01:01:01 creo que no afecta si tiene un formato u otro, ya que el 01 es valido para hora, minuto y segundo.

En el caso de la fecha si que podría afectar por lo de yyyy/mm/dd o mm/dd/yyyy pero es justamente lo que no me da problemas, la fecha.

Gracias FELIPE por el intento. :wink:

Seguiremos esperando alguna otra pista  :sad:
  • 0

#8 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 26 octubre 2009 - 08:17

Aqui te pongo un ejemplo para trabajar con formatos (puedes cambiarlos a tu gusto),  ensaya mostrando un mensaje con el valor de un registro en especial,  si te funciona adaptalo al algoritmo de importación:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2.  
  3. var
  4.   MySettings: TFormatSettings;
  5.   s: string;
  6.   d: TDateTime;
  7. begin
  8.   GetLocaleFormatSettings(GetUserDefaultLCID, MySettings);
  9.   MySettings.DateSeparator := '-';
  10.   MySettings.TimeSeparator := ':';
  11.   MySettings.ShortDateFormat := 'mm-dd-yyyy';
  12.   MySettings.ShortTimeFormat := 'hh:nn:ss';
  13.  
  14.   s := DateTimeToStr(Now, MySettings);
  15.   ShowMessage(s);
  16.   d := StrToDateTime(s, MySettings);
  17.   ShowMessage(DateTimeToStr(d, MySettings));
  18. end;


Sin embargo si usas 'mmm-dd-yyyy' como ShortDateFormat  por ejemplo (para mostrar Jun-09-2009), podría producirse un error al llamar StrToDateTime . Si es el caso podrías llamr d := VarToDateTime(s), para esto debes agrgar la unit Variants.

Espero te sirva de algo

Saludos
  • 0

#9 JordiP

JordiP

    Member

  • Miembros
  • PipPip
  • 19 mensajes

Escrito 27 octubre 2009 - 01:50

Wilson nada de nada, seguimos en las mismas, no creo que se trate de formato, porque he probado de pasar '13/12/2044 11:22:33' de varias maneras y la que mejor acepta a la hora de ejecutar la sentencia SQL es esta, es decir "dd/mm/yyyy hh:mm:ss".

Seguiremos intentandolo y si a alguien se le ocurre alguna otra cosa...............

No quiero creer que sea al unico que se le ha presentado este problema, el FoxPro es demasiado antiguo como para que nadie haya tenido un problema parecido. :

Un saludo a todos.
  • 0

#10 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 27 octubre 2009 - 07:17

Hola, se supone que el formato de fecha que acepta FoxPro es yyyy-mm-dd, por lo que se debería ser así:



delphi
  1. Parameters.ParamByName('FECHA').Value := StrToDateTime('2044-12-11 11:22:33AM');



Saludos.
  • 0

#11 JordiP

JordiP

    Member

  • Miembros
  • PipPip
  • 19 mensajes

Escrito 28 octubre 2009 - 05:15

Ya de entrada, seguro que si le pones AM en el string, te dara error la funcion de Delphi StrToDateTime
 

delphi
  1. StrToDateTime('2044-12-11 11:22:33AM');



Lo del formato del FoxPro con guion tampoco lo reconoce. el formato que se ve al editar una tabla en FoxPro es '12/11/2010 11:22:33 AM'.

Seguiremos mirando e investigando. Dudo que sea el primero y el unico que exporta datos a tablas FoxPro, con lo que alguien debe saber la solución.  :

saludos  :D
  • 0

#12 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 28 octubre 2009 - 06:38

Se me ocurre algo que podría funcionar, y es colocar un DateTimePicker de intermediario para que haga las conversiones que sean necesarias, quedaria mas o menos asi.


delphi
  1. SQL.Clear; 
  2. SQL.Add('INSERT INTO table2 (fecha) VALUES (:FECHA)'); 
  3. Parameters.ParamByName('FECHA').AsDateTime := DateTimePicker.DateTime;
  4. ExecSQL;



Así descartarías el problema de formato.

PD: Importante poner AsDateTime en el parámetro.

Saludos
  • 0

#13 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 28 octubre 2009 - 06:43

Ya de entrada, seguro que si le pones AM en el string, te dara error la funcion de Delphi StrToDateTime
 

delphi
  1. StrToDateTime('2044-12-11 11:22:33AM');



Perdón amigo en realidad fue un error de dedo, quise decir así:



delphi
  1. Parameters.ParamByName('FECHA').AsDateTime := '2044-12-11 11:22:33AM';



Lo del formato del FoxPro con guion tampoco lo reconoce. el formato que se ve al editar una tabla en FoxPro es '12/11/2010 11:22:33 AM'.


mmm, qué raro amigo, viendo los tipos de campos en foxpro, se dice que esa base de datos es muy restrictiva en cuanto al formato de fecha, la cual se limita al formato yyyy-mm-dd. Aquí más información.

Seguiremos mirando e investigando. Dudo que sea el primero y el unico que exporta datos a tablas FoxPro, con lo que alguien debe saber la solución.  :'(

saludos  :D


Antes de seguir con esto, te faltó comentarnos qué versión de BD FoxPro, ya que cada versión hay cambios en la estructura de los tipos de campos.
  • 0

#14 JordiP

JordiP

    Member

  • Miembros
  • PipPip
  • 19 mensajes

Escrito 28 octubre 2009 - 08:07

aaaaarrrggggg, que desespero con este tema. Vuestro consejo no va tampoco.



delphi
  1. Parameters.ParamByName('FECHA').AsDateTime



No reconoce el "AsDateTime" :s Lo unico que permite poner es value y no se si hay otra manera de indicarlo ???

Os recuerdo que trabajo con Delphi 2010. Ah por cierto la versión del FoxPro es la 9.0 SP2. Lo peor de todo es que tengo lo ultimo de todo instalado.

seguiremos investigando. Cualquier otra idea se agradecerá. :D
  • 0

#15 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 28 octubre 2009 - 08:22



delphi
  1. Parameters.ParamByName('FECHA').DataType := ftDateTime;
  2. Parameters.ParamByName('FECHA').Value := '2044-12-11 11:22:33AM';


  • 0

#16 JordiP

JordiP

    Member

  • Miembros
  • PipPip
  • 19 mensajes

Escrito 28 octubre 2009 - 09:24

Ya lo he probado y sigue igual. SERA POSIBLE ????????????????????????????

He probado con estas 2 cadenas de Conexión (Proveedor).

Cadena de Conexión 1:


delphi
  1.   connectionString:='Driver={Microsoft Visual Foxpro Driver};UID=;SourceType=DBF;SourceDB=C:\dBase;Exclusive=Yes';
  2.   SQL.Clear;
  3.   SQL.Add('INSERT INTO table2 (fecha) VALUES (:FECHA)');
  4.   Parameters.ParamByName('FECHA').DataType := ftDateTime;
  5.   Parameters.ParamByName('FECHA').Value := '2044-12-11 11:22:33AM';
  6.   ExecSQL;



Cadena de Conexión 2:


delphi
  1.   connectionString:='Provider=VFPOLEDB.1;Data Source=C:\dBase;Password="";Collating Sequence=MACHINE';
  2.   SQL.Clear;
  3.   SQL.Add('INSERT INTO table2 (fecha) VALUES (:FECHA)');
  4.   Parameters.ParamByName('FECHA').DataType := ftDateTime;
  5.   Parameters.ParamByName('FECHA').Value := '2044-12-05 11:22:33PM';
  6.   ExecSQL;



en abmos casos me da exactamente el mismo problema, no graba la hora.


:cry:
  • 0

#17 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 28 octubre 2009 - 09:50

Ah joder, voy a tener que conseguir VFP para hacer unas pruebas, porque no puede ser :p
  • 0

#18 JordiP

JordiP

    Member

  • Miembros
  • PipPip
  • 19 mensajes

Escrito 29 octubre 2009 - 01:07

pues te estaria eternamente agradecido por el gesto. :wink:
  • 0

#19 JordiP

JordiP

    Member

  • Miembros
  • PipPip
  • 19 mensajes

Escrito 29 octubre 2009 - 02:43

He probado utilizar un TQuery y un Alias (DNS), ha funcionado pero no del todo bien. Explico:

La fecha y hora se graban bien en esta ocasion pero no se porque, en el momento de ExecSQL se crean varios registros iguales en vez de 1 solo.

El codigo probado es el siguiente:



delphi
  1. with DataModule1.Query1  do
  2. begin
  3.   databasename:='Prueba FoxPro';
  4.   SQL.Clear;
  5.   SQL.Add('INSERT INTO table2.dbf (fecha) VALUES (:FECHA)');
  6.   Params.ParamByName('FECHA').DataType := ftDateTime;
  7.   Params.ParamByName('FECHA').Value := '2044-12-05 11:22:33PM';
  8.   ExecSQL;
  9. end;



Bueno parece que algo se avanza pero a la vez vamos hacia atras. :undecided:

Saludos
  • 0

#20 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 29 octubre 2009 - 07:02

pues te estaria eternamente agradecido por el gesto. :wink:


Qué extraño, no encuentro donde descargar el trial de Visual FoxPro :s, sólo veo Services Packs y AddOns :s
  • 0