Combobox y la propiedad Column en access

Quisiera saber a que se refiere la propiedad column cuando uno uitilza un Combobox. Ejemplo:

If stateCiudad = 1 And stateEmpresa = 0 Then
        Qrycountry = "SELECT DISTINCT IdPais, Pais, Ciudad FROM Empresas WHERE   Pais = '" & Me.CboxCiudad.Column(2) & "'"
        Me.CboxPais.RowSource = Qrycountry
        Me.CboxPais.Requery
End If

¿A qué se refiere con column(2)? ¿Se refiere al tercer Valor seleccionado de la tabla empresa? (¿Ciudad de tabla empresa)? ¿Y por qué esta igualado al Valor de Pais?

Se los agradezco en adelanto.

1 respuesta

Respuesta
1

La propiedad Column hace referencia a las distintas columnas que puede presentar un combobox o un listbox, aunque estén ocultas. En otras palabras, habrá tantas columnas como campos tenga la SQL de su origen de datos, independientemente de las que se muestren al desplegarlo.

Esta propiedad, es una colección, y como todas las colecciones de Access, empiezan a indexarse en 0.

En el ejemplo que pones, la SQL coge tres campos, siendo:

Column(0) la columna que muestra el IdPais (columna por defecto)

Coumn(1) la que muestra el Pais

Column(2) la que muestra la ciudad

Otra cosa que has de saber sobre los combobox y listbox, es la propiedad "Columna Dependiente", que determina qué columna es de la que se va a tomar el valor al seleccionar una opción del cuadro. Por defecto siempre será la primera (column(0))

Sólo viendo el código, no tiene sentido que País se iguale a la columna Ciudad, sino que debería igualarse a País (si te fijas se trata como texto) o mejor aún, a IdPais.

Gracias por tu rápida respuesta Sveinbjorn El Rojo, bueno era solo una parte de un código en el cual hay tres Combobox y de los cuales quiero que de igual comenzar con el Combobox País, o ciudad, o empresa. Al seleccionar uno de ellos el siguiente Combobox solo debe mostrar las opciones existentes en ese País. Por ejemplo seleccione España en el Combobox ciudad solo deben estar las ciudades de España, y lo mismo si comienzo con las ciudades, si selecciono Madrid solo debe mostrar en el Combobox País España y en el Combobox empresas solo las empresas en Madrid y España.

Aquí pongo una parte más grande del código. El programa funciona pero quisiera comprenderlo mejor.

Private Sub CboxPais_Enter()
Dim EstadoCiudad As Byte, EstadoEmpresa As Byte
If IsNull(Me.CboxCiudad) Or Me.CboxCiudad = "" Then
        EstadoCiudad = 0
Else
        EstadoCiudad = 1
End If
If IsNull(Me.CBoxEmpresa) Or Me.CBoxEmpresa = "" Then
        EstadoEmpresa = 0
Else
        EstadoEmpresa = 1
End If


If EstadoCiudad = 0 And EstadoEmpresa = 0 Then
        Me.CboxPais.RowSource = "SELECT DISTINCT IdPais, Pais FROM Empresas ORDER BY Pais;"
End If


If EstadoCiudad = 1 And EstadoEmpresa = 0 Then
        QryPais = "SELECT DISTINCT IdPais, Pais, Ciudad FROM Empresas WHERE Pais = '" & Me.CboxCiudad.Column(2) & "'"
        Me.CboxPais.RowSource = QryPais
        Me.CboxPais.Requery
End If


If EstadoCiudad = 0 And EstadoEmpresa = 1 Then
        QryPais = "SELECT DISTINCT IdPais, Pais FROM Empresas WHERE Pais = '" & Me.CBoxEmpresa.Column(1) & "'"
        Me.CboxPais.RowSource = QryPais
        Me.CboxPais.Requery
End If


If EstadoCiudad = 1 And EstadoEmpresa = 1 Then
        QryPais = "SELECT DISTINCT IdPais, Pais FROM Empresas WHERE Pais = '" & Me.CBoxEmpresa.Column(1) & "'"
        Me.CboxPais.RowSource = QryPais
        Me.CboxPais.Requery
End If

End Sub

Gracias

Sólo con el código poco te puedo decir, pero vamos a intentarlo:

Supongo que tienes un combo que se llama CboxCiudad, cuya tercera columna es la país al que pertenece esa ciudad(el nombre, valor de texto)

Supongo, que tienes otro combo CboxEmpresa, cuya segunda columna es el pais al que pertenece esa empresa (nombre, valor texto)

Con los distintos Ifs lo que haces es filtrar el origen de datos del combo CboxPais, en función de si has elegido una ciudad, una empresa o nada.

En el primer caso, si seleccionas una ciudad, sólo te devuelve el país que corresponde a esa ciudad ( la parte del WHERE Pais =...). Como País es un campo de tipo texto, has de igualarlo a un dato de tipo texto (el de la columna(2).

Lo mismo sería si seleccionas una empresa.

En el caso de no seleccionar ni ciudad ni empresa, el combo te devuelve todos los paises (la SQL que no tiene WHERE)

Si es cierto son tres Combobox, Muchas gracias ya entendí, lo que pasaba era que primero se define en variables Qryciudad, Qrypais y Qryempresa el orden a través el código SQL y luego esa variable se iguala al Combobox. Con ello al Combobox País se le atribuye el orden como en la variable Qrypais.

QryPais = "SELECT DISTINCT IdPais, Pais, Ciudad FROM Empresas WHERE Pais = '" & Me.CboxCiudad.Column(2)

Pero aqui se iguala  Pais = '" & Me.CboxCiudad.Column(2) . Pero Cboxciudad viene del  Qryciudad en el cual el orden es Ciudad , IDpais, Pais.

¿Una ultima pregunta cuando se utiliza la propiedad me.combobox.Rowsource?

Muchas gracias

Si el origen de CboxCiudad es: SELECT Ciudad, IDpais, País..., es lógico que hagas: País = '" & Me.CboxCiudad.Column(2), porque el país lo tienes en la tercera columna.

La propiedad Rowsource es la que determina el origen de los datos que muestra el combo. La usas si lo quieres modificar, como en el código que tienes. Lo normal es que después lleve esta línea: me.combobox.Requery, para asegurarte que se aplican los cambios.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas