Imprimir página | Cerrar ventana

Relío con string para insertarlo como tipo Fecha

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=86943
Fecha de impresión: 26/Marzo/2026 a las 17:41


Tema: Relío con string para insertarlo como tipo Fecha
Publicado por: paloma
Asunto: Relío con string para insertarlo como tipo Fecha
Fecha de publicación: 03/Junio/2024 a las 20:35

Hola

Tengo una tabla Pedidos2 con un campo string pero que muestra la fecha sin las barras, por ejemplo 20240429, 20240430, etc. Y yo lo que quiero es insertar ese campo a otra tabla y con el campo de tipo fecha que se llama tblPedidosPRUEBA. Quiero decir, ese campo ya está definido en la tabla como Fecha, formato fecha corta. Si paso la sentencia SQL directamente del sigiente modo, me inserta en la tabla destino, los valores convertidos en fecha: 29/04/2024, 30/04/2024, etc. OK.

Pero si lo que quiero es pasar el INSERT INTO a través de vba ahí ya no me funciona, me pone: 30/12/1899...

Esta es la sentencia SQL que funciona:

INSERT INTO tblPedidosPRUEBA ( FECHA_DOCUMENTO)

SELECT 

Format(CDate(Right(Pedidos2.FECHA_DOCUMENTO,2) & "/" &  Mid(Pedidos2.FECHA_DOCUMENTO,5,2) & "/" & Left(Pedidos2.FECHA_DOCUMENTO,4)),"dd/mm/yyyy") AS FECHA_DOCUMENTO

FROM Pedidos2

Lo que le hago al string es poner los 2 últimos dígitos que representan el día al principio, el 5º y el 6º dígito a continuación y al final los 4 primeros dígitos para ordenar el valor como: dd/mm/yyyy

Y el código vba que no funciona:

strAnexo1 = "INSERT INTO tblPedidosPRUEBA ( FECHA_DOCUMENTO) SELECT" _
& " Format(CDate(Right(Pedidos2.FECHA_DOCUMENTO, 2)/Mid(Pedidos2.FECHA_DOCUMENTO, 5, 2)/Left(Pedidos2.FECHA_DOCUMENTO, 4)), ""dd/mm/yyyy"") AS FECHA_DOCUMENTO" _
& " FROM Pedidos2"
CurrentDb.Execute strAnexo1

Todo parece indicar que son las comillas las que me están dando problemas. Antes me venía conformando con pasar el string y añadir las barras de separadores pero es que sigue siendo un valor string y yo lo que quiero es que sea Fecha, que funciona en SQL pero no a través de vba. He probado sin Formato, con Formato, con Formato delante, detrás, con ValueDate, con intentar convertirlo una vez insertado, mil vueltas y tiempo que estoy perdiendo que me da una rabia... ¿pero cómo puedo solucionarlo? He hecho miles de pruebas ya

Muchas gracias,

Saludos,






Respuestas:
Publicado por: Mihura
Fecha de publicación: 03/Junio/2024 a las 20:44
Esa cadena está mal construida, además de que le faltan las # para delimitar la fecha y que esta si la formateas tiene que ir en formato yanqui, es decir mm/dd/aa.

Tiene que quedar:
    ... SELECT #" & format(fecha, "mm/dd/yy") & "# ....

Comprueba siempre en la ventana inmediato lo que le estás obteniendo en el sting que construyes.




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: paloma
Fecha de publicación: 03/Junio/2024 a las 20:55

Hola Mihura, gracias por responder, ¿te refieres a la cadena de vba verdad? ¿y cómo debería armarla?

Así me da error:
strAnexo1 = "INSERT INTO tblPedidosPRUEBA ( FECHA_DOCUMENTO) SELECT" _
& " # Format(CDate(Right(Pedidos2.FECHA_DOCUMENTO, 2)/Mid(Pedidos2.FECHA_DOCUMENTO, 5, 2)/Left(Pedidos2.FECHA_DOCUMENTO, 4)), ""mm/dd/yyyy"") # AS FECHA_DOCUMENTO" _
& " FROM Pedidos2"
CurrentDb.Execute strAnexo1

Y de esta forma me dice que se requiere un objeto:
strAnexo1 = "INSERT INTO tblPedidosPRUEBA ( FECHA_DOCUMENTO) SELECT" _
& " #" & Format(CDate(Right(Pedidos2.FECHA_DOCUMENTO, 2) & "/" & Mid(Pedidos2.FECHA_DOCUMENTO, 5, 2) & "/" & Left(Pedidos2.FECHA_DOCUMENTO, 4)), "dd/mm/yyyy") & " # AS FECHA_DOCUMENTO" _
& " FROM Pedidos2"
CurrentDb.Execute strAnexo1


Del formato yanki que dices, pero en SQL, osea en la ventana de inmediato como dices, no necesito ponerla en mm/dd/yyyy ¿solo afecta a vba entonces no?


Publicado por: paloma
Fecha de publicación: 03/Junio/2024 a las 21:08


Y aquí me dice que no coinciden los tipos:

strAnexo1 = "INSERT INTO tblPedidosPRUEBA (FECHA_DOCUMENTO) SELECT #" & Format(CDate(Right("Pedidos2.FECHA_DOCUMENTO", 2) & "/" & Mid("Pedidos2.FECHA_DOCUMENTO", 5, 2) & "/" & Left("Pedidos2.FECHA_DOCUMENTO", 4)), "dd/mm/yyyy") & " # AS FECHA_DOCUMENTO FROM Pedidos2"
CurrentDb.Execute strAnexo1



Publicado por: mounir
Fecha de publicación: 03/Junio/2024 a las 22:02
Hola!

Descarga http://www.mvp-access.com/foro/sql-a-vba_topic85706.html" rel="nofollow - esta aplicación para pasar SQL a VBA y utilízala para optimizar tu código,

-------------
Un Saludo.


Publicado por: paloma
Fecha de publicación: 03/Junio/2024 a las 22:25


LLORO de por Dios, de por Dios. Pero qué maravilla es esa!! Mil gracias mounir, esto es una joya. Voy a guardar ese formulario como oro en paño Approve MIS DIESES!!! 

strSql = "INSERT INTO tblPedidosPRUEBA ( FECHA_DOCUMENTO) SELECT Format(CDate(Right(Pedidos2.FECHA_DOCUMENTO,2) & ""/"" &  Mid(Pedidos2.FECHA_DOCUMENTO,5,2) & ""/"" & Left(Pedidos2.FECHA_DOCUMENTO,4)),""dd/mm/yyyy"") AS FECHA_DOCUMENTO FROM Pedidos2"
CurrentDb.Execute strSql

Solo una dudilla. Yo aquí sigo poniendo el formato tipo No yanki pero me devuelve las fechas bien ¿es porque no pongo las almohadillas?  

Saludicos


Publicado por: mounir
Fecha de publicación: 03/Junio/2024 a las 22:31
Hola!

Pues me pillas!. Ni idea la verdad.

Haz las pruebas y mira lo que te sale.

Me alegro de que te haya servido.

-------------
Un Saludo.


Publicado por: paloma
Fecha de publicación: 03/Junio/2024 a las 22:33


Mil gracias!!!!!! Heart


Publicado por: pitxiku
Fecha de publicación: 09/Junio/2024 a las 00:00
Publicado originalmente por paloma paloma escribió:

Solo una dudilla. Yo aquí sigo poniendo el formato tipo No yanki pero me devuelve las fechas bien ¿es porque no pongo las almohadillas?  

Es más posible porque la fecha que estés insertando sea del tipo "30 de mayo". Es decir, 30/05/2024. Como no existe mes 30, Access entiende que está mal puesto el formato. Otra cosa será cuando insertes el 8 de junio, por ejemplo (08/06/2024): Access ahí sí que puede entender que es el 6 de agosto. Por eso la importancia de las almohadillas y los formatos.


Publicado por: paloma
Fecha de publicación: 22/Septiembre/2024 a las 15:06
Muchas gracias, pueden cerrar el hilo



Imprimir página | Cerrar ventana