Rellenar un Combobox con datos de una consulta

27/05/2009 - 00:21 por Gustavo Echenique | Informe spam
Hola Foro!

Estoy tratando de rellenar un combobox de 3 columnas con los datos de una
consulta realizada a un motor de bases de datos Informix.

La consulta se realiza perfectamente, ya que lo puedo comprobar mediante el
debug, pero la carga de datos en el ComboBox me arroja un error diciendo que
necesita un objeto.
El código de llenado es el siguiente:
While Not datos.EOF
Combo1.List(nFila, 0) = CStr(datos(0).Value)
Combo1.List(nFila, 1) = datos(1).Value
Combo1.List(nFila, 2) = datos(2).Value
datos.MoveNext
nFila = nFila + 1
Wend

En donde "datos" es el recordset que contiene los datos y obviamente
"Combo1" es el ComboBox en donde quiero que se inserten los datos.

Agradecería me marquen el error para así solucionarlo.

Desde ya, agradezco infinitamente su ayuda.

Saludos!

Gustavo Echenique

Preguntas similare

Leer las respuestas

#1 Gustavo Echenique
27/05/2009 - 01:42 | Informe spam
Hola Foro!

He estado probando con la opción "OPTION EXPLICIT" y cuando llegaba a la
parte de la asignación me decía que "Combo1" no estaba declarado.
Le agregué el número de hoja para calificarlo correctamente, quedando de
esta forma:
While Not datos.EOF
Hoja1!Combo1.List(nFila, 0) = CStr(datos(0).Value)
Hoja1!Combo1.List(nFila, 1) = datos(1).Value
Hoja1!Combo1.List(nFila, 2) = datos(2).Value
datos.MoveNext
nFila = nFila + 1
Wend

Ahí desapareció el error, pero me dice que "el objeto no admite esta
propiedad o método".

Saludos!

Gustavo Echenique

"Gustavo Echenique" escribió en el mensaje
news:
Hola Foro!

Estoy tratando de rellenar un combobox de 3 columnas con los datos de una
consulta realizada a un motor de bases de datos Informix.

La consulta se realiza perfectamente, ya que lo puedo comprobar mediante
el debug, pero la carga de datos en el ComboBox me arroja un error
diciendo que necesita un objeto.
El código de llenado es el siguiente:
While Not datos.EOF
Combo1.List(nFila, 0) = CStr(datos(0).Value)
Combo1.List(nFila, 1) = datos(1).Value
Combo1.List(nFila, 2) = datos(2).Value
datos.MoveNext
nFila = nFila + 1
Wend

En donde "datos" es el recordset que contiene los datos y obviamente
"Combo1" es el ComboBox en donde quiero que se inserten los datos.

Agradecería me marquen el error para así solucionarlo.

Desde ya, agradezco infinitamente su ayuda.

Saludos!

Gustavo Echenique


Respuesta Responder a este mensaje
#2 Héctor Miguel
27/05/2009 - 04:20 | Informe spam
hola, Gustavo !

no se alcanzo a "ver" como obtienes el objeto RecordSet ni la maquinaria con la que haces la consulta (ni ?)
pero prueba llenando tu combo con una sola instruccion +/- asi: Hoja1!Combo1.Columns = datos.GetRows

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ OP __
He estado probando con la opción "OPTION EXPLICIT"
y cuando llegaba a la parte de la asignacion me decia que "Combo1" no estaba declarado.
Le agregue el numero de hoja para calificarlo correctamente, quedando de esta forma:
While Not datos.EOF
Hoja1!Combo1.List(nFila, 0) = CStr(datos(0).Value)
Hoja1!Combo1.List(nFila, 1) = datos(1).Value
Hoja1!Combo1.List(nFila, 2) = datos(2).Value
datos.MoveNext
nFila = nFila + 1
Wend
Ahi desaparecio el error, pero me dice que "el objeto no admite esta propiedad o metodo"...
Respuesta Responder a este mensaje
#3 Gustavo Echenique
27/05/2009 - 13:28 | Informe spam
Hola Héctor!
Ante todo, muchas gracias por responder, entrar en este foro es una garantía
de tu respuesta.
Tienes razón, no he puesto todo el código, y el problema puede nacer desde
otra parte. Ya probé con lo que me sugeriste y no funcionó, por eso te envío
todo el código para que puedas ver el conjunto completo

Option Explicit
Sub Form_Load()

Dim conexion As ADODB.Connection
Dim comando As ADODB.Command
Dim datos As ADODB.Recordset


Dim IndiceODBC, cPassword, sqlString00, sqlString01, sqlString02,
sqlString03, sqlfinal As String

Dim nFila As Integer

IndiceODBC = "Cemdo"

'Password de conexión al motor principal, para los otros motores,
cambiar la pass y cambiar el IndiceODBC
cPassword = "XXXX"

sqlString00 = "SELECT IdPresupuesto, Descripcion, LPAD(DAY(Fecha), 2,
'0') || '/' || LPAD(MONTH(Fecha), 2, '0') ||'/'||YEAR(Fecha) "
sqlString01 = "FROM Presupuestos "
sqlString02 = "WHERE IdStatus != 0 "
sqlString03 = "ORDER BY 1"

sqlfinal = sqlString00 + sqlString01 + sqlString02 + sqlString03

Set conexion = New ADODB.Connection
'Set comsql = New ADODB.Command
Set comando = New ADODB.Command
Set datos = New ADODB.Recordset
conexion.Open ("DSN=principal;UID=gechenique;PWD=XXXX")

datos.Open Source:=sqlfinal, ActiveConnection:=conexion,
CursorType:=adOpenDynamic, LockType:=adLockReadOnly, Options:=adCmdText

comando.ActiveConnection = conexion
comando.CommandText = sqlfinal
comando.CommandType = adCmdUnknown
comando.Execute

nFila = 0

'Debug.Print datos.Fields(0)
'Debug.Print datos.Fields(1)
'Debug.Print datos.Fields(2)


'If datos.RecordCount > 0 Then
datos.MoveFirst
While Not datos.EOF
'Hoja1!Combo1.AddItem = CStr(datos(0).Value) & " " &
datos(1).Value & " " & datos(2).Value 'Como este dato es numérico lo
convierto a string
Hoja1!Combo1.List(nFila, 0) = CStr(datos(0).Value) 'Como este
dato es numérico lo convierto a string
Hoja1!Combo1.List(nFila, 1) = datos(1).Value
Hoja1!Combo1.List(nFila, 2) = datos(2).Value
datos.MoveNext
nFila = nFila + 1
Wend
'End If

End Sub

"Héctor Miguel" escribió en el mensaje
news:
hola, Gustavo !

no se alcanzo a "ver" como obtienes el objeto RecordSet ni la maquinaria
con la que haces la consulta (ni ?)
pero prueba llenando tu combo con una sola instruccion +/- asi:
Hoja1!Combo1.Columns = datos.GetRows

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ OP __
He estado probando con la opción "OPTION EXPLICIT"
y cuando llegaba a la parte de la asignacion me decia que "Combo1" no
estaba declarado.
Le agregue el numero de hoja para calificarlo correctamente, quedando de
esta forma:
While Not datos.EOF
Hoja1!Combo1.List(nFila, 0) = CStr(datos(0).Value)
Hoja1!Combo1.List(nFila, 1) = datos(1).Value
Hoja1!Combo1.List(nFila, 2) = datos(2).Value
datos.MoveNext
nFila = nFila + 1
Wend
Ahi desaparecio el error, pero me dice que "el objeto no admite esta
propiedad o metodo"...




Respuesta Responder a este mensaje
#4 Héctor Miguel
28/05/2009 - 04:54 | Informe spam
hola, Gustavo !

Tienes razon, no he puesto todo el codigo, y el problema puede nacer desde otra parte.
Ya probe con lo que me sugeriste y no funciono, por eso te envio todo el codigo para que puedas ver el conjunto completo



si tu codigo esta en un procedimiento "Sub Form_Load()" se entiende que estas usando VB (stand-alone) y no VBA (?)
si lo anterior es correcto, faltaria saber como defines y estableces la referencia con algun "objeto excel" (p.e. createobject(...) ?)
y (probablemente) solo falta establecer una conexion con este objeto en las instrucciones del tipo: Hoja1!Combo1.List(nFila, 0) = ...

comentas (si hubiera) algun otro detalle "en el tintero" ?
saludos,
hector.

__ el codigo expuesto __
Option Explicit
Sub Form_Load()
Dim conexion As ADODB.Connection
Dim comando As ADODB.Command
Dim datos As ADODB.Recordset
Dim IndiceODBC, cPassword, sqlString00, sqlString01, sqlString02, sqlString03, sqlfinal As String
Dim nFila As Integer
IndiceODBC = "Cemdo"
'Password de conexion al motor principal, para los otros motores, cambiar la pass y cambiar el IndiceODBC
cPassword = "XXXX"
sqlString00 = "SELECT IdPresupuesto, Descripcion, LPAD(DAY(Fecha), 2, '0') || '/' || LPAD(MONTH(Fecha), 2, '0') ||'/'||YEAR(Fecha) "
sqlString01 = "FROM Presupuestos "
sqlString02 = "WHERE IdStatus != 0 "
sqlString03 = "ORDER BY 1"
sqlfinal = sqlString00 + sqlString01 + sqlString02 + sqlString03
Set conexion = New ADODB.Connection
'Set comsql = New ADODB.Command
Set comando = New ADODB.Command
Set datos = New ADODB.Recordset
conexion.Open ("DSN=principal;UID=gechenique;PWD=XXXX")
datos.Open Source:=sqlfinal, ActiveConnection:=conexion, CursorType:=adOpenDynamic, LockType:=adLockReadOnly, Options:=adCmdText
comando.ActiveConnection = conexion
comando.CommandText = sqlfinal
comando.CommandType = adCmdUnknown
comando.Execute
nFila = 0
'Debug.Print datos.Fields(0)
'Debug.Print datos.Fields(1)
'Debug.Print datos.Fields(2)
'If datos.RecordCount > 0 Then
datos.MoveFirst
While Not datos.EOF
'Hoja1!Combo1.AddItem = CStr(datos(0).Value) & " " & datos(1).Value & " " & datos(2).Value 'Como este dato es numerico lo convierto a string
Hoja1!Combo1.List(nFila, 0) = CStr(datos(0).Value) 'Como este dato es numerico lo convierto a string
Hoja1!Combo1.List(nFila, 1) = datos(1).Value
Hoja1!Combo1.List(nFila, 2) = datos(2).Value
datos.MoveNext
nFila = nFila + 1
Wend
'End If
End Sub
Respuesta Responder a este mensaje
#5 Gustavo Echenique
28/05/2009 - 13:39 | Informe spam
Hola Miguel, usé el Sub Form_Load(), pero estoy utilizando VBA, que me está
trayendo muchos quebraderos de cabeza con las funciones que en VB sí
funcionan, por lo que he visto en ejemplos.

En realidad, no queda nada más en el tintero.

Un abrazo.

Gustavo

"Héctor Miguel" escribió en el mensaje
news:OQxnt%
hola, Gustavo !

Tienes razon, no he puesto todo el codigo, y el problema puede nacer
desde otra parte.
Ya probe con lo que me sugeriste y no funciono, por eso te envio todo el
codigo para que puedas ver el conjunto completo



si tu codigo esta en un procedimiento "Sub Form_Load()" se entiende que
estas usando VB (stand-alone) y no VBA (?)
si lo anterior es correcto, faltaria saber como defines y estableces la
referencia con algun "objeto excel" (p.e. createobject(...) ?)
y (probablemente) solo falta establecer una conexion con este objeto en
las instrucciones del tipo: Hoja1!Combo1.List(nFila, 0) = ...

comentas (si hubiera) algun otro detalle "en el tintero" ?
saludos,
hector.

__ el codigo expuesto __
Option Explicit
Sub Form_Load()
Dim conexion As ADODB.Connection
Dim comando As ADODB.Command
Dim datos As ADODB.Recordset
Dim IndiceODBC, cPassword, sqlString00, sqlString01, sqlString02,
sqlString03, sqlfinal As String
Dim nFila As Integer
IndiceODBC = "Cemdo"
'Password de conexion al motor principal, para los otros motores,
cambiar la pass y cambiar el IndiceODBC
cPassword = "XXXX"
sqlString00 = "SELECT IdPresupuesto, Descripcion, LPAD(DAY(Fecha), 2,
'0') || '/' || LPAD(MONTH(Fecha), 2, '0') ||'/'||YEAR(Fecha) "
sqlString01 = "FROM Presupuestos "
sqlString02 = "WHERE IdStatus != 0 "
sqlString03 = "ORDER BY 1"
sqlfinal = sqlString00 + sqlString01 + sqlString02 + sqlString03
Set conexion = New ADODB.Connection
'Set comsql = New ADODB.Command
Set comando = New ADODB.Command
Set datos = New ADODB.Recordset
conexion.Open ("DSN=principal;UID=gechenique;PWD=XXXX")
datos.Open Source:=sqlfinal, ActiveConnection:=conexion,
CursorType:=adOpenDynamic, LockType:=adLockReadOnly, Options:=adCmdText
comando.ActiveConnection = conexion
comando.CommandText = sqlfinal
comando.CommandType = adCmdUnknown
comando.Execute
nFila = 0
'Debug.Print datos.Fields(0)
'Debug.Print datos.Fields(1)
'Debug.Print datos.Fields(2)
'If datos.RecordCount > 0 Then
datos.MoveFirst
While Not datos.EOF
'Hoja1!Combo1.AddItem = CStr(datos(0).Value) & " " &
datos(1).Value & " " & datos(2).Value 'Como este dato es numerico lo
convierto a string
Hoja1!Combo1.List(nFila, 0) = CStr(datos(0).Value) 'Como
este dato es numerico lo convierto a string
Hoja1!Combo1.List(nFila, 1) = datos(1).Value
Hoja1!Combo1.List(nFila, 2) = datos(2).Value
datos.MoveNext
nFila = nFila + 1
Wend
'End If
End Sub




Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida