DataCombo

Tres breves preguntas relacionadas con DataCombos:
1. ¿Cómo puedo bloquear el campo de entrada de datos para forzar que siempre se elija un elemento de la lista?
2. En el caso contrario, si permito entrar directamente el campo, ¿cómo puedo comprobar que se correspondan con algún elemento de la lista?
3. Tabla DC1: campos X(lista sel.), Y.
Tabla DC2: campos Y, Z(lista selección.)
¿Cómo puedo filtrar los registros del DataCombo2 con el valor de Y correspondiente a X seleccionado en DC1?

1 respuesta

Respuesta
1
Respuesta a la pregunta
1.- Puedes cambiar la propiedad del datacombo style = dbcDropDownList y el la propiedad matchentry a dblExtendedMatching, lo puedes hacer directamente desde tiempo de diseño.
2.- Puedes usar la propiedad MatchedWithList del datacombo desde código en los eventos lostfocus o validate del mismo, esa propiedad te regresa un valor igual a true cuando el texto coincide con un elemento.
3.- Create una funcion cargar_combo, en donde asignes al datacombo el recordset a usar, y usa el evento change del datacombo1 para invocar la funcion cargar_combo y realizar la consulta de acuerdo al valor que quieras.
No se si fui lo suficientemente explicito en tus dudas, contáctame si no resuelves tu problema.
Amigo, muchas gracias por tu atención.
1 y 2. OK, todo perfecto.
3. Puesto que estoy comenzando en VB he realizado varias pruebas pero sigo con problemas:
a) Obtener Y, correspondiente a POR seleccionada, de T1.
b) Generar el recordset, correspondiente a Y, de T2.
¿Me podrías concretar un poco más la solución?
Saludos cordiales
Exactamente.
En el datacombo1 trato la tabla1 y realizo una selección por el campo POR (nombre) pero me interesa obtener Y (código).
En el datacombo2 trato la tabla2, que también tiene definido el campo Y, y me interesa filtrar con el valor de Y los registros de la tabla2 que se deben mostrar en el datacombo2.
Gracias y un saludo.
No entiendo muy bien tu pregunta, lo que capto es esto:
Tienes un datacombo1, el cual dependiendo del dato seleccionado, ¿llenas al datacombo2?
Puedes hacer lo siguiente:
Cargar el datacombo1 con los datos iniciales utilizando la propiedad rowsource, ahí vinculas la tabla a usar (tabla1), utilizas la propiedad listfield, nombre del campo a mostrar en la lista del combo(x), y fijas el boundcolumn con el nombre del campo oculto o de id (y).
Una vez hecho esto capturas en el evento datacombo1_change, el id o el campo y a usar en el boundtext del datacombo1, y con ese dato puedes llenar de igual manera al datacombo2, utilizando el datacombo1. Boundtext.
Ojala este te sirva.
Creo que ya falta poco, pero todavía debo ajustar alguna cosa:
He realizado lo que me indicas en el primer párrafo respecto al DC1.
En el evento DC1_change he puesto lo siguiente:
'comprobar el valor de Y que paso
msgbox dc1.boundcolumn
'obtengo el literal Y, no su valor
'filtrar los registros T2
adodc2.recordsource="select * from T2 where Y = dc1.boundcolumn"
'pero no realiza ningún filtro
'he probado poniendo
adodc2.refresh
'y me da un error en esta sentencia
(adodc2 tiene origen registros tabla)
Muchas gracias por tu ayuda.
Esta mal tu consulta ya que debe ser así
adodc2.recordsource="select * from T2 where Y = " & dc1.boundcolumn
Ojala ya con esto quede listo
Sigue sin funcionar, me devuelve todos los registros de T2 sin realizar la selección.
Disculpa no me había dado cuenta que estas utilizando boundcolumn y debes utilizar el boundtext, haciendo lo siguiente:
adodc2.recordsource="select * from T2 where Y = " & dc1.boundtext
Hola amigo, gracias por tu rápida respuesta, y de nuevo te molesto.
En el programa ya había puesto dc1.boundtext pero no funciona. Me confundí al escribir la nota de ayuda.
Parece como si prevaleciese la definición del origen de registros que tengo en el adodc2:
tipo de comando = adcmdtable
tabla = T2
y no tuviese ningún efecto el select. Como indico anteriormente, también he probado a poner adodc2.refresh pero da un error.
He comprobado que en dc1.boundtext llega el valor correcto.
Modifica el tipo de comando a adcmdtext ya que con eso el objeto carga unicamente la tabla y todo su contenido por eso no te hace el filtro.
Si quieres porque no me envías tu código completo o una parte para checarlo porque así es mucho más difícil ayudarte, y checar cual es el error que te marca. mi correo es [email protected]

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas