"Autorrellenado" en lista/combo

Recurro a ti tras una semana sin tener respuesta sobre este tema. Espero que el hecho de que vuelva a preguntarte no "te queme". No quiero tampoco aprovecharme.
Tengo una duda respecto al tema de los campos de lista/combinados. Tengo un listado de clientes de los cuales muchos empiezan por Jose. Cuando hago un formulario y asocio el campo "nombrecliente" a la lista (y limitado) de la tabla de clientes veo que puedo desplegarlos todos o a medida que escribo Jose me ofrece "José Ángel" que es el primero, pero quisiera que cuando escribiera "Jos", navegando con las teclas (u otra manera) pudiera seguir manteniendo Jos y me fuera proponiendo "Joshua/José Ángel/Jose Luis... L"
La única manera en la que lo he conseguido, es cuando introduzco "jo" me salta el error de que el elemento no pertenece a la lista (la tengo limitada a ésta) y entonces me sale el desplegable.

1 Respuesta

Respuesta
1
Vamos a ver... Aunque soy contrario a filosofar, me vas a permitir hacer una breve introducción. Cuando me apunté a esto de Todoexpertos lo hice con ánimo de dar una ayudita en aquellos problemas que yo supiera resolver. He ido más allá y, si no los sabía resolver, me he dedicado a mirar si podía encontrar alguna solución por mis "librotes" o por Internet y adaptarla al problema. Y, si finalmente no lo sé, pues simplemente contesto diciendo que no sé cómo hacerlo (lo cual me "duele" enormemente) pero es imposible saberlo "todo" en Access.
Todo este "rollete" para poder decirte que no sólo no me molesta en absoluto que me vuelvas a consultar, sino que si me tienes que consultar 100 veces más pues te animo a hacerlo. Y nunca pienso que haya algún ánimo de "aprovecharse" de nada. Lo que uno se "curra" intentando arreglar un problema es algo que uno aprende (aunque le tengan que echar una manita). Quien no se lo "curra" no lo aprende bien, probablemente, y eso, al final, no es problema mío, sino del "usuario poco esforzado" (por decirlo así) ;)
Dicho esto (que he parecido el "papá gruñón" ;) te explico. Espero que sea lo que me pedías:
- Te vas al evento de ese cuadro combinado "Al no estar en la lista" y generas el siguiente código:
---
Private Sub cboBuscaNombre_NotInList(NewData As String, Response As Integer)
    Response = acDataErrContinue
    Me.cboBuscaNombre.Dropdown
End Sub
---
Ahora, si todo va bien, podrás escribir cualquier valor y no te saltará el error que comentabas, además de que se desplegará el combo automáticamente.
Lo único que debes tener en cuenta es que ese combo, ahora, puede quedar con un valor "extraño" (por ejemplo, "jos") y que si no te das cuenta y hay algún campo que dependa de ese valor del combo, puedes encontrarte algún otro error o algún registro que quede con los datos "no correctos".
A ver si la solución propuesta es lo que querías. ;)
Un gran saludo, y suerte!
Hola de nuevo :).
Bueno, yo también entré en TodoExpertos como en sus años lo hice en Wordreference (más de 2.000 posts) con la finalidad de poder ayudar a la gente, por mi parte soy técnico de sonido, aparte de haber estudiado Filología Inglesa e intento resolver todas las dudas que puedo aunque bien es cierto que la gente pasa y bastante de siquiera finalizar las preguntas :S. Qué se le va a hacer, soy de los que como tú entiende internet y los foros como una increíble manera de aprender y enseñar de manera recíproca.
Tras esta filosofada que también me tocaba a mí... te comento:
Mi duda parte básicamente del hecho de que "me extraña" (aunque claro una cosa es lo que crea lógico y otra la realidad) que cuando yo tengo una lista de clientes y pongo un cuadro de lista/combo me proponga de mano el primer "jos" que tengo pero si dejo de escribir y quiero navegar con los cursores para escoger el 4º registro que comienza por "jos" me salta el error.
No sé si es que la tabla debería de estar ordenada alfabéticamente o si estoy haciendo algo mal a la hora de "diseñar" los cuadros, pero creo que si lo que hago es quitar ese aviso de error, lo que conseguiré a la larga es meter registros incorrectos.
Quizás queda más claro con este ejemplo con números de facturas que suelen ser de sintaxis bastante claras. Listado de registros que tendría:
NF100001
NF100002
SF100001
NF200001
NF100003
Lo que pretendo es escribir NF y me vaya mostrando sólo las que empiezan por NF y que cuando baje dos veces con el cursor en la lista pueda escoger NF100003 (y así ahorrarme el escribir todos los caracteres). Tal y como lo tengo, si escribiera NF me propondía la 0001 y si quisiera navegar, me saltaría el error, tras el cual sí me deja navegar. Que para trabajar así tenga que "comerme" un aviso de error no es que quede muy limpio, y si quito el mensaje de error, a la larga tendría que rutinariamente comprobar que no hubiera registros incorrectos.
Muchas gracias por tu ayuda
Vaya dos filósofos que se han juntado! :)
Como diría Jack el Destripador, vayamos por partes. Tú me hablas de lista/combo. En un cuadro de lista no puedes escribir el valor, sino que lo tienes que seleccionar de la lista que te sale (como mucho puedes escribir la primera letra de lo que buscas para que te salte el indicador). Por tanto, en este punto o bien hay una confusión terminológica o yo no acabo de entender qué quieres decir cuando dices "lista" :(
Por lo que respecta al combo efectivamente ahí sí que puedes escribir y te va mostrando el primer registro que coincide con lo que estás escribiendo. He hecho un par de pruebas en una mini BD que me he creado y me ha "descolocado" un poco el hecho de que a mí me salta ese error sólo en el caso de que escriba, por ejemplo, jos (que no está en la lista) y a continuación sitúe el enfoque en otro campo. Si le doy a la flechita para desplegar el combo, aunque esté escrito jos, no me salta ningún error.
Misterios aparte, te propongo hacer una cosa:
- Coges ese combo, con el formulario en vista diseño, y te vas a sus propiedades. En la pestaña datos miras la propiedad "origen de la fila" (lo más práctico es copiar lo que hay allí y pegarlo en un bloc de notas). Debería ponerte algo así (puede que te encuentres más parámetros, don't worry):
SELECT [NombreTabla].[CampoX] FROM NombreTabla;
Siendo "CampoX" el campo que recoge los nombres que quieres buscar.
- Le añadimos ahora una coletilla a esa expresión, de manera que quede igual que el original más la parte ORDER BY (ojo con el punto y coma, que debe quedar siempre al final!). Quedaría una cosa así:
SELECT [NombreTabla].[CampoX] FROM Tabla1 ORDER BY [CampoX];
- Copias esa expresión modificada (si no la has escrito directamente) y volvemos a la propiedad origen de la fila, y se la pegamos.
Así, lo que hacemos es ordenar alfabéticamente (o correlativamente, si fuera un valor numérico) los valores.
- Ahora nos vamos a la pestaña eventos y al evento "Al recibir el enfoque" le generamos el siguiente código:
---
Private Sub cboBuscaNombre_GotFocus()
    Me.cboBuscaNombre.Dropdown
End Sub
---
OK. Lo que hemos hecho es que cuando el combo reciba el enfoque se te desplegará automáticamente. Tú podrás empezar a escribir Jos y el campo te llevará directamente a todos los nombres que empiecen por Jos. Como ya estará desplegado podrás emplear ahora las flechas para seleccionar el Jos... que te interese, y, teóricamente, no debería saltarte ningún error.
Ya me dirás cosas a ver si se adapta a lo que tú querías ;)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas