
Publicat: 1 d'abril de 2008
Per José Bengoechea Ibaceta (Chea) - MVP Access
Entre tants enginyers, jo em considero un paleta del software. No sóc informàtic ni de professió ni de formació; sóc funcionari, la meva formació és humanística i sóc autodidacte. Tanmateix hi entenc bastant de l’ofici a base de molta experiència perquè, durant anys, Access ha estat el meu gran amor, la meva eina en el treballi la meva secretària.
Els camps Memo a Access 2007 ja no semblen tan beneits. Ara tenen un parell de característiques que els fan més interessants, entre les quals destaca el suport de format de text enriquit. Un any després del llançament de la versió 2007, això ja no és novetat, però encara podem tornar a donar-hi unes quantes voltes més per veure si ens sorprenen.

Tornem-hi amb el format de text enriquit.
TextFormat en controls de text
Aquesta, que és la novetat més vistosa, no suposa cap canvi en el tipus de dades, sinó que el mèrit se l’emporta el nou control de text que és capaç de manejar el "Rich text format". Els camps memo continuen guardant text pla, però en funció de com estigui establerta la propietat "Format de text", Textformat, mostrarà el format enriquit o les etiquetes HTML del text.
És a dir, si en el quadre de text TextFormat = acTextFormatHTMLRichText, veiem una cosa així:

En el quadre de text TextFormat = acTextFormatPlain, hi veuriem:

Com que la propietat és del quadre de text, s'aplica no només als memos de 2007, sinó també als de versions anteriors d'Access. Si usem el format enriquit amb camps d'un arxiu en format MDB des d'Access 2007, es comportarà igual que amb un ACCDB, però, si el veiem des d'una versió anterior d'Access, per exemple, 2003, es mostrarien les etiquetes HTML.
TextFormat en camps memo
Però no solament els controls de text tenen la propietat "Format de text" o TetxtFormat, també la tenen els camps memo. A simple vista, fa la impressió que això afecta d'alguna manera a les dades, però no és així, continua sent text pla, amb o sense etiquetes HTML. Bé, en certa manera sí que afecta les dades: si en un memo amb text enriquit canviem la propietat TextFormat a
acTextFormatPlain, desapareixeran de manera irreversible totes les etiquetes HTML, la qual cosa pot ser útil per fer-ho llegible en versions anteriors d'Access, però també pot carregar-se accidentalment tota la feina de presentació del text, (així que per fer experiments, més val fer-los amb gasosa, és a dir, fent còpies de seguretat abans).
Si mostrem les dades de la taulai el format de text és enriquit, es mostra com a tal i ens semblarà que s'ha guardat d'una forma especial, però si en una consulta o en un formulari, creem un camp calculat l'origen del qual sigui = MeuMemo, veurem que el contingut continua sent un arxiude text amb etiquetes HTML.
Quan afegim un camp memo a un formulari o informe en mode disseny, el quadre de text hereta la propietat TextFormat del camp, però podem canviar-li la propietat a la contrària i, si no hi ha dades, aquesta prevaldrà. Si hi ha dades, també prevaldrà la propietat però el resultat immediat sobre les dades existents segurament serà xocant, ja que cal tenir en compte que les etiquetes HTML no deixen de ser text i ens podem trobar amb etiquetes HTML que formin part del text formatat.
En resum
- La propietat Format de Text en un camp memo en el disseny de la taulaserveix per determinar com es mostren les dades en la vista Fullde Dades de la taulai per ser heretada pels controls que tinguin per origen aquest camp.
- La propietat Format de Text en un quadre de text determina la forma en la qual es mostrarà.
- No té per què coincidir la propietat TextFormat d'un control amb la de del camp memo del qual depèn, tot i així pot haver-hi resultats xocants amb dades existents.
Cerques amb text enriquit
Si en el format de text enriquit el que es guarda en realitat és text pla amb etiquetes HTML, Com fem les recerques? Doncs regular.
Des de la interfície d'usuari, en formularis i a vista full de dades de les taulesl'opció de cerca del menú funciona perfectament, fent abstracció del format, però si busquem en un recordset, ensopegarem amb les etiquetes HTML.
En un recordset, si en un camp hi tenim "MMaría", mai no ho trobarem buscant "María", perquè l'autèntic contingut és:

El mètode Application.PlainText ens serà de molta utilitat, perquè treu el format de text enriquit i ens torna una cadena sense format.
Principi de la pàgina
Juguem una mica
Busquem usos diferents
Una forma molt senzilla de mostrar "etiquetes" en text enriquit és crear-nos una taulaamb un memo amb format enriquit que editem al nostre gust. Per a l'equivalent d'una etiqueta podem usar un camp calculat amb un dLookUp() que busqui el registre que vulguem. Perquè es comporti com amb una etiqueta, només cal posar les propietats
Bloquejat a Sí i Activat a No. Substituir un msgbox pot ser una cosa gairebé tan senzilla com això o podrem donar-li tota la complexitat que vulguem.

Concatenant variables
És molt freqüent concatenar camps o variables amb cadenes de text per mostrar els resultats en un informe o formulari. Podem usar, per exemple:
= "Estimat Sr " & [PrimerCognom] & ": "
Per obtenir el resultat:
Estimat Sr. Fernández:
Però ens faltava una possibilitat senzilla de poder formatar aquest camp calculat, per exemple, posar en negreta el cognom. Com hem vist que es tracta d'etiquetes HTML, només cal afegir-les a la cadena per aconseguir el resultat:

I el resultat que obtindríem seria:
Estimat Sr. FernándezNo cal saber HTML per fer això. Podem crear-nos un formulari auxiliar amb dos quadres de text, un amb format enriquit i un altre sense, l'origen del qual serà el primer quadre. Qualsevol format que donem en el primer quadre, es reflectirà en codi en el segon. Només cal copiar i enganxar,
tenint en compte que
són les marques d'inici i finalde paràgraf i que pot ser que no les necessitem.


Tot i així continua sent pesat, de manera que haurem d'enginyar-nos una eina diferent. Són només tres passos:
- Ens creem una taulaamb un camp de Format, de text, i un altre Mostra, memo, i un formulari per editar-la en el que al camp Mostra li posem com valor predeterminat, "Mostra" i com a Format de text, "Text enriquit".

- Donem els formats que vulguem a Mostra i a Format hi posem un text descriptiu per localitzar el format més endavant.
- Creem una funció que busqui Format, llegeixi el contingut de Mostra i hi substitueixi la paraula "Mostra" pel contingut que volem formatar
Public Function FormatoHtml(Cadena As String, Format As String) As String
Dim vTmp As Variant, sTmp As String
vTmp = DLookup("Mostra", "LocalFormatos", "Format = ' " & Format & " ' ")
If Not IsNull(vTmp) Then
sTmp = vTmp
sTmp = Replace(sTmp, ", ")
sTmp = Replace(sTmp, ", ") 'Traiem les marques de paràgraf que ens sobren
sTmp = Replace(sTmp, "Mostra", Cadena) 'Canviem el text Mostra per la nostra cadena
Else
sTmp = Cadena 'Si no trobem el format, tornem la cadena sense format
End If
FormatoHtml = sTmp
End Function
Provant a la finestra tot seguit, obtindríem:

De la mateixa manera, en el primer exemple, podríem posar alguna cosa així:
="Estimat Sr. " & FormatHtml([PrimerCognom];"negreta") &: "
i el resultat seria:
Estimat Sr. Fernández:
Ara us toca jugar a vosaltres.
Evidentment, la funció és un pedaç que hauríem de millorar. Un DLookUp () en cada registre d'una consulta, baixaria notablement el rendiment; enlloc d’això podríem carregar la taulade formats en una matriu o en un objecte Dictionary on fer la cerca.
També ens podria interessar una composició més complexa obrint i tancant formats. Podriem fer servir taula i la mateixa cerca; fent un Split() del resultat usant com a separador la paraula "Mostra", tindríem en el primer element de la matriu resultant les etiquetes d'obertura, i en el segon, les de tancament.
Se li pot treure molt de partit al nou format dels camps Memo. És qüestió de jugar-hi una estona provant diferents possibilitats.