Page 1 of 1

Otra de ADO (Puro) Fechas

Posted: Fri Jan 11, 2008 9:55 pm
by leandro
Amigos tengo el siguiente problema:

Estoy tratanto de agregar un registro a una tabla en mssql. La tabla tiene un campo de tipo [smalldatetime] es una fecha con la hora queda de la siguiente manera: 01/01/2008 12:00:00 a.m.

El problema es que intentanto subir en todos los formatos de fecha

fec:='01/01/2008 12:00:00 a.m.'
fec:='01/01/2008 00:00'
fec:='01/01/08 00:00'

La unica forma de lo sube es asi:

fec:='01/01/2008'

Pero cuando miro la fecha en la tabla me queda una fecha que no es:

"01/01/1900 12:00:00 am"

Alguien me puede indicar como devolver el valor fecha.

El Codigo es el siguiente:

Code: Select all


SELE tbl_lin
Dbgotop()
Do while !Eof()

  Cod:=alltrim(tbl_lin->lin_codigo)
  Nom:=alltrim(tbl_lin->lin_nombre)
  Act:=Valor(tbl_lin->lin_activo)
  Con:=Valor(tbl_lin->lin_conexi)
  Emp:=alltrim(tbl_lin->lin_nomemp)
  Equ:=alltrim(tbl_lin->lin_equipo)
  Ope:=alltrim(tbl_lin->lin_codope)
  Ver:=dtoc(tbl_lin->lin_versio)
  Fec:=dtoc(tbl_lin->lin_fecope)
  Pro:=alltrim(tbl_lin->lin_proreg)
  Rem:=alltrim(tbl_lin->LIN_NOMREM)

 cCommandSql	:= "INSERT INTO MAELIN (lin_codigo,lin_nombre,lin_activo,lin_versio) VALUES ('"+Cod+"','"+Nom+"','"+Act+"',"+Fec+")"


  TRY
    oCon:Execute(cCommandSql)
  CATCH oError
    MsgInfo("El registro no pudo ser insertado")
  END

  SELE tbl_lin
  Skip
Enddo
De antemano Gracias

Posted: Fri Jan 11, 2008 10:14 pm
by jcaro
Leandro:

Recuerdo que RF, hablo de un tipo de dato datetime que tiene el xharbour. A lo mejor eso te puede ayudar.

Saludos,

Posted: Fri Jan 11, 2008 10:51 pm
by sysctrl2
Leandro amigo,

lamento decirte que ado no tiene soporte para fecha y hora (datetime)

yo ya estuve batallando con una tabla de acces,

sin llegar a ninguna solucion,

o puede ser el compilador xharbour el que no lo soporta,

pero no hay una solucion de momento,

los gurues en este foro no habla mucho sobre este tema..

realmente no sabemos si el el problema es de ADO o xhb.


saludos..

Posted: Fri Jan 11, 2008 11:20 pm
by ricardog
Leandro:


Convierte la fecha a modo caracter, antes de actualizar la Tabla:

cFecha := "'"+StrZero( Year( Date() ),4 )+;
StrZero( Month( Date() ),2 )+;
StrZero( Day( Date() ),2 )+"'"

Encierra la cFecha con la "apostrofes" ( NO DOBLES COMILLAS ), y enviala a grabar.

Tiene que grabar la fecha correcta, y los datos de la hora en 00:00:.....


Saludos

Posted: Sat Jan 12, 2008 12:58 am
by Willi Quintana
Hazlo asi:

cFecha := DTOC2(Date()) + " " + SUBSTR(TIME(),1,8)

....
cInsert := "INSERT INTO prueba SET fecha = '" + cFechaHora + "'"
oCon:Execute(cInsertl)
....
...
..
.


Function DTOC2(dDate) // Harbour to MySQL
local cDate
SET (_SET_DATEFORMAT, "yyyy-mm-dd")
If EMPTY(dDate)
cDate := " - - " // aqui son 4 espacion para el año
Else
cDate := DTOC(dDate)
EndIf
Set( _SET_DATEFORMAT, "dd/mm/yyyy" )
Return(cDate)

Posted: Sat Jan 12, 2008 10:02 pm
by leandro
Gracias a todos por las respuestas y por la ayuda prestada.

Viejo Willi :lol:

Era lo que necesitaba. :D

Muchas Gracias