** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - InStr en consulta de agrupamiento
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoInStr en consulta de agrupamiento

 Responder Responder
Autor
Mensaje
-Marta- Ver desplegable
Moderadora
Moderadora
Avatar

Unido: 08/Septiembre/2005
Localización: Venus
Estado: Sin conexión
Puntos: 2970
Enlace directo a este mensaje Tema: InStr en consulta de agrupamiento
    Enviado: 02/Marzo/2016 a las 01:43
Hola

después de mucho tiempo sin pasar por aquí vuelvo para plantearos un problema que me tiene Confused

tengo una tabla en la que se guardan las rutas y el nombre de las imágenes de los/las modelos de una agencia de publicidad,  el numero de imágenes de cada modelo puede estar entre 1 y 999, en cada tabla hay un numero indeterminado de modelos
  
el formato del nombre de las imágenes es Pedro_xxx, pues bien, necesito hacer una consulta que me extraiga el nombre y me agrupe por el, ingenua de mi he pensado que con Mid e InStr tendria el problema resuelto así que me he hecho esto  

listaFiltroImagenes.RowSource = "SELECT Mid([" & nombreTabla & "].[nomArchivo ],1,InStr(1,[" & nombreTabla & "].[nomArchivo],""_"")) AS nombreImagen " & _
"FROM [" & nombreTabla & "] " & _
"GROUP BY Mid([" & nombreTabla & "].[nomArchivo ],1,InStr(1,[" & nombreTabla & "].[nomArchivo],""_""))"

la agrupación la hace bien pero el resultado es "Pedro_", para quitar el guion le resto uno (-1) a la funcion Instr 

Mid([" & nombreTabla & "].[nomArchivo ],1,InStr(1,[" & nombreTabla & "].[nomArchivo],""_"")-1)"

no da ningún error simplemente no hace nada y lo curioso es que si en lugar de -1 pongo +1 funciona correctamente (pero claro este no es el resultado que busco)

bueno no me enrollo mas, alguien sabe por que me pasa esto?

un saludo

  
Arriba
OmniPresente Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 10/Febrero/2009
Localización: España
Estado: Sin conexión
Puntos: 1870
Enlace directo a este mensaje Enviado: 02/Marzo/2016 a las 09:23
¿Y si montas una consulta que te deje solamente el nombre y luego otra basada en esa que te haga la agrupación?

Saludos.
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 11692
Enlace directo a este mensaje Enviado: 02/Marzo/2016 a las 09:25
En una tabla de la misma BD, esto furula bien:

  Me.Lista.RowSource = "SELECT Left$([Nombre],InStrRev([nombre],'_')-1) AS Campo" & _
                         " FROM Usuarios GROUP BY Left$([Nombre],InStrRev([nombre],'_')-1)"


Solo tendríamos que cambiar la ruta de la tabla ....

  Me.Lista.RowSource = "SELECT Left$([Nombre],InStrRev([nombre],'_')-1) AS Campo" & _
                         " FROM [" & nombreTabla & "] GROUP BY Left$([Nombre],InStrRev([nombre],'_')-1)"


No metas la calificación completa del campo en la SELECT ni en el GROUP BY



Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
-Marta- Ver desplegable
Moderadora
Moderadora
Avatar

Unido: 08/Septiembre/2005
Localización: Venus
Estado: Sin conexión
Puntos: 2970
Enlace directo a este mensaje Enviado: 02/Marzo/2016 a las 17:38
gracias chicos

nada torito que con el -1 no (me) furula, creo que el access tiene vida propia y como sabe que las consultas se me dan de pena aprovecha para fastidiarme

lo de crear las dos consultas funciona pero se me ha ocurrido otra solución

la consulta llama a la función extraeNombre 

 Me.listaFiltroImagenes.RowSource = "SELECT extraeNombre([nomArchivo]) AS nombreImagen FROM [" & nombreTabla & "] GROUP BY extraeNombre([nomArchivo]) " 

Function extraeNombre(nombreImagen As String)
Dim a As String

a = Mid(nombreImagen, 1, InStr(1, nombreImagen, "_"))
extraeNombre = Replace(a, "_", "")
End Function

funcionar funciona pero me gustaria saber porque no lo hace con numeros negativos

un saludo

Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 11692
Enlace directo a este mensaje Enviado: 02/Marzo/2016 a las 17:53
Pues tendrá que ser algo de tu configuración .... lo que te he posteado está probado ...


¿pagas puntualmente el recibo mensual de M$? ¿no serás una morosa? ....  ein?..  Evil Smile



Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
MexMan70 Ver desplegable
Colaborador
Colaborador


Unido: 17/Julio/2007
Localización: DarkSide
Estado: Sin conexión
Puntos: 9235
Enlace directo a este mensaje Enviado: 02/Marzo/2016 a las 18:00
Hola -Martha-,!

Bueno y ya que no te acepta el -1 porque no simplemente usas la función replace ? Ejemplo:

Con tu función:
... Replace(Mid([" & nombreTabla & "].[nomArchivo],1,InStr(1,[" & nombreTabla & "].[nomArchivo],'_')),'_','') AS nombreImagen ...

Con la funcion de Mihura:
... Replace(Left$([Nombre],InStrRev([nombre],'_')),'_','') As Campo...

Yo me decantaría por la instrucción de Mihura por la simple razón de que no evalúa con dos funciones la instrucción del campo calculado en la consulta.
OneDrive: http://sdrv.ms/Vk6eJd
Arriba
-Marta- Ver desplegable
Moderadora
Moderadora
Avatar

Unido: 08/Septiembre/2005
Localización: Venus
Estado: Sin conexión
Puntos: 2970
Enlace directo a este mensaje Enviado: 02/Marzo/2016 a las 19:00
gracias Roberto, no se me habia ocurrido hacerlo asi y ahora hace lo que quiero Thumbs Up

torito, lo he probado en A8 y A10 en dos maquinas distintas y el resultado es el mismo
tu crees que esta la economia como para hacer mas rico a M$? Angry


gracias chicos me queda la cosilla de porque no se puede hacer con numeros negativos pero al menos se ha resuelto el problema

un abrazo Hug
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 11692
Enlace directo a este mensaje Enviado: 02/Marzo/2016 a las 19:18
¿Que Access usas?
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
-Marta- Ver desplegable
Moderadora
Moderadora
Avatar

Unido: 08/Septiembre/2005
Localización: Venus
Estado: Sin conexión
Puntos: 2970
Enlace directo a este mensaje Enviado: 02/Marzo/2016 a las 22:42
en casa el 2007

Arriba
VIMIPAS Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Enero/2006
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 5419
Enlace directo a este mensaje Enviado: 02/Marzo/2016 a las 23:54
Hola a todos buenas noches.

Saludos a Venus desde Marte.

En el Access 2003 (y aún funciona igual de bien que cuando lo sacaron)

Option Compare Database
Option Explicit

Private Sub paraMARTA_Click()
'Dim sql As String
'sql = "SELECT Mid([NOMARCHIVO],1,InStr(nomarchivo, " & Chr(34) & "_" & Chr(34) & ")-1) AS nombreimagen " & _
'"FROM nombreTABLA " & _
'"GROUP BY Mid([NOMARCHIVO],1,InStr(nomarchivo, " & Chr(34) & "_" & Chr(34) & ")-1)"
'Me.Lista4.RowSource = sql


'O esta de bajo, también funciona igual de bien

Me.Lista4.RowSource = "SELECT Mid([NOMARCHIVO],1,InStr(nomarchivo, " & Chr(34) & "_" & Chr(34) & ")-1) AS nombreimagen " & _
"FROM nombreTABLA " & _
"GROUP BY Mid([NOMARCHIVO],1,InStr(nomarchivo, " & Chr(34) & "_" & Chr(34) & ")-1)"


End Sub

Prueba esto Marta, tal vez las Chr(34) te saquen del apuro (Ya nos cuentas, a mi lo del Chr(34) me lo enseño el amigo Roberto. Pero veo que también enseña lo del Replace).

Saludos.

p.d.: Edito para poner la Sql pura de una Consulta:

SELECT Mid([NOMARCHIVO],1,InStr([NOMARCHIVO],"_")-1) AS NOMBREIMAGEN
FROM nombreTABLA
GROUP BY Mid([NOMARCHIVO],1,InStr([NOMARCHIVO],"_")-1);

Las cosas de Access. Es lo que hay (internamente no necesita Chr(34) )


Editado por VIMIPAS - 03/Marzo/2016 a las 00:08
Gracias
Arriba
MexMan70 Ver desplegable
Colaborador
Colaborador


Unido: 17/Julio/2007
Localización: DarkSide
Estado: Sin conexión
Puntos: 9235
Enlace directo a este mensaje Enviado: 03/Marzo/2016 a las 00:36
Otra opción más para probar:

Cambia las comillas dobles por la sencilla en el parámetro a buscar, ejemplo: 

... ""_"" ... --> ... '_' ...

Quedaría asi:
... Mid([" & nombreTabla & "].[nomArchivo],1,InStr(1,[" & nombreTabla & "].[nomArchivo],'_')-1) AS nombreImagen ...

Ya nos cuentas.
OneDrive: http://sdrv.ms/Vk6eJd
Arriba
-Marta- Ver desplegable
Moderadora
Moderadora
Avatar

Unido: 08/Septiembre/2005
Localización: Venus
Estado: Sin conexión
Puntos: 2970
Enlace directo a este mensaje Enviado: 03/Marzo/2016 a las 23:18
bueno pues resulta que mi access estaba como loco y hacia cosas raras, aparte de este problema los formularios no respetaban las propiedades de emergentes o modales y alguna otra cosita de las que me he ido dando cuenta, no se que leches se le habrá roto pero el caso es que he vuelto a reinstalarlo y de momento todo funciona correctamente

muchas gracias a todos por vuestro interes y aportes

un abrazo Hug
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable