Campos multivalor en Accesss 2007

Los campos multivalor son esa novedad de Access 2007 que nadie había pedido y muy pocos van a apreciar. No parecen imprescindibles.

A primera vista, son un cuadro combinado especial que puede resultar útil en ciertas ocasiones y que es sencillo de usar en cuanto encuentras la explicación de cómo hacerlo

Sólo hay que definir el campo en la tabla como cualquier otro, asignarle las propiedades de búsqueda como haríamos para usar un cuadro combinado y poner "Sí" en la propiedad adecuada ¿La encuentras?

Ahí está. "Permitir varios Valores | Sí ". Es tan discreta, tan poquita cosa que uno tiene que leerse una y otra vez toda la ayuda para encontrarla. Decididamente, Office 2007 necesita una herramienta que, en español de España, podríamos llamar "Dónde coño está..."

Bueno, la novedad no es gran cosa, pero es tan sencillo que merece la pena usarla ¿Seguro? Seguramente sí, pero no es tan sencillo.

De entrada, un campo que contiene varios valores no encaja en una base de datos relacional, y esto es algo que no afecta sólo a los puristas; por ejemplo, en cuanto mostramos la tabla para realizar una consulta, nos encontramos con algo así:

Es decir, un campo del que cuelga otro campo. Entonces es cuando hay que leerse toda la ayuda al respecto y comprender la diferencia entre el campo enlazado y el campo mostrado...

Buscando "campos multivalor" en la ayuda, encontramos suficiente información para trabajar con ellos en las consultas, incluso bastanta para los recordsets ¡Ay, los recordsets!

La ayuda es bastante clara con su uso en recordsets de DAO, pero no dice que lo no dice no hay que suponerlo. En un recordset de DAO, un campo multivalor se comporta  como un nuevo recordset, secundario, en el que podemos recorrer y añadir o quitar registros usando los métodos propios de DAO. Para crear una instancia de este recordset secundario, usamos la propiedad Value del campo multivalor. El recordset secundario tiene un sólo campo que se llama Value, cuya propiedad predeterminada es Value ¿Está claro, no?

Entonces uno piensa que se puede hacer algo así:

While Not !MiCampo.Value.EOF

msgbox MiCampo.Value.Value.Value

 

Wend

Más que nada por hacer un poco de cachondeo con el Value y, para cachondeo vale, pero en cuanto queremos usar Add o Edit.. nos empiezan a salir extraños mensajes sobre métodos que no son de VBA. Para crear una instancia del recordset secundario, es necesario dimensionar un nuevo recordset y asignarle la propiedad Value del campo multivalor; no lo dice la ayuda, pero usar ésta directamente da problemas.

Dim miRs as DAO.Recordset

Set miRs = !MiCampo.Value

While Not miRs.EOF

...

¿Tanta complicación merece la pena? Al parecer, los campos multivalor son imprescindibles para lograr una total compatibilidad con los tipos de datos de las listas de Sharepoint, y la compatibilidad con Sharepoint sí que merece la pena.

¿Pero merece la pena usarlos? Yo creo que sí, que los vamos a acabar manejando con soltura y por un motivo que me he guardado en la manga: Los campos de "Datos anexados" ("Attached") son también campos multivalor, de manera que, aunque tienen algún método y propiedad añadidos, comparten con los campos multivalor muchas características, y los campos  "Attached" sí que merecen la pena, pues, aunque sirvan para otras cosas, sobre todo solucionan los gravísimos problemas que tenía Access para almacenar imágenes.

Pero de los datos anexados hablaremos otro día ;-)

Published 21/4/2007 0:57 por Chea
Archivado en: ,
Comparte este post:

Comentarios

# re: Campos multivalor en Accesss 2007

Sunday, April 22, 2007 1:28 PM por Martí

Me parece interesante. Lo veo como una tabla relacionada pero mas sencillo y claro de crear y gestionar.

Lo que no veo tan claro es como acceder. Como introducir valores a la hora de importar y exportar registros, etc.

# re: Campos multivalor en Accesss 2007

Sunday, April 22, 2007 11:38 PM por Chea

Esa es precisamente la cuestión que, aunque es aparentemente muy sencillo, luego cuesto lo mismo que trabajar con una tabla relacionada, con la diferencia de que a eso estamos acostumbrados, pero a cómo se hace con los campos multivalor aún no.

# re: Campos multivalor en Accesss 2007

Thursday, August 30, 2007 7:45 PM por Luis

Hola: esta opción me parece muy interesante y llevo buscando el modo de hacerlo varios días. El problema es que a mí no me aparece esa opción en las propiedades de búsqueda. Os lo agradecería si pudieseis darme un motivo o solución. Muchas gracias

# re: Campos multivalor en Accesss 2007

Friday, August 31, 2007 1:00 AM por Chea

Posiblemente estés usando un formato de base de datos anterior, un mdb.

Aunque Access 2007 permite usar muchas de sus características con archivos mdb, las específicas de datos, evidentemente, sólo se puede usar en el nuevo formato, el accdb.

Después de escribir este artículo, he estado trabajando con campos multivalor y, sinceramente, si vas a usarlos en programación, son un auténtico dolor de cabeza. Muy interesantes si sólo se trata de crear una tabla y un formulario, pero de la que uno se mete en profundidades...

# re: Campos multivalor en Accesss 2007

Saturday, January 05, 2008 2:58 PM por luces

hola; bueno esto esta interesante heeeeeeeeeee

# re: Campos multivalor en Accesss 2007

Wednesday, January 16, 2008 3:01 PM por elindustrial

Todavía no he usado Access 2007 pero creo que estos campos sirven para algo que yo necesitaba en formularios y ejecutar consultas, evitando tener que poner casillas de verificación en una tabla para seleccionar las opciones que uno desea de manera independiente. Voy a probarlos!

# re: Campos multivalor en Accesss 2007

Sunday, July 05, 2009 12:40 PM por ROX

NO ME SALE ESA PROPIEDAD DE PERMITIR VARIOS VALORES

COMO PUEDO HACER QUE APAREZCA?

# re: Campos multivalor en Accesss 2007

Monday, October 05, 2009 7:50 PM por ---------

----------------

# re: Campos multivalor en Accesss 2007

Wednesday, October 27, 2010 9:48 AM por Joxemi

Muy buen trabajo Chea: Explicación sencilla y útil.

En cuanto a la utilidad de los campos multivalor, discrepo de la mayoría. Se sale fuera de norma de diseño de B. de D., y las normas están hechas para "que nos entendamos" entre todos. No sólo existe Access como base de datos, y si empezamos a utilizar atajos anárquicos, a la hora de exportar vamos a tener problemas. Me parece una implementación que es mejor no utilizar.

Sé que estos comentarios no van a gustar, pero es lo que pienso sobre el tema, y además lo argumento.

# re: Campos multivalor en Accesss 2007

Wednesday, November 24, 2010 9:57 PM por Fernando

Si si, muy prácticos para usar en formularios pero generan una información que es muy dificil de manipular en programación, y lo que es peor; a la hora de realizar un informe, cosa que uno supone como utilidad de principiante. Por ejemplo: si yo tengo un form "Hoteles" que tiene un combo enlazado a un campo multivalor como ser "Servicios", la subtabla (la que no se vé) guardará un registro con el par Hotel-Servicio por cada servicio que yo marque pero en el campo "Servicios" de la tabla hoteles se verán todos los servicios (o los ID de esos servicios si la columna dependiente guarda este dato) que marqué separados por un ";". Este campo es solo ilustrativo. Si me sirve esta información bien y si no que Dios me ayude a la hora de "hacer" un informe a partir de una tabla o un formulario. Este será todo el dato que le podré sacar al famoso campo multivalor (a menos que empiece a programar, usar recordsets en el aire y cosas por el estilo antes de llamar al informe).

En fin, son un dolor de cabeza.

Saludos.