Page 1 of 1

ayuda campo fecha en ado y recordset

PostPosted: Tue Jun 18, 2013 4:50 am
by carlos vargas
Code: Select all  Expand view

   TRY
     WITH OBJECT ( oRS := TOleAuto():New( "ADODB.RecordSet" ) )
         :CursorLocation   := adUseClient
         :CursorType       := adOpenDynamic
         :LockType         := adLockOptimistic
         :ActiveConnection := oConexion
      END
   CATCH oError
      lOk := FALSE
      ShowAdoError( oConexion, oError )
   END

   IF !lOk
      RETURN lOk
   ENDIF

      oRS:open( "CONCESIONES" )
      oSayI:SetText( "Actualizando tabla CONCESIONES" )
      CursorWait()
      SELECT "CONC"
      CONC->( DBGoTop() )
      DO WHILE !CONC->( Eof() )
         oRS:AddNew()
         oRS:Fields( "NUM_EMPR"   ):Value := CONC->NUM_EMPR
         oRS:Fields( "NUM_CONC"   ):Value := CONC->NUM_CONC
         oRS:Fields( "NOM_CONC"   ):Value := CONC->NOM_CONC
         oRS:Fields( "ACUERDO"    ):Value := CONC->ACUERDO
         oRS:Fields( "NUM_DEPA"   ):Value := CONC->NUM_DEPA
         oRS:Fields( "NUM_MUNI1"  ):Value := CONC->NUM_MUNI1
         oRS:Fields( "NUM_MUNI2"  ):Value := CONC->NUM_MUNI2
         oRS:Fields( "NUM_MUNI3"  ):Value := CONC->NUM_MUNI3
         oRS:Fields( "AREA"       ):Value := CONC->AREA
         //oRS:Fields( "FECHA_SOL"  ):Value := IIf( !Empty( CONC->FECHA_SOL ), CONC->FECHA_SOL , CToD( "31/12/1899" ) )
         //oRS:Fields( "FECHA_VEN"  ):Value := IIf( !Empty( CONC->FECHA_VEN ), CONC->FECHA_VEN , CToD( "31/12/1899" ) )
         oRS:Fields( "ULTIMO_AER" ):Value := CONC->ULTIMO_AER
         oRS:Fields( "NOTA"       ):Value := CONC->NOTA
         oRS:update()
         CONC->( DBSkip() )
      ENDDO
      SysRefresh()
      oRS:close()
 


se que en msqsl,mysql,postgree,etc no existe el concepto de fecha vacia
pero como hago para grabar cuando el dato fecha no tieve valor, en un insert pongo "INSERT INTO tabla ( CODIGO, FECHA) VALUE ( 125, NULL )"
pero en recordset no puedo poner
oRS:Fields( "FECHA_SOL" ):Value := IIf( !Empty( CONC->FECHA_SOL ), CONC->FECHA_SOL , NULL )

ya que NULL no existe en xharbour, lo ma parecido es NIL que no es igual NULL, que hago.
de antemano muchas gracias por su ayuda

Re: ayuda campo fecha en ado y recordset

PostPosted: Tue Jun 18, 2013 5:28 am
by carlos vargas
aclaro que he probado con NIL, ctod(""), ctod("30/12/1899") y nada.

Re: ayuda campo fecha en ado y recordset

PostPosted: Tue Jun 18, 2013 8:14 am
by lucasdebeltran
Carlos,

¿Has probado con DtoC?.

Los campos en MySQL son todos strings.

A ver si te sirve.

Re: ayuda campo fecha en ado y recordset

PostPosted: Tue Jun 18, 2013 3:47 pm
by compubrion
Saludos !
Carlos intenta de esta forma

oRS:Fields( "FECHA_SOL" ):Value := IIf( !Empty( CONC->FECHA_SOL ), CONC->FECHA_SOL , "NULL" ), tambien puedes hacerlo con un insert into seria mas rapido

Re: ayuda campo fecha en ado y recordset

PostPosted: Tue Jun 18, 2013 4:05 pm
by Armando
Carlos:

Mis dos centavos, en MySql no existe el concepto de fecha vacía como lo hay en DBFs pero sí
existe el concepto NULL, que propiamente no deja el campo vacío lo deja con un NULL o NIL
que no es lo mismo que vacío.

Por ejemplo en una tabla donde registras a los empleados de la compañía, todos tienen una
fecha de ingreso pero no todos tiene una fecha de baja de la empresa, en este caso el campo
de la fecha de ingreso lo defines como NOT NULL pero el campo de la fecha de baja debe
aceptar NULL.

Ahora para lo que necesitas primero debes haber definido el campo en tu tabla como que acepta
NULL, después al actualizar debes hacer lo siguiente:

1.- Si el campo a guardar no esta vacío prueba a hacerlo así
Code: Select all  Expand view

oRS:Fields( "FECHA_SOL" ):Value  := DTOS(CONC->FECHA_SOL )
 


2.- Si el campo a guardar esta vacío prueba así
Code: Select all  Expand view

oRS:Fields( "FECHA_SOL" ):Value  := DTOS(CTOD("00/00/0000") )
 


Recuerda, cuando vayas a usar el campo "FECHA_SOL" para, por ejemplo, imprimirlo, primero
debes probar que no venga NIL, de lo contrario te va a tirar un error.

Espero que te sirva, Saludos

Re: ayuda campo fecha en ado y recordset

PostPosted: Tue Jun 18, 2013 4:37 pm
by carlos vargas
gracias lucas
me ha funcionado asi
Code: Select all  Expand view

oRS:Fields( "FECHA_SOL"  ):Value := IIf( !Empty(CONC->FECHA_SOL), DToC( CONC->FECHA_SOL ), '' )
 

Re: ayuda campo fecha en ado y recordset

PostPosted: Tue Jun 18, 2013 4:40 pm
by carlos vargas
les comento que lo tenia con un insert, pero algunas tablas tienen documentos en campos blob
y la diferencia en tiempo de la implmentacion entre insert y oRS:AddNew es muchismo,

muchas gracias por sus comentarios, continuare con esto.

Re: ayuda campo fecha en ado y recordset

PostPosted: Tue Jun 18, 2013 4:43 pm
by carlos vargas
gracias armando y compubrion.

los seguire molestando :-)

salu2

Re: ayuda campo fecha en ado y recordset

PostPosted: Wed Jun 19, 2013 8:53 am
by jnavas
Colega

Debes revisar el formato de fecha que estas usando con MySQL y creas una funcion que devuelva la fecha en formato caracter, en caso de fechas vacias utilizar "0000-00-000" esto depende si utiliza MySql 4 o MySQL 5

Si mySql esta configurado con fecha AAAA-MM-DD

Crear funcion llamada
DATETOMYSQL(dFecha)
/*
// Aqui haces la traducción
*/

RETURN cFecha