Access
  • Home

¿Quién dijo memos?

  • By chea
  • Jun-24-2008
  • Sin categoría
  • 3 Comments.

     Los memos en Access 2007 ya no parecen tan memos. Ahora vienen con un par de características que les hacen más interesantes: Soportan formato de texto enriquecido y la posibilidad de sólo permitir anexar, no modificar. Un año después del lanzamiento de la versión 2007, esto ya no es novedad, pero aún cabe jugar con ellos para explorar posibilidades que quizás se escapen a primera vista.

Este artículo fue publicado en el Rincón del experto del mes de abril.

Formato de texto enriquecido

TextFormat en controles de texto

Ésta, que es la novedad más vistosa, no supone ningún cambio en el tipo de datos, sino que el mérito se lo lleva el nuevo control de texto que es capaz de manejar el "Rich text format". Los campos memos siguen guardando texto plano, pero dependiendo de cómo esté establecida la propiedad "Formato de texto", Textformat, mostrará el formato enriquecido o las etiquetas HTML de éste.

Es decir, si en el cuadro de texto TexFormat = acTextFormatHTMLRichText, podríamos ver algo así:

Muestra

Pero, si en el cuadro de texto TexFormat = acTextFormatPlain, lo que veríamos sería:

<div align=center><font size=5 style="BACKGROUND-COLOR:#FFFF00"><strong><em><u>Muestra</u></em></strong></font></div>

Como la propiedad lo es del cuadro de texto, se aplica no sólo a los memos de 2007, sino también a los de versiones anteriores de Access. Si usamos el formato enriquecido con campos de un archivo en formato MDB desde Access 2007, se comportará igual que un ACCDB, pero, si lo vemos desde una versión anterior de Access, por ejemplo, 2003, se mostrarían las etiquetas HTML.

TextFormat en campos memo

Pero no sólo los controles de texto tienen la propiedad "Formato de texto" o TextFormat, también la tienen los campos memo. A simple vista, da la impresión de que esto afecta de alguna manera a los datos, pero no parece que sea así; sigue siendo texto plano, con o sin etiquetas HTML. Bueno, en cierto modo sí que afecta a los datos: si en un memo con texto enriquecido cambiamos la propiedad TexFormat a acTextFormatPlain, desaparecerán de manera irreversible todas las etiquetas HTML, lo cual puede ser útil para hacerlo legible en versiones anteriores de Access, pero un poco peligroso si andamos jugando con datos reales.

Si mostramos los datos de la tabla y el formato de texto es enriquecido, se muestra como tal, dando la apariencia de que se ha guardado de una forma especial, pero si en una consulta o en un formulario, creamos un campo calculado cuyo origen sea = MiMemo, veremos que el contenido sigue siendo un archivo de texto con etiquetas HTML.

Al añadir un campo memo a un formulario o informe en modo diseño, el cuadro de texto hereda la propiedad TextFormat del campo, pero podemos cambiarle la propiedad a la contraria y, si no hay datos, ésta prevalecerá. Si existen datos, también prevalecerá la propiedad pero el resultado inmediato sobre los datos existentes seguramente será chocante, pues hay que tener en cuenta que las etiquetas HTML no dejan de ser texto.

Resumiendo

  • La propiedad Formato de Texto en un campo memo en el diseño de la tabla sirve para determinar cómo se muestran los datos en la vista Hoja de Datos de la tabla y para ser heredada por los controles que tengan por origen ese campo.
  • La propiedad Formato de Texto en un cuadro de texto determina la forma en que se muestra éste.
  • No tiene por qué coincidir la propiedad TextFormat de un control con la de del campo memo del que dependa, aunque con datos existentes se pueden producir resultados chocantes.

Juguemos un poco

Busquemos usos distintos:

image

 

Una forma muy sencilla de mostrar "etiquetas" en texto enriquecido es crearnos una tabla con un memo con formato enriquecido que editamos a nuestro gusto. Para el equivalente de una etiqueta podemos usar un campo calculado con un dLookUp() que busque el registro que queramos. Para que se comporte como una etiqueta, basta con poner las propiedades Bloqueado a Sí y Activado a No. Sustituir a un msgbox puede ser algo casi tan sencillo como eso o darle toda la complejidad que queramos.

Concantenando variables

Es muy frecuente concatenar campos o variables con cadenas de texto para mostrar los resultados en un informe o formulario. Podemos usar, por ejemplo:

= "Estimado Sr. " & [PrimerApellido] & ":"

Para obtener el resultado:

Estimado Sr. Fernández:

Pero nos faltaba una posibilidad sencilla de poder formatear ese campo calculado, por ejemplo, poner en negrilla el apellido. Cómo hemos visto que se trata de etiquetas HTML, basta con añadir éstas a la cadena para conseguir el resultado:

="Estimado Sr. <strong>" & [PrimerApellido] & "</strong>"

Y el resultado que obtendríamos sería:

Estimado Sr. Fernández
No hace falta saber HTML para hacer esto. Podemos crearnos un formulario auxiliar con dos cuadros de texto, uno con formato enriquecido y otro sin él cuyo origen sea el primero. Cualquier formato que demos en el primer cuadro, se reflejará en código en el segundo. Sólo hay que copiar y pegar, teniendo en cuenta que <div> y </div> son las marcas de inicio y fin de párrafo y que puede que no necesitemos.

 image  image

 

Aún así sigue siendo pesado, de manera que tendremos que ingeniarnos una herramienta distinta. Son sólo tres pasos:

 

  1. Nos creamos una tabla con un campo de Formato, de texto, y otro Muestra, memo, y un formulario para editarla en el que al campo Muestra le ponemos como valor predeterminado, "Muestra" y como Formato de texto,"Texto enriquecido".

image

  1. Le damos a Muestra los formatos que queramos y en Formato ponemos un texto descriptivo para después localizar el formato.
  2. Nos creamos una función que busque Formato, lea el contenido de Muestra y en él sustituya la palabra "Muestra" por el contenido que queremos formatear

Public Function FormatoHtml(Cadena As String, Formato As String) As String
Dim vTmp As Variant, sTmp As String
vTmp = DLookup("Muestra", "LocalFormatos", "Formato = ‘" & Formato & "’")
If Not IsNull(vTmp) Then
    sTmp = vTmp
    sTmp = Replace(sTmp, "<div>", "")
    sTmp = Replace(sTmp, "</div>", "") ‘Quitamos las marcas de párrafo que nos sobran
    sTmp = Replace(sTmp, "Muestra", Cadena) ‘Cambiamos el texto Muestra por nuestra cadena
Else
    sTmp = Cadena ‘Si no encontramos el formato, devolvemos la cadena sin formato
End If
   
FormatoHtml = sTmp
End Function

Probando en la ventana de inmediato, tendríamos:

?  FormatoHtml ("Hola mundo","negrita")
<strong>Hola mundo</strong>

? FormatoHtml(FormatoHtml("Hola mundo","negrita"),"Cursiva")
<em><strong>Hola mundo</strong></em>

De la misma manera, en el primer ejemplo, podríamos poner algo así:

="Estimado Sr. " & FormatoHtml([PrimerApellido];"negrita") & ":"

y el resultado sería:

Estimado Sr. Fernández:

Ahora le toca jugar a cada uno.

Evidentemente, la función es un apaño que tendríamos que mejorar. Un DLookUp () en cada registro de una consulta, bajaría notablemente el rendimiento; en su lugar podríamos cargar la tabla de formatos en una matriz o en un objeto Dictionary y buscar ahí.

También nos podría interesar una composición más compleja abriendo y cerrando formatos. Nos seguiría valiendo la misma tabla y la misma búsqueda; haciendo un Split() del resultado usando como separador la palabra "Muestra", tendríamos en el primer elemento de la matriz resultante las etiquetas de apertura, y en el segundo, las de cierre.

 

Comments

3 Responsesso far

  1. anonymous dice:
    22 julio, 2008 a las 2:07 am

    HOla, ¿qué tal?
    Necesito crear un cuadro combinado en un formulario para que busque un registro.
    Tengo dos campos, uno de ellos es tipo texto y el otro tipo memo con texto enriquecido.
    Cuando inserto el cuadro combinado en el formulario y salta el asistente, deberían aparecer 3 opciones:
    1-Deseo que el cuadro combinado busque los valores en una tabla o consulta
    2-Escribiré los valores que desee
    3- Buscar 1 registro en el formulario según el valor que he seleccionado en el cuadro combinado.
    Bien, pues en esta versión sólo aparecen las dos primeras opciones, la tercera no, que es la que yo necesito para que realice la búsqueda del registro que yo quiera.
    Creo que tiene que ver en el campo con tipo de datos memo y texto enriquecido, ya que he probado con la primera opción y sólo me deja añadir el campo de tipo «texto».
    Espero haberme explicado y que podáis ayudarme.
    Gracias por adelantado. Saludos.

    dirección de correo electrónico: amv7777@telefonica.net

    Responder
  2. anonymous dice:
    26 agosto, 2008 a las 2:18 am

    La versión de Access funciona bastante bien con el texto enriquecido, solo que tengo un problema con de compatibilidad con esta versión de texto enriquecido y la versión que maneja el control de texto enriquecido que viene en VB 6. Pues tengo una aplicación desarrollada en VB 6, pero al momento de utilizar el RichText de Access son incompatibles. Alguien sabe algo al respecto?? o alguna solución para lo sucesivo?

    Responder
  3. anonymous dice:
    1 septiembre, 2010 a las 6:21 am

    Que Buenos TIP´S….
    Que Forma tan CHINGONA TIENES de guiarnos paso a paso en la comprensión del ACCESS…
    MUCHAS GRACIAS POR MANTENERNOS ACTUALIZADOS Y POR EL TIEMPO QUE NOS DEDICAS para poder ofrecer soluciones mas profesionales en nuestras tareas cotidianas….
    UN MILLÓN DE GRACIAS…

    Responder

Deja un comentario Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

← Previous Post Next Post →

Categories

  • Sin categoría

Search:

Archives

  • mayo 2016
  • abril 2016
  • marzo 2016
  • enero 2016
  • diciembre 2015
  • julio 2015
  • junio 2015
  • mayo 2015
  • abril 2015
  • marzo 2015
  • febrero 2015
  • enero 2015
  • diciembre 2014
  • noviembre 2014
  • septiembre 2014
  • agosto 2014
  • junio 2014
  • mayo 2014
  • abril 2014
  • febrero 2013
  • mayo 2011
  • octubre 2010
  • enero 2010
  • junio 2009
  • mayo 2009
  • febrero 2009
  • enero 2009
  • diciembre 2008
  • noviembre 2008
  • octubre 2008
  • agosto 2008
  • junio 2008
  • mayo 2008
  • abril 2008
  • marzo 2008
  • enero 2008
  • octubre 2007
  • septiembre 2007
  • julio 2007
  • junio 2007
  • mayo 2007
  • abril 2007
About This Site

A cras tincidunt, ut tellus et. Gravida scel ipsum sed iaculis, nunc non nam. Placerat sed phase llus, purus purus elit.

Archives Widget
  • January 2010
  • December 2009
  • November 2009
  • October 2009
Categories
  • Entertainment
  • Technology
  • Sports & Recreation
  • Jobs & Lifestyle
Search

Powered by WordPress  |  Business Directory by InkThemes.

This site uses cookies: Find out more.