Como realizar un salto de línea en una instrucción sql mediante código VBA para access

Lo que quiero es que la instrucción que pongo más abajo en el campo comentario que me ponga: comentario salto de página y después otro comentario: Ojo es Menor de edad

Ejemplo:

Si ponía en el comentario:

Tiene documentación pendiente

Al ejecutar la instrucción tendría que poner:

Tiene documentación pendiente

Ojo es Menor de edad

Si lo hago sin el vbCrLf me pone todo en una línea pero si se lo pongo me da error 3061 en tiempo de ejecución. Pocos parámetros se esperaba 1

CurrentDb.Execute "update[menores de edad] SET COMENTARIO = COMENTARIO & vbCrLf & 'OJO es Menor de edad'"

2 respuestas

Respuesta
2

Usa una variable para crear el nuevo valor y luego la usas en la SQL:

Dim newCom As String
newCom =.... & vbCrLf & "OJO es Menor de edad"
CurrentDb.Execute "UPDATE [menores de edad] SET COMENTARIO = '" & newCom & "'"

Donde pongo los puntos suspensivos tendrás que poner cómo recuperar los datos previos del campo COMENTARIO, ya sea haciendo referencia a ese campo si existe en el formulario en el que ejecutas el código, haciendo referencia a ese campo de otro formulario abierto, usando DLookup....

Yo hice la prueba usando Dlookup y funciona perfectamente.

Pero como te dice Icue, ten cuidado al actualizar, porque tal como tienes la SQL, te actualizará todos los registros con ese valor...

Vamos a ver que igual no me expliqué bien o igual me lío como una persiana: el formulario coge los datos de la consulta MENORES DE EDAD (en esa consulta son todos menores). Yo en el formulario veo los comentarios que tienen, pero aparte de esos comentarios quiero ponerle a todos "Ojo, es menor de edad" en una nueva línea para después listar todos en otro listado y que en los menores me aparezca el comentario inicial y la línea de "Ojo, es menor de edad". Todo eso quiero que me quede actualizado en la tabla [DATOS PRUEBA] en el campo COMENTARIO. Sin el salto de línea mi código funciona perfectamente. El problema está al ponerle el salto de línea.

Ejecutando esto me borra el comentario inicial. Por cierto el formulario es continuo.

Dim newCom As String
newCom = Comentario & vbCrLf & "OJO es Menor de edad"
CurrentDb.Execute "UPDATE [menores de edad] SET COMENTARIO = '" & newCom & "'"

Pues un poco sí te lías... porque si quieres actualizar la tabla DATOS PRUEBA, será esa la que tienes que usar en la SQL, y no la consulta MENORES DE EDAD... XD

No acabo de ver claro lo que tienes y quieres, pero yo te sugeriría usar un recordset para recorrer la consulta, y en cada pasada, coger el valor del campo, encadenarle el salto y el "Ojo..." como te indicamos Icue y yo, y actualizar en la tabla el registro correspondiente (imagino que estarán relacionados de alguna manera).

Algo así, a lo bruto:

Set rst=CurrentDb.Openrecordset("Consulta")
Do Until rst.EOF
  newCom=rst("Comentario") & vbCrLf & "OJO es Menor de edad"
  CurrentDb.Execute "UPDATE Tabla SET COMENTARIO = '" & newCom & "' WHERE...."
  rst.MoveNext
Loop

Si me enlazas aquí una BD de ejemplo con lo que tienes y unos datos inventados, te facilito el código exacto, si no consigues hacerlo tu mismo a partir de esas indicaciones.

¡Gracias!  La verdad es que no sé ni subir una base de datos ahí. Además tiene algunos datos privados que no me gusta publicar por sea caso.

Joer … que difícil es explicar todo esto:

La consulta es MENORES DE EDAD está hecha sobre la tabla DATOS PRUEBA para saber cuales son usuarios menores de edad a día de hoy.

Con esa consulta genero un formulario continuo llamado también MENORES DE EDAD (Ya sé que los nombres dejan mucho que desear pero están de hace tiempo y no quiero reformar toda la base de datos) por si quiero añadir algún detalle en el campo COMENTARIO.

En dicho formulario es donde añadí un botón para que generase el comentario que tuviera puesto y que añadiese el famoso "Ojo es Menor de edad" en una nueva línea del comentario. A ver si así aclaro un poco más...

Si da lío pongo todo en la misma línea. (la verdad es que pensé que era más sencillo disculpad).

Dim rst As DAO.Recordset
Set rst=Me.RecordsetClone
Application.Echo False
Do Until rst.EOF
  rst.Edit
  rst("Comentario")=rst("Comentario") & vbCrLf & "OJO es Menor de edad"
  rst.Update
  rst.MoveNext
Loop
Me.requery
Application.Echo True

Prueba eso.

Colgar aqui una BD es tan sencillo como subirla a dropbox o plataforma similar y poner aquí el enlace a ese archivo. Como te decía, no hace falta que subas la BD original, sino un ejemplo con características parecidas (en tu caso la tabla, la consulta y el formulario y un par de datos inventados)

me da error el DAO pongo en el sitio ADODB y me da error el .Edit (la base de datos está hecha desde hace tiempo).

Que tengas la referencia correcta activada, cualquiera de las siguientes (pero no las dos):

Micorsoft DAO 3.6 Object Library

Microsoft Office x.xx Access database engine Object Library

¡Gracias! Genial

Disculpa, relacionado con esto. ¿Como tengo que hacer para limpiar el campo comentario?

me.comentario.value="" me imagino pero lo que no sé es como recorrer el formulario para que me borre todos los comentarios de ese formulario continuo.

Pues exactamente igual que lo recorres para añadirle lo del "OJO...", lo recorres para dejarlo sin valor...

Respuesta
2

Por más que miro no entiendo esa instrucción. Verás, o le pones un criterio o te actualiza TODOS los registros de la tabla Menores.

1º Vamos a suponer que el formulario depende de la tabla Menores

Cuando pulso Enter

El código del evento Después de actualizar del cuadro de texto Comentario es igual al que has puesto,

Comentario = Comentario + vbCrLf + "Ojo, es menor de edad"

y la tabla Menores

2º Vamos a suponer que es un formulario Independiente o otro formulario cualquiera y tengo en la tabla Menores el nombre de uno

Y en formulario, en este caso independiente pongo el nombre del menor y en Comentario le pongo un texto

En cuanto pulso Enter, en el formulario sigue igual pero en la tabla

El código en este caso es

DoCmd.SetWarnings False
Dim s As String
s = Comentario + vbCrLf + "Ojo, es menor de edad"
DoCmd.RunSQL "update menores set Comentario = '" & s & "' where menor='" & Me.Menor & "'"

Pero como puedes ver le pongo un criterio para que sólo me actualice un registro determinado de la tabla.

Vamos a ver que igual no me expliqué bien o igual me lío como una persiana: el formulario coge los datos de la consulta MENORES DE EDAD (en esa consulta son todos menores). Yo en el formulario veo los comentarios que tienen, pero aparte de esos comentarios quiero ponerle a todos "Ojo, es menor de edad" en una nueva línea para después listar todos en otro listado y que en los menores me aparezca el comentario inicial y la línea de "Ojo, es menor de edad". Todo eso quiero que me quede actualizado en la tabla [DATOS PRUEBA] en el campo COMENTARIO. Sin el salto de línea mi código funciona perfectamente. El problema está al ponerle el salto de línea.

Por no trabajar voy a usar la tabla Clientes y se lo añadiré a Pais

Si tengo un formulario con un cuadro de texto llamado Comentario y un botón

Cuando pulso el botón

El código del botón es

DoCmd.SetWarnings False
Dim s As String
s = "" + vbCrLf + "Ojo, venden alcohol a menores"
DoCmd.RunSQL "update clientes set pais =pais & '" & s & "'"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas