Discussion:
Fecha vacía
(demasiado antiguo para responder)
Antoñete
2006-12-21 18:46:09 UTC
Permalink
Hola a todos:

¿Cómo puedo vaciar una fecha de un campo? (Dejarla en blanco)
Guillermo Peralta
2006-12-21 21:22:21 UTC
Permalink
Antoñete;

Puedes explicarte un poco más? Digo, dar un poco más de datos de lo que
necesitas para no andar jugando al adivino :)
--
Saludos
Guillermo
--
AG-CBA-ARG
Post by Antoñete
¿Cómo puedo vaciar una fecha de un campo? (Dejarla en blanco)
Sonia
2006-12-21 22:17:11 UTC
Permalink
Hola :)
Si usas Access puedes vaciar el campo fecha con valor Null
Un saludo
Sonia
Post by Antoñete
¿Cómo puedo vaciar una fecha de un campo? (Dejarla en blanco)
Yan Cantuarias
2006-12-21 22:43:44 UTC
Permalink
update Tabla set Fecha=Null
Post by Antoñete
¿Cómo puedo vaciar una fecha de un campo? (Dejarla en blanco)
Antoñete
2006-12-22 08:24:24 UTC
Permalink
Gracias por contestar. La base de datos es Access, y trabajo con Vb6.0 SP5

Si hago rst("Fecha") = vbNull me guarda 31/12/1899 (aunque en la
aplicación se visualiza vacío, pero eso no me vale)

Si hago rst("Fecha") = vbEmpty me guarda 00:00:00

Si hago rst("Fecha") = Null aparece el error "Uso no válido de
Null"


CDate("00/00/0000") no vale y
CDate(" / / ") tampoco







----------------------------------------------------------------------------
----------------------------------------------------
Post by Antoñete
¿Cómo puedo vaciar una fecha de un campo? (Dejarla en blanco)
Guillermo Peralta
2006-12-22 17:52:08 UTC
Permalink
Podrias mostrar el codigo completo? Utilizas ADO? ¿Como está definido el
campo en la Base de Datos? (que tipo de dato) ¿Permite nulos?.
Post by Antoñete
Si hago rst("Fecha") = Null
esta debiera ser la correcta.

Sin embargo pienso que lo mejor es utilizar sentencias SQL tal como te han
comentado antes
--
Saludos
Guillermo
--
AG-CBA-ARG
Post by Antoñete
Gracias por contestar. La base de datos es Access, y trabajo con Vb6.0 SP5
Si hago rst("Fecha") = vbNull me guarda 31/12/1899 (aunque en la
aplicación se visualiza vacío, pero eso no me vale)
Si hago rst("Fecha") = vbEmpty me guarda 00:00:00
Si hago rst("Fecha") = Null aparece el error "Uso no válido de
Null"
CDate("00/00/0000") no vale y
CDate(" / / ") tampoco
----------------------------------------------------------------------------
----------------------------------------------------
Post by Antoñete
¿Cómo puedo vaciar una fecha de un campo? (Dejarla en blanco)
Armin Saez
2006-12-22 18:14:23 UTC
Permalink
Post by Guillermo Peralta
Post by Antoñete
Si hago rst("Fecha") = Null
Me imagino que seteas el null de esta forma??

set rst("Fecha") = Null

Solo por curiosidad
-----------------------------
Sin mas, saluda atte. a Uds.
Armin Saez

PD: Los tildes se han suprimido intencionalmente.
Post by Guillermo Peralta
esta debiera ser la correcta.
Sin embargo pienso que lo mejor es utilizar sentencias SQL tal como te
han comentado antes
--
Saludos
Guillermo
--
AG-CBA-ARG
Post by Antoñete
Gracias por contestar. La base de datos es Access, y trabajo con Vb6.0 SP5
Si hago rst("Fecha") = vbNull me guarda 31/12/1899 (aunque en la
aplicación se visualiza vacío, pero eso no me vale)
Si hago rst("Fecha") = vbEmpty me guarda 00:00:00
Si hago rst("Fecha") = Null aparece el error "Uso no válido de
Null"
CDate("00/00/0000") no vale y
CDate(" / / ") tampoco
----------------------------------------------------------------------------
----------------------------------------------------
Post by Antoñete
¿Cómo puedo vaciar una fecha de un campo? (Dejarla en blanco)
Guillermo Peralta
2006-12-23 01:07:48 UTC
Permalink
Hola Armin;

No, sin Set, te muestro mi codigo "completo"

Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset

rs.Open "Tabla", oCn, adOpenDynamic, adLockOptimistic, adCmdTable

rs.AddNew
rs("Numero") = 10
rs("Fecha") = Null
rs.Update
--
Saludos
Guillermo
--
AG-CBA-ARG
Post by Armin Saez
Post by Guillermo Peralta
Post by Antoñete
Si hago rst("Fecha") = Null
Me imagino que seteas el null de esta forma??
set rst("Fecha") = Null
Solo por curiosidad
-----------------------------
Sin mas, saluda atte. a Uds.
Armin Saez
PD: Los tildes se han suprimido intencionalmente.
Post by Guillermo Peralta
esta debiera ser la correcta.
Sin embargo pienso que lo mejor es utilizar sentencias SQL tal como te
han comentado antes
--
Saludos
Guillermo
--
AG-CBA-ARG
Post by Antoñete
Gracias por contestar. La base de datos es Access, y trabajo con Vb6.0 SP5
Si hago rst("Fecha") = vbNull me guarda 31/12/1899 (aunque en la
aplicación se visualiza vacío, pero eso no me vale)
Si hago rst("Fecha") = vbEmpty me guarda 00:00:00
Si hago rst("Fecha") = Null aparece el error "Uso no válido de
Null"
CDate("00/00/0000") no vale y
CDate(" / / ") tampoco
----------------------------------------------------------------------------
----------------------------------------------------
Post by Antoñete
¿Cómo puedo vaciar una fecha de un campo? (Dejarla en blanco)
Antoñete
2006-12-26 09:57:40 UTC
Permalink
No furula. Creo que es porque uso DAO. El caso es que no puedo cambiarlo.
Post by Guillermo Peralta
Hola Armin;
No, sin Set, te muestro mi codigo "completo"
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "Tabla", oCn, adOpenDynamic, adLockOptimistic, adCmdTable
rs.AddNew
rs("Numero") = 10
rs("Fecha") = Null
rs.Update
--
Saludos
Guillermo
--
AG-CBA-ARG
Post by Armin Saez
Post by Guillermo Peralta
Post by Antoñete
Si hago rst("Fecha") = Null
Me imagino que seteas el null de esta forma??
set rst("Fecha") = Null
Solo por curiosidad
-----------------------------
Sin mas, saluda atte. a Uds.
Armin Saez
PD: Los tildes se han suprimido intencionalmente.
Post by Guillermo Peralta
esta debiera ser la correcta.
Sin embargo pienso que lo mejor es utilizar sentencias SQL tal como te
han comentado antes
--
Saludos
Guillermo
--
AG-CBA-ARG
Post by Antoñete
Gracias por contestar. La base de datos es Access, y trabajo con Vb6.0 SP5
Si hago rst("Fecha") = vbNull me guarda 31/12/1899 (aunque en la
aplicación se visualiza vacío, pero eso no me vale)
Si hago rst("Fecha") = vbEmpty me guarda 00:00:00
Si hago rst("Fecha") = Null aparece el error "Uso no válido de
Null"
CDate("00/00/0000") no vale y
CDate(" / / ") tampoco
------------------------------------------------------------------------
----
Post by Guillermo Peralta
Post by Armin Saez
Post by Guillermo Peralta
Post by Antoñete
----------------------------------------------------
Post by Antoñete
¿Cómo puedo vaciar una fecha de un campo? (Dejarla en blanco)
Vinchenzo vinç
2006-12-26 11:40:01 UTC
Permalink
Post by Antoñete
No furula. Creo que es porque uso DAO. El caso es que no puedo cambiarlo.
Post by Antoñete
Gracias por contestar. La base de datos es Access, y trabajo con Vb6.0 SP5
Si hago rst("Fecha") = vbNull me guarda 31/12/1899 (aunque en la
aplicación se visualiza vacío, pero eso no me vale)
Si hago rst("Fecha") = vbEmpty me guarda 00:00:00
Si hago rst("Fecha") = Null aparece el error "Uso no válido de Null"
CDate("00/00/0000") no vale y
CDate(" / / ") tampoco
Post by Antoñete
¿Cómo puedo vaciar una fecha de un campo? (Dejarla en blanco)
La verdad es que has ido dando detalles con cuentagotas.
Quizá esté equivocado, pero yo no encuentro lógico el error que comentas en la línea que indicas.
Que «vbNull» almacene '31/12/1899' es normal, porque esa constante es un entero largo cuyo valor es '1', y lo mismo como te sucede para «vbEmpty» cuyo valor es '0'.
Pero asignar el valor 'Null' a un campo 'Fecha/Hora' que no esté "Requerido", almacena el valor 'Nulo'. Y si el campo sí estuviese establecido como "Requerido", el error sería otro y no te lo debería dar en esa línea, sino al intentar actualizar el registro a través del método '.Update'.

Digamos que en respuesta a la pregunta con la que abriste la consulta, para modificar un campo fecha estableciéndole como valor un 'Nulo':
'********
...
Set objBD = DAO.OpenDatBase(Ruta_Fichero)
objBD.Execute "UPDATE LaTabla SET CampoFecha = NULL WHERE AlgunaCondición"
...
'********
Ó si lo trabajas a través del conjunto de registros:
...
rst.Edit
rst.Fields("CampoFecha").Value = Null
rst.Update
...
'********

Yo creo que deberías dar al grupo más detalles, empezando por mostrar la declaración y las sentencias de asignación de las variables que referencían la apertura de la base y obtienen el conjunto de registros, con cual versión de DAO estás trabajando, propiedades de ese campo "Fecha", ...
--
Saludos
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
( ! ) Respuestas precedentes en Google:
http://groups.google.com/group/microsoft.public.es.vb
( i ) Temperancia en el foro:
http://support.microsoft.com/default.aspx?scid=fh;ES-ES;newsreglas
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Antoñete
2006-12-26 17:10:38 UTC
Permalink
Bien, he sintetizado y, para ir descartando cositas, el código lo he dejado
como sigue:

Public Type tpControlesFichaFirmas
firFecha As Date
End Type
Global gnCamposFichaFirma As tpControlesFichaFirmas

...

With gnCamposFichaFirma
.firFecha = ??????
End With

DETALLES: VB6, y acabo de instalarle el SP6.




-------------------------------------------------------------------------

La verdad es que has ido dando detalles con cuentagotas.
Quizá esté equivocado, pero yo no encuentro lógico el error que comentas
en la línea que indicas.
Que «vbNull» almacene '31/12/1899' es normal, porque esa constante es un
entero largo cuyo valor es '1', y lo mismo como te sucede para «vbEmpty»
cuyo valor es '0'.
Pero asignar el valor 'Null' a un campo 'Fecha/Hora' que no esté
"Requerido", almacena el valor 'Nulo'. Y si el campo sí estuviese
establecido como "Requerido", el error sería otro y no te lo debería dar en
esa línea, sino al intentar actualizar el registro a través del método
'.Update'.

Digamos que en respuesta a la pregunta con la que abriste la consulta,
para modificar un campo fecha estableciéndole como valor un 'Nulo':
'********
...
Set objBD = DAO.OpenDatBase(Ruta_Fichero)
objBD.Execute "UPDATE LaTabla SET CampoFecha = NULL WHERE
AlgunaCondición"
...
'********
Ó si lo trabajas a través del conjunto de registros:
...
rst.Edit
rst.Fields("CampoFecha").Value = Null
rst.Update
...
'********

Yo creo que deberías dar al grupo más detalles, empezando por mostrar la
declaración y las sentencias de asignación de las variables que referencían
la apertura de la base y obtienen el conjunto de registros, con cual versión
de DAO estás trabajando, propiedades de ese campo "Fecha", ...
--
Saludos
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
( ! ) Respuestas precedentes en Google:
http://groups.google.com/group/microsoft.public.es.vb
( i ) Temperancia en el foro:
http://support.microsoft.com/default.aspx?scid=fh;ES-ES;newsreglas
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Rubén Vigón
2006-12-26 17:41:17 UTC
Permalink
Hola Antoñete,

En una variable de tipo «Date» no puedes almacenar un valor nulo; lo que sí puedes hacer es almacenar NULL en un campo de tipo fecha/hora de una base de datos (Access, SQL Server, etc) independientemente de que uses DAO, RDO, ADO o ADO.NET para acceder a ella.

Las variables de tipo «Date» son, en realidad, variables numéricas -de coma flotante- de 64 bits (8 bytes) donde la parte izquierda del signo decimal representa la información de fecha y la parte derecha representa la hora (en estos 8 bytes es posible almacenar fechas desde el 1 de Enero del año 100 hasta el 31 de Diciembre de 9999). Cuando una variable «Date» contiene el valor cero, se corresponde con el Sábado 30 de Diciembre de 1899. Lo que puedes hacer en tu aplicación es, a la hora de almacenar el valor de una variable «Date» en tu base de datos, comprobar si contiene cero y almacenar NULL en este caso.

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://vigon.mvps.org
Antoñete
2006-12-26 18:32:18 UTC
Permalink
Perfecto, Rubén. Al tratar de asignar un valor nulo a la variable de fecha
me cascaba, y eso me tenía liado.

Gracias una vez más, y gracias a todos.



----------------------------------------------------------------------------
--------------------------------------------------------------------

"Rub�n Vig�n" <***@ESTOmvps.org> escribi� en el mensaje news:%***@TK2MSFTNGP03.phx.gbl...
Hola Antoñete,

En una variable de tipo «Date» no puedes almacenar un valor nulo; lo que
sí puedes hacer es almacenar NULL en un campo de tipo fecha/hora de una base
de datos (Access, SQL Server, etc) independientemente de que uses DAO, RDO,
ADO o ADO.NET para acceder a ella.

Las variables de tipo «Date» son, en realidad, variables numéricas -de
coma flotante- de 64 bits (8 bytes) donde la parte izquierda del signo
decimal representa la información de fecha y la parte derecha representa la
hora (en estos 8 bytes es posible almacenar fechas desde el 1 de Enero del
año 100 hasta el 31 de Diciembre de 9999). Cuando una variable «Date»
contiene el valor cero, se corresponde con el Sábado 30 de Diciembre de
1899. Lo que puedes hacer en tu aplicación es, a la hora de almacenar el
valor de una variable «Date» en tu base de datos, comprobar si contiene cero
y almacenar NULL en este caso.

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://vigon.mvps.org

Vinchenzo vinç
2006-12-26 18:18:26 UTC
Permalink
Post by Antoñete
Bien, he sintetizado y, para ir descartando cositas, el código lo he dejado
Public Type tpControlesFichaFirmas
firFecha As Date
End Type
Global gnCamposFichaFirma As tpControlesFichaFirmas
...
With gnCamposFichaFirma
.firFecha = ??????
End With
Hombre, ahora sí se ve dónde se genera el error "Uso no válido de Null".

Dependiendo de la información que se almacena en la base de datos, tienes -por lo menos- dos opciones:

1- Lo que ya te ha comentado Rubén:
Rs.Fields("Fecha").Value = Iif(gnCamposFichaFirma.firFecha = 0, Null, gnCamposFichaFirma.firFecha)

2- Si la base de datos deberá contemplar el almacenamiento de fechas anteriores al siglo XX (es decir, la fecha correspondiente al valor 0 será una fecha válida), entonces deberás modificar el tipo de dato de 'firFecha' declarándolo como 'Variant', así podrás asignar 'Null' a la variable (ojo que se inicializa como 'Empty') y podrás añadir/modificar/obtener directamente sobre el campo de la base con el valor del miembro del TDU.
--
Saludos
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
( ! ) Respuestas precedentes en Google:
http://groups.google.com/group/microsoft.public.es.vb
( i ) Temperancia en el foro:
http://support.microsoft.com/default.aspx?scid=fh;ES-ES;newsreglas
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Continúe leyendo en narkive:
Loading...