Reemplazar texto dentro de una cadena en tabla access

Tengo una tabla en Access, que ya tiene mas 12000 registros y quiero modificar parte de un campo de texto, siguiendo un patrón. Por ejemplo en el campo pone "Se encuentra en un castillo de España", y quiero cambiar la palabra "castillo" por "mansión".

Como quiero hacer bastantes cambios de este tipo, he hecho un formulario en el que pregunto por el texto que quiero cambiar y cual es el nuevo texto. Se trata de que recorra la tabla y cambie todas las coincidencias. En el formulario muestro los registros que están afectados, pero no se como realizar la función que me realice el cambio en la tabla.

Respuesta
1

Jesús, no es una respuesta. En estos días yo también querría cambiar un castillo por una mansión. Te imaginas que "rasca" debe hacer en un castillo.

1 respuesta más de otro experto

Respuesta
2

Tienes que usar la función Replace(). En el primer argmento pones el campo, en el segundo lo que quieres cambiar y en el tercero, por lo que lo quieres cambiar.

Puedes hacerlo de muchas formas, por ejemplo, con una consulta de actualización, que tendrá una SQL como ésta:

UPDATE TuTabla SET TuCampo= Replace([TuCampo],"castillo","mansión");

Puedes hacerlo en un botón de tu formulario usando esa misma consulta en VBA, por ejemplo si tienes dos cuadros de texto en los que pones el valor a reemplazar y el nuevo:

CurrentDb.Execute "UPDATE TuTabla SET TuCampo= Replace([TuCampo],'" & Me.txtTextoViejo & "','" & Me.txtTextoNuevo & "')"

Puedes hacerlo con un recordset, pero implica más lineas de código... (si te interesa te digo cómo hacerlo por esta vía)


Sveinbjorn El Rojo, como siempre perfecto.

Si, te agradecería que me dijeras como hacerlo con un recordset.

Muchas gracias.

Por ejemplo así:

Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("TuTabla")
Do Until rst.EOF
    rst.Edit
    rst("TuCampo") = Replace(rst("TuCampo"), Me.txtViejo, Me.txtNuevo)
    rst.Update
    rst.MoveNext
Loop
rst.Close
Set rst = Nothing
Me. Requery

Incluso podrías hacerlo más óptimo si solo abres el recordset con los registros que tienen la cadena a reemplazar, por ejemplo:

Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("SELECT TuCampo FROM TuTabla WHERE TuCampo LIKE '*" & Me.txtViejo & "'*")
Do Until rst.EOF
    rst.Edit
    rst(0) = Replace(rst(0), Me.txtViejo, Me.txtNuevo)
    rst.Update
    rst.MoveNext
Loop
rst.Close
Set rst = Nothing
Me. Requery

En este caso uso rst(0) en vez de rst("nombreCampo") porque el recordset solo tiene un campo y es el índice que le corresponde.

¡Muchas Gracias! 

Otra opción, aunque a mi me gusta menos:

DoCmd. GoToRecord,, acFirst
For i = 1 To Me.RecordsetClone.RecordCount
Me.color = Replace(Me.TuCampo, Me.txtViejo, Me.txtNuevo)
DoCmd.GoToRecord , , acNext
Next i

Y si no lo has hecho ya (porque esta semana esta web actualiza cuando quiere los avisos), te agradecería valorases mis respuestas.

Un saludo.


Buenos días. He usado la primera opción que me diste, y ahora quiero usarla para reemplazar el texto en un único registro de los que me muestra un formulario continuo.

He incluido la clausula Where, pero me da error de sintaxis. La he modificado varias veces, pero no doy con el problema. La linea es esta:

CurrentDb.Execute "UPDATE AYUNTAMIENTOS SET Tipo_Particion= Replace([Tipo_Particion],'" & Forms![AYUNTAMIENTOS_CARACTERISTICAS_PARTICION]!Particion_vieja & "','" & Forms![AYUNTAMIENTOS_CARACTERISTICAS_PARTICION]!Particion_nueva & "') WHERE Numero_escudo='" & Me.Numero_escudo & "'"

Por favor, me puedes decir donde tengo el error.

Muchas gracias.

Si número_escudo es un campo numérico, la parte final sería así :

Numero_escudo=" & Me.Numero_escudo

Si, efectivamente ese campo es numérico.

Lo he corregido pero ahora me sale el error 3340 "La consulta esta dañada". Estoy mirando en la red y estoy viendo que debe ser un problema con alguna actualización reciente de Office.

Parece que hay que eliminar la actualización KB4484119.

Voy a ver si la quito y se soluciona.

Muchas gracias.

Sólo para contarte que, después de desinstalar la actualización en cuestión, funciona perfectamente.

Muchas gracias de nuevo

Si quieres volver a esa actualización, aquí tienes cómo evitar ese problema: haces ina consulta de la tabla y luego actualizas esa consulta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas