vez utilizando una selección rellenar registros registro otro múltiple llenar lista introducido formulario especifico desplegable desde cuadro combinado codigo campo buscar automáticamente ms-access

ms-access - utilizando - llenar un campo automáticamente desde otro campo access



obtenga 65K registros solo listados en el cuadro combinado de una tabla de registros de 155K (10)

65536 es de hecho el límite para el número de elementos del cuadro combinado.

Sugiero usar un cuadro de texto con un botón de búsqueda para encontrar a alguien de la lista en lugar de usar un cuadro combinado en este caso.

Como alternativa, puede cargar los elementos dinámicamente dependientes del texto insertado.

También puede intentar "prefiltrar" su cuadro combinado a través de un valor previamente ingresado en su formulario para obtener la cantidad de registros devueltos por debajo del máximo permitido. Por ejemplo, si su tabla tenía 100.000 nombres y direcciones, le solicitaría al usuario que ingrese (antes de usar el cuadro combinado) un código postal, o un estado que se usaría para filtrar la cantidad de registros que su consulta del cuadro combinado RecordSource devuelve.

@ Steven A. Lowe y amdfan: ¿saben qué es un combobox y por qué se llama combobox ? Es un cuadro de texto combinado con un cuadro de lista. Escribe un texto y el cuadro de lista muestra las primeras entradas que coinciden con su texto.

Entonces, supongo que es una pregunta legítima.

Tengo una tabla de 155K registros. Puedo desplazar solo 65K registros en el cuadro combinado de un formulario que tiene un origen de registros con consulta o SQL, seleccionando tres campos de esa tabla. Por qué no enumera todos los registros de 155K, incluso la consulta, que estoy utilizando como origen de registros, muestra todos los registros fuera del formulario.


Entonces, ¿qué es lo que realmente está buscando es más una funcionalidad de "Autocompletar", como lo que se ve en los navegadores de Internet? Cuando dices cuadro combinado, todo el mundo muestra un menú desplegable donde el usuario selecciona un elemento; es posible que desees aclarar tu pregunta.


Otra persona de acuerdo en que esto sería una manera insensata de dar acceso al usuario a estos datos. Nadie querrá analizar más de 100k + registros a la vez. Proporcionaría una forma de filtrar los registros de antemano para que solo se presenten los que sean de interés en ese momento.


tal vez el índice del artículo es un entero de 16 bits

una mejor pregunta sería, ¿realmente espera que el usuario se desplace por 155 mil elementos en un cuadro combinado?


Como regla general, cuando se encuentra con un límite codificado en un componente general y ampliamente utilizado como un cuadro combinado, es hora de reconsiderar su enfoque. El cuadro combinado no está diseñado para su caso de uso ni es suficiente para este. Retroceda un par de pasos desde su proyecto y vuelva a evaluar su UI. Tal vez un ListView o una cuadrícula de datos filtrada sería más apropiado.


Es difícil de usar en el mundo real, combobox store 155k registros, creo que si lo cambio a botón [...] de exploración u otro control, es fácil de usar más de esta manera


No es demasiado difícil crear un cuadro de texto y una combinación de cuadro de lista donde el cuadro de lista se vuelva a consultar en el evento de cambio del cuadro de texto, reduciendo progresivamente los elementos seleccionados. Esto significa que sus usuarios aún pueden ver una lista de nombres, en lugar de adivinar, pero una lista mucho más corta y relevante.

Aquí hay un ejemplo de SQL para el RowSource de un cuadro de lista:

SELECT tp.PersonKey, tp.Surname & ", " & tp.Forename AS PersonName FROM tblPersons tp WHERE tp.Surname LIKE Forms!MyForm!txtSurname.Text ORDER BY tp.Surname, tp.Forename

Tenga en cuenta el uso de la propiedad Text del cuadro de texto, esto asegura que se usan los contenidos actuales del cuadro de texto, pero también significa que el cuadro de texto no puede ser consultado excepto cuando txtSurname tiene foco, lo cual está bien, porque la consulta solo debe hacerse en el evento de cambio de txtSurname.


Pruebe algo así como un cuadro combinado llenado de forma incremental. por ejemplo, la forma en que funciona la búsqueda de etiquetas en , o la forma en que funciona Google Suggest. 65k es lo suficientemente bueno como un límite para combobox. Un usuario normal tendrá dificultades para seleccionar desde incluso 65 cosas


El enfoque más simple es asignar el origen de código del cuadro combinado solo después de escribir algunos caracteres en él. Lo harías en el evento OnChange del cuadro combinado:

Dim strRowSource As String strRowSource = "SELECT MyID, MyField FROM MyTable" If Len(Me!cmbMyCombo.Text)=3 Then strRowSource = strRowSource & " WHERE MyField Like ''" strRowSource = strRowSource & Me!cmbMyCombo.Text strRowSource = strRowSource & "*''" Me!cmbMyCombo.RowSource = strRowSource Me!cmbMyCombo.DropDown End If

Cuando escribe en el cuadro combinado, no pasa nada hasta que haya escrito 3 caracteres (o 2 o 4 o lo que sea apropiado para filtrar su lista desplegable a una cantidad de registros utilizables por el ser humano), momento en el que se asigna la fuente ( y, si lo desea, puede desplegar la lista en ese punto, para que sea más fácil de usar). A partir de ese momento, funcionará como cualquier cuadro combinado normal.

Si necesita usar el mismo cuadro combinado para mostrar datos en registros que no se ingresaron, entonces podría hacer que el origen de Rows predeterminado del cuadro combinado sea:

PARAMETERS [Forms]![MyForm]![MyField] Text ( 255 ); SELECT MyID, MyField FROM MyTable WHERE MyField = [Forms]![MyForm]![MyField];"

Luego, en su evento OnChange, haría esto:

Dim strRowSource As String strRowSource = "PARAMETERS [Forms]![MyForm]![MyField] Long; " strRowSource = strRowSource & "SELECT MyID, MyField FROM MyTable " strRowSource = strRowSource & "WHERE MyField = [Forms]![MyForm]![MyID]" strRowSource = strRowSource & "UNION SELECT MyID, MyField FROM MyTable" If Len(Me!cmbMyCombo.Text)=3 Then strRowSource = strRowSource & " WHERE MyField Like ''" strRowSource = strRowSource & Me!cmbMyCombo.Text strRowSource = strRowSource & "*''" Me!cmbMyCombo.RowSource = strRowSource Me!cmbMyCombo.DropDown End If

Luego, en el evento OnCurrent del formulario, harías esto:

Dim strRowSource As String strRowSource = "PARAMETERS [Forms]![MyForm]![MyField] Text ( 255 ); " strRowSource = strRowSource & "SELECT MyID, MyField FROM MyTable " strRowSource = strRowSource & "WHERE MyField = [Forms]![MyForm]![MyField]" Me!cmbMyCombo.RowSource = strRowSource

Lo que esto logra es asegurarse de que todos los valores ya asignados al campo del cuadro combinado sigan apareciendo. Si tiene un RowSource en blanco, eso no funcionará, por lo que la referencia al valor actual del formulario para ese campo y lo UNION con la lista filtrada.


Si tiene un listbox masivo, entonces lo reemplazaría con una tabla (o formulario) dentro de un objeto subformulario. Los cuadros Combo y Lista tienen una limitación de 65.536 objetos y se cargan lentamente en comparación con una tabla, consulta o formulario en un subformulario. Tengo 100.000 registros en una tabla y se carga en un instante. Se desplaza muy fácilmente también, mucho más rápido que un cuadro de lista, lo que significa que no necesita reducir las opciones. Por lo general, también tengo un cuadro de búsqueda simple debajo de mi subformulario.

Es un poco más complicado porque tiene que referirse al formulario secundario desde el formulario principal y viceversa, pero es bastante fácil convertir todo su código combo / list box para subformular el código. por ejemplo, si desea buscar el registro coincidente en el formulario principal cuando hace clic en una entrada en el subformulario: -

Private Sub POLICY_NO_Click() Set Me.Parent.Recordset = CurrentDb.OpenRecordset("qryHPolicy") Me.Parent.Recordset.FindFirst "[POLICY_NO]=" & Me.POLICY_NO & "" End Sub

o establezca el subformulario en el mismo origen de registro como formulario principal:

Forms(Me_FormTo).Form.RecordSource = Me_RecSource Forms(Me_FormTo).Combo6.Form.RecordSource = Me_RecSource

Puedes hacer que tu nuevo aspecto de subformulario funcione exactamente como un cuadro de lista, por lo que definitivamente vale la pena ir cuando tienes más de 64k registros.