Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Repartir el valor de un campo en varios registros.

197 views
Skip to first unread message

Rafa

unread,
Apr 10, 2008, 4:49:58 AM4/10/08
to

Saludos al grupo.

Estoy realizando una base de datos de música importando la información
desde los metadatos de los archivos de sonido a través de un archivo de texto
que realizo con un programa.

El problema que me gustaría resolver es que en el campo [Artistas] me
pueden aparecer varios intérpretes (o ninguno) separados por la cadena " / "
y quisiera repetir el registro tantas veces como intérpretes hubiera, y que
en cada registro aparezca un único interprete en ese campo.

Hasta ahora lo único que he conseguido mediante una consulta de anexión
es aislar el primer intérprete de la siguiente manera:

IIf(Nz([Artistas],"")="","",IIf(InStr(Nz([Artistas],"")," / ")=0,Nz
([Artistas],""),Left(Nz([Artistas],""),InStr(Nz([Artistas],"")," / ")-1)))

No sé si habré enfocado bien la posible solución, pero no sé indicarle
a la consulta que separe [Artistas] en tantos intérpretes como contenga y que
anexione a la tabla tantos registros como intérpretes haya en el campo
[Artistas], conteniendo cada registro un único intérprete.

Muchas gracias por vuestro tiempo.

Ju@nk

unread,
Apr 10, 2008, 5:37:50 AM4/10/08
to
Con split obtienes una matriz con los artistas separados, solamente tienes
que recorrerla y listo

--
--
**
Colabora con el grupo, contesta a este mensaje y dinos si te sirvió o no la
respuesta dada.
Muchas gracias.

Salu2
Ju@nK [MVP Access]
http://juank.mvps.org
Correos personales o preguntas particulares en mi grupo
http://groups.google.es/group/juank
http://juankc.spaces.live.com/
http://juank.mvps.org/
www.juank.tk
www.mvp-access.com
¿Que es un MVP?, entérate en http://mvp.support.microsoft.com

Nota: El contenido de este mensaje, así como el código
fuente que pueda ir incluido en el mismo, se proporciona
«COMO ESTÁ», sin garantías de ninguna clase, y no otorga
derecho alguno. Usted asume cualquier riesgo al poner en
práctica, utilizar o ejecutar la sugerencia del presente mensaje.
**
"Rafa" <mef...@feles.net> escribió en el mensaje
news:Xns9A7C6DAB720...@207.46.248.16...

Rafa

unread,
Apr 10, 2008, 6:00:49 AM4/10/08
to
"Ju@nk" <con...@hotmail.com> escribió en news:egdSO6umIHA.944
@TK2MSFTNGP05.phx.gbl:

> Con split obtienes una matriz con los artistas separados, solamente tienes
> que recorrerla y listo
>

Muchas gracias por tu respuesta.

La verdad es que no tengo muchos conocimientos. Estoy buscando con la ayuda
de Access pero no sé cómo hacerlo. ¿Sería mucha molestia si pusieras un
ejemplo?

Gracias de nuevo.

José Mª Fueyo

unread,
Apr 10, 2008, 12:56:35 PM4/10/08
to
Hola Rafa
¿Que versión de Access usas? lo digo por qué split solo es válido en
versiones iguales o superiores a la 2000
Imagina que tu cadena, delimitada por ";", está asignada a la variable
sCadena

dim sMatriz() 'Declaro una matriz vacía, y sin dimensionar.
dim i as long 'Para recorrer la matriz
sMatriz=split(sCadena,";")

for i=0 to UBound(sCadena)
debug.ptin sMatriz(i)
next

Salu2
--
José Mª Fueyo
[MS MVP Access]


Rafa

unread,
Apr 11, 2008, 3:16:54 AM4/11/08
to
José Mª Fueyo <jmf...@NOSPAMya.com> escribió en news:508FE950-9392-476C-
A220-B76...@microsoft.com:

Hola José María.

Uso Access 2007.

Supongo que el código que indicas es para ponerlo en un módulo VBA. Pero, ¿
cómo hago referencia a él desde una consulta, o cómo puedo trasladar los
valores que devuelve a una tabla? (Perdón por mi desconocimiento).

Muchas gracias por tu interés.

Ju@nk

unread,
Apr 11, 2008, 3:31:49 AM4/11/08
to
Esto no vas a poder hacerlo desde una consulta ya que el nº de artistas es
variable, tendrás que hacerlo en el método de carga de registros a la base
de datos tal como te explicó Chema cambiando el ; por / que es tu carácter
separador

--
--
**
Colabora con el grupo, contesta a este mensaje y dinos si te sirvió o no la
respuesta dada.
Muchas gracias.

Nota: El contenido de este mensaje, así como el código
fuente que pueda ir incluido en el mismo, se proporciona
«COMO ESTÁ», sin garantías de ninguna clase, y no otorga
derecho alguno. Usted asume cualquier riesgo al poner en
práctica, utilizar o ejecutar la sugerencia del presente mensaje.
**
"Rafa" <mef...@feles.net> escribió en el mensaje

news:Xns9A7D5DE112F...@207.46.248.16...

Rafa

unread,
Apr 11, 2008, 4:08:06 AM4/11/08
to
"Ju@nk" <con...@hotmail.com> escribió en news:ujtEeY6mIHA.6032
@TK2MSFTNGP03.phx.gbl:

> Esto no vas a poder hacerlo desde una consulta ya que el nº de artistas es
> variable, tendrás que hacerlo en el método de carga de registros a la base
> de datos tal como te explicó Chema cambiando el ; por / que es tu carácter
> separador
>

Hola Ju@nk.

Uf, creo que esto es demasiado complicado para mí. He estado mirando en la
ayuda de Acces sobre los objetos Recordset, que supongo que es lo que hay que
manejar, y se me escapa de las manos.

Muchas gracias por vuestras respuestas y saludos.

Raipon

unread,
Apr 11, 2008, 11:27:50 AM4/11/08
to
Hola, hace tiempo vi un ejemplo de Itzik Ben-Gan (Sql Server MVP) en
el que descomponia una variable tipo csv en una tabla (dentro de un
procedimiento sql) :

http://groups.google.es/group/microsoft.public.es.sqlserver/browse_thread/thread/488acae128396270/252b881f6ea6a573?lnk=gst&q=itzik+SubString#252b881f6ea6a573

He adaptado la misma idea en Access para resolver varias consultas
parecidas a la tuya.
Un clásico de este foro : En primer lugar, necesitas una tabla
auxiliar, llamada 'Nums', con un único campo Entero Largo llamdo
'Num'. Este campo debe estar indexado y sin duplicados.
Una vez creada la tabla auxiliar Nums, insertas valores : desde 0
hasta por ejemplo 1000.

... y vamos a por la consulta final. Supongamos que la tabla que
manejas se llama tbl_musica y tiene los siguientes campos : Campo1,
Campo2, CampoN, Artista.
La consulta seria esta :

SELECT Campo1, Campo2, CampoN,
Mid(Artista,Num+1,Abs(InStr(Num+1,Artista & "/","/")-
Num-1))
FROM Numeros, tbl_musica
WHERE Num<=Len(Artista) And (Mid(Artista,IIf(Num=0,1,Num),1)="/" Or
Num=0);

En este caso, como caracter delimitador he empleado el carácter / ,
sin espacios, veo que en tu caso sí que empleas espacios a ambos
lados. Aunque parezca una tonteria no es nada sencillo modificar esta
sql, así que te recomiendo que elimines dichos espacios de la tabla.

Adios, un saludo.

Chea

unread,
Apr 11, 2008, 2:36:33 PM4/11/08
to
Mira que te gusta la tabla con números consecutivos. :-) A mí también.

Andaba yo últimamente pensando recopilar ejemplos al respecto, pero no
encuentro un criterio de búsqueda para que Google me encuentre todos los
casos. Sin embargo, que yo sepa, en los foros de Access que visito, es una
solución que hemos usado sobre todo tú, yo y Julián, o sea que con pedíros a
vosotros los vuestros, sólo tendría que encontrar los míos. De pas ¿Sabes de
alguna página que recopile ejemplos de uso de esta tabla?


--
Saludos

José Bengoechea Ibaceta [MS-MVP Access]
http://jbengoechea.com/
http://jbchea.net


"Raipon" <raimo...@hotmail.com> escribió en el mensaje de noticias
news:3a6ed10a-ff18-4ea4...@t12g2000prg.googlegroups.com...

julian-vlc-sp

unread,
Apr 11, 2008, 2:46:35 PM4/11/08
to
===========================================
¡Importante!: Colabora con el grupo.Contesta a este mensaje

y dinos si te sirvió o no la respuesta dada. Muchas gracias.
===========================================

Otia, pues yo lo de meter tablas sin relacionar en una consulta, lo de la
tabla auxiliar de números consecutivos, y la mezcla de ambas cosas la uso
para muchas cosas (es mi mercromina particular) pero salvo el ejemplo de mi
Web ahora mismo no sabría mencionar ningún otro.

Digo esto para ahorrarte la faena de medirme mis ejemplos, jejejeje, Ahora
bien, sabiendo de tu interés lo tendré en mente y si me encuentro alguno y
sobre todo los futuros ejemplos te los haré llegar.


SALUDOS.
Julián-Valencia-España
http://ijulian.iespana.es/


"Chea" <fo...@bengoecheaESTONO.net> escribió en el mensaje
news:C12031DE-C102-4255...@microsoft.com...

Raipon

unread,
Apr 11, 2008, 4:25:58 PM4/11/08
to

En efecto, a mí también me gustan estas técnicas, pues permiten
obtener resultados sorprendentes. En cuanto a una página donde
encontrar información, ejemplos, etc ..., pues me temo que no.
De todas formas : sí tengo unas cuantas sql guardadas con el uso de la
tabla Nums, o sea que si tiras adelante lo de la recopilación, me lo
haces saber y te lo envío.

¡¡¡¡¡ Por fin llueve !!!!!

Chea

unread,
Apr 11, 2008, 4:52:48 PM4/11/08
to
¡Estupendo!


--
Saludos

José Bengoechea Ibaceta [MS-MVP Access]
http://jbengoechea.com/
http://jbchea.net


"Raipon" <raimo...@hotmail.com> escribió en el mensaje de noticias

news:eb732041-0b5b-4fde...@a5g2000prg.googlegroups.com...

Ju@nk

unread,
Apr 12, 2008, 7:16:02 AM4/12/08
to
Yo la utilizo para fechas, con una tabla de números del 1 al 366

--
--
**
Colabora con el grupo, contesta a este mensaje y dinos si te sirvió o no la
respuesta dada.
Muchas gracias.

Nota: El contenido de este mensaje, así como el código
fuente que pueda ir incluido en el mismo, se proporciona
«COMO ESTÁ», sin garantías de ninguna clase, y no otorga
derecho alguno. Usted asume cualquier riesgo al poner en
práctica, utilizar o ejecutar la sugerencia del presente mensaje.
**

"Chea" <fo...@bengoecheaESTONO.net> escribió en el mensaje
news:C12031DE-C102-4255...@microsoft.com...

Rafa

unread,
Apr 14, 2008, 4:35:19 AM4/14/08
to
Raipon <raimo...@hotmail.com> escribió en
news:3a6ed10a-ff18-4ea4...@t12g2000prg.googlegroups.com:


Muchas gracias por tu respuesta. Lo he estado probando y a priori funciona
como quiero (va un poco lento porque la consulta resultante saca casi
60.000 registros, pero eso no es problema).

Saludos.

Raipon

unread,
Apr 14, 2008, 8:08:54 AM4/14/08
to

Me alegro. Cuantos menos registros tenga la tabla Números, mayor
rapidez de ejecución de la consulta. Así que si el campo Artista es
Texto (255), puedes trabajar con valores entres 0 y 255 para dicha
tabla.
0 new messages