** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Relío con string para insertarlo como tipo Fecha
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoRelío con string para insertarlo como tipo Fecha

 Responder Responder
Autor
Mensaje
paloma Ver desplegable
Habitual
Habitual


Unido: 24/Junio/2010
Estado: Sin conexión
Puntos: 139
Enlace directo a este mensaje Tema: Relío con string para insertarlo como tipo Fecha
    Enviado: 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,





Editado por paloma - 03/Junio/2024 a las 20:42
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: en línea
Puntos: 14428
Enlace directo a este mensaje Enviado: 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.

Access Aplicaciones
Tecsys.es
Arriba
paloma Ver desplegable
Habitual
Habitual


Unido: 24/Junio/2010
Estado: Sin conexión
Puntos: 139
Enlace directo a este mensaje Enviado: 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?


Editado por paloma - 03/Junio/2024 a las 21:06
Arriba
paloma Ver desplegable
Habitual
Habitual


Unido: 24/Junio/2010
Estado: Sin conexión
Puntos: 139
Enlace directo a este mensaje Enviado: 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

Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6521
Enlace directo a este mensaje Enviado: 03/Junio/2024 a las 22:02
Hola!

Descarga esta aplicación para pasar SQL a VBA y utilízala para optimizar tu código,
Un Saludo.
Arriba
paloma Ver desplegable
Habitual
Habitual


Unido: 24/Junio/2010
Estado: Sin conexión
Puntos: 139
Enlace directo a este mensaje Enviado: 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
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6521
Enlace directo a este mensaje Enviado: 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.
Arriba
paloma Ver desplegable
Habitual
Habitual


Unido: 24/Junio/2010
Estado: Sin conexión
Puntos: 139
Enlace directo a este mensaje Enviado: 03/Junio/2024 a las 22:33


Mil gracias!!!!!! Heart
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1536
Enlace directo a este mensaje Enviado: 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.
Arriba
paloma Ver desplegable
Habitual
Habitual


Unido: 24/Junio/2010
Estado: Sin conexión
Puntos: 139
Enlace directo a este mensaje Enviado: 22/Septiembre/2024 a las 15:06
Muchas gracias, pueden cerrar el hilo
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable