Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

ComboBox ke devuelva indice de BD

Estas en el tema de ComboBox ke devuelva indice de BD en el foro de Visual Basic clásico en Foros del Web. Quisiera saber si un combobox que actualmente me depliega los datos de una tabla que esta en la bd(base de dato ), me podría guardar ...
  #1 (permalink)  
Antiguo 16/01/2005, 21:02
Avatar de netorres  
Fecha de Ingreso: marzo-2004
Ubicación: 32 kms de Santiago a la costa
Mensajes: 132
Antigüedad: 20 años, 1 mes
Puntos: 0
ComboBox ke devuelva indice de BD

Quisiera saber si un combobox que actualmente me depliega los datos de una tabla que esta en la bd(base de dato ), me podría guardar o devolver el indice del dato que selecione...

Osea que al momento de hacer el :

cbotipopro.AddItem !TIPPRO_NOMBRE

con el cual solo guarda el nombre, tambien le pudiera pasar el indice o ID del campo para que cuando lo selecione me entregue automaticamente el ID del producto selecionado.

Nota: El id no esta correlativo, por eso no puedo relacionarlo con el largo o la posicion que crea el combobox naturalmente cuando se va generando.
Atentamente Nidia Torres
__________________
Contento Señor contento :-) (Sto. Padre Alberto Hurtado)
  #2 (permalink)  
Antiguo 17/01/2005, 08:14
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
Claro que lo podes hacer si en la tabla tenes el Id, esa es ahora mi pregunta tu tabla tiene un ID de Producto y el Nombre del Producto si es asi, si podes hacer lo que deseas, que al seleccionar un producto te de el ID del Producto.

nos vemos..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #3 (permalink)  
Antiguo 17/01/2005, 08:27
Avatar de netorres  
Fecha de Ingreso: marzo-2004
Ubicación: 32 kms de Santiago a la costa
Mensajes: 132
Antigüedad: 20 años, 1 mes
Puntos: 0
Si lo tengo

Tengo el ID, pero estaba viendo, sabes mis números no son correlativos.

Me explico estaba viendo en otras páginas para guiarme, pero veo que tiene que ser de esta forma empezar con un 0 (cero) y ser correlativos 1,2,3,4,5,6...

Mi Bd tiene productos con ID pero estos se muestran depediendo de alguna especificacion por ejemplo:

id producto
1 zapato
2 sandalia
3 camisa manga corta
4 camisa manga larga
5 polera blanca
6 polera roja
7 polera azul

Por ejemplo si yo elijo mostrar poleras, en el comboBox deberia desplegar
polera blanca
polera roja
polera azul

y que si yo elijo dependiendo de lo selecionado sepa si el ID de lo selecionado es (5 ó 6 ó 7)


No se si se entiende :(

Nota:

Este es el codigo

Private Function BusTipoPro()
conectbd
Dim RsetDatos As Recordset
Dim cadena_conexion As String
Dim intcontador As Integer
'sentencias sql
cadena_conexion = "select TIPPRO_NOMBRE,TIPPRO_ID from TIPO_PRODUCTO"
'cadena_conexion = "select tippro_nombre,tippro_id from tipo_producto where subtippro_id= 2 "
Set RsetDatos = VarConexion.OpenRecordset(cadena_conexion)

With RsetDatos
Do While Not .EOF
intcontador = intcontador + 1
If intcontador = .RecordCount Then
Exit Do
End If
cbotipopro.AddItem !TIPPRO_NOMBRE
.MoveNext
Loop
End With
RsetDatos.Close
End Function
__________________
Contento Señor contento :-) (Sto. Padre Alberto Hurtado)
  #4 (permalink)  
Antiguo 17/01/2005, 08:31
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
lo de los numero correlativos no importa tu ide puede ser A56 el siguiente puede ser 1 el que sigue pudeser A56 que esto funciona, pero lo que quería saber es como estaba tu base de datos..

pero lo tenes que hacer con un DATACOMBO y no con un combobox de lo contrario no te ba a funcionar un DataCombo es mucho mejor que un ComboBox.

cual es el codigo que tenes en el Form_Load?
nos vemos..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #5 (permalink)  
Antiguo 17/01/2005, 08:47
Avatar de netorres  
Fecha de Ingreso: marzo-2004
Ubicación: 32 kms de Santiago a la costa
Mensajes: 132
Antigüedad: 20 años, 1 mes
Puntos: 0
Buscare info del datacombo...

hola...
Esta es mi coneccion a la BD

Private VarWks As Workspace
Private VarConexion As Connection


Private Function conectbd()
Set VarWks = CreateWorkspace("", "", "", dbUseODBC)
Set VarConexion = VarWks.OpenConnection("coneccionodbc", , , "ODBC;DATABASE=prueba1;UID=;PWD=;DSN=coneccionodbc ")
' la coneccion esta realizada en base a la BD llama escuela
End Function

Private Sub Form_Load()
MSFlexGrid1.TextMatrix(0, 0) = "Cantidad"
MSFlexGrid1.TextMatrix(0, 1) = "Detalle"
MSFlexGrid1.TextMatrix(0, 2) = "precio"
MSFlexGrid1.ColWidth(0) = 1000
MSFlexGrid1.ColWidth(1) = 4000
MSFlexGrid1.ColWidth(2) = 1000
MSFlexGrid1.ColWidth(3) = 1000
BusTipoPro
End Sub



Como veras tengo un MSFlexGrid el cual le esty especificando algunos valores
Solo eso tengo ademas de la llamada a la funcion que hice para que me agregara los datos de la BD al combobox

Ocupo la coneccion por -> DAO 3.51
No se si necesitas algo mas... yo trataré ahora de entender un DataCombo
__________________
Contento Señor contento :-) (Sto. Padre Alberto Hurtado)
  #6 (permalink)  
Antiguo 17/01/2005, 09:35
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
ok y tu recordset donde lo tenes. asignación del RecordSet

nos vemos..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #7 (permalink)  
Antiguo 17/01/2005, 11:06
Avatar de netorres  
Fecha de Ingreso: marzo-2004
Ubicación: 32 kms de Santiago a la costa
Mensajes: 132
Antigüedad: 20 años, 1 mes
Puntos: 0
hola aqui creo que esta lo que me pides, lo del recordset, pero lo tengo dentro de la funcion en la que busco los elementos para adjuntarlos al combobox

Private Function BusTipoPro()
conectbd ' funcion de conexion
Dim RsetDatos As Recordset
Dim cadena_conexion As String
Dim intcontador As Integer
'sentencias sql
cadena_conexion = "select TIPPRO_NOMBRE,TIPPRO_ID from TIPO_PRODUCTO"
'cadena_conexion = "select tippro_nombre,tippro_id from tipo_producto where subtippro_id= 2 "
Set RsetDatos = VarConexion.OpenRecordset(cadena_conexion)

With RsetDatos
Do While Not .EOF
intcontador = intcontador + 1
If intcontador = .RecordCount Then
Exit Do
End If
cbotipopro.AddItem !TIPPRO_NOMBRE
.MoveNext
Loop
End With
RsetDatos.Close
End Function

No se si entiendes, en reliadad primera vez que programo en visual y ando media perdia si hice algo mal, o esta mal declarado???.
pero al ejecutar el codigo me funciona el comboBox, pero como te dije kiero saber como terner conocimiento del ID del producto selecionado el cual debe ser el que esta en la BD.

Este codigo es lo que hice para el combobox, como tendría que ser para un dataBox??
__________________
Contento Señor contento :-) (Sto. Padre Alberto Hurtado)
  #8 (permalink)  
Antiguo 17/01/2005, 15:34
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
bueno tendrías que agregar esto a tu codigo despues de agregar un DataCombo con el mismo nombre
Código:
Set DataCombo.RowSource = RsetDatos					
DataCombo.ListField = "TIPPRO_ID"
DataCombo.BoundColumn = "id_registro"
para que te quede algo asi..


Código:
Private Function BusTipoPro()
conectbd ' funcion de conexion
Dim RsetDatos As Recordset
Dim cadena_conexion As String
Dim intcontador As Integer
'sentencias sql
cadena_conexion = "select TIPPRO_NOMBRE,TIPPRO_ID from TIPO_PRODUCTO"
'cadena_conexion = "select tippro_nombre,tippro_id from tipo_producto where subtippro_id= 2 "
Set RsetDatos = VarConexion.OpenRecordset(cadena_conexion)
Set DataCombo.RowSource = RsetDatos					
DataCombo.ListField = "TIPPRO_ID"
DataCombo.BoundColumn = "id_registro"
RsetDatos.Close
End Function
espero te sirva el codigo.

nos vemos..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #9 (permalink)  
Antiguo 17/01/2005, 16:01
Avatar de netorres  
Fecha de Ingreso: marzo-2004
Ubicación: 32 kms de Santiago a la costa
Mensajes: 132
Antigüedad: 20 años, 1 mes
Puntos: 0
Me sale un error

Modifique el codigo he hice una nueva funcion

Public Function verdatacombo()

conectbd ' funcion de conexion
Dim RsetDatos As Recordset
Dim cadena_conexion As String
Dim intcontador As Integer
'sentencias sql
cadena_conexion = "select TIPPRO_NOMBRE,TIPPRO_ID from TIPO_PRODUCTO"
Set RsetDatos = VarConexion.OpenRecordset(cadena_conexion)
Set DataCombo.RowSource = RsetDatos
DataCombo.ListField = "TIPPRO_ID"
DataCombo.BoundColumn = "id_registro"
RsetDatos.Close
End Function


Me dice que:
"error '13' en el tiempo de ejecucion
no coinciden los tipo "
y me deja marcado lo del color amarillo...

Se me ocurrio cambiar la linea:

DataCombo.ListField = "TIPPRO_ID"
DataCombo.BoundColumn = "id_registro"

por :

DataCombo.ListField = !TIPPRO_ID
DataCombo.BoundColumn = !PRO_NOMBRE

suponiendo que tenia algo que ver con los datos que estaba ingresando pero me sale otro error.. que dice "referencia no valido o por calificar"... entonces pienso que ando muy perdida... si me puedes ayudar
__________________
Contento Señor contento :-) (Sto. Padre Alberto Hurtado)
  #10 (permalink)  
Antiguo 17/01/2005, 16:11
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
antes del
Set DataCombo.RowSource = RsetDatos

colocatambien
Set DataCombo.DataSource = RsetDatos

para que te quede

Set DataCombo.DataSource = RsetDatos
Set DataCombo.RowSource = RsetDatos

asi.. tenes

espero sea ese el error..

nos vemos..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #11 (permalink)  
Antiguo 17/01/2005, 16:25
Avatar de netorres  
Fecha de Ingreso: marzo-2004
Ubicación: 32 kms de Santiago a la costa
Mensajes: 132
Antigüedad: 20 años, 1 mes
Puntos: 0
Mira deje el codigo de esta forma:

Public Function verdatacombo()
conectbd ' funcion de conexion
Dim RsetDatos As Recordset
Dim cadena_conexion As String
Dim intcontador As Integer
cadena_conexion = "select TIPPRO_ID,TIPPRO_NOMBRE from TIPO_PRODUCTO"
Set RsetDatos = VarConexion.OpenRecordset(cadena_conexion)
Set DataCombo.DataSource = RsetDatos
Set DataCombo.RowSource = RsetDatos
DataCombo.ListField = "TIPPRO_ID"
DataCombo.BoundColumn = "id_registro"
RsetDatos.Close
End Function


Pero ahora me marca la otra linea y de dice
error 13 en el tiempo de ejecucion los tipos no coinciden
__________________
Contento Señor contento :-) (Sto. Padre Alberto Hurtado)
  #12 (permalink)  
Antiguo 18/01/2005, 07:33
Avatar de netorres  
Fecha de Ingreso: marzo-2004
Ubicación: 32 kms de Santiago a la costa
Mensajes: 132
Antigüedad: 20 años, 1 mes
Puntos: 0
Tengio otra duda he revisado que casi todos los datacombo ocupan
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset

With DataCombo1
Set .RowSource = rst
.BoundColumn = "Nombre"
' Seleccionamos el campo para que se rellene el DataCombo
.ListField = "Nombre"
.DataField = "Nombre"

' Establecer el origen de datos para que el
' control DataCombo muestre el primer registro
Set .DataSource = rst
End With


Yo tengo otro tipo de conexion Alquien me podria expliacar por que.... por lo que pienso que mi tipo de cenexion que es:



Private VarWks As Workspace
Private VarConexion As Connection


Private Function conectbd()
Set VarWks = CreateWorkspace("", "", "", dbUseODBC)
Set VarConexion = VarWks.OpenConnection("coneccionodbc", , , "ODBC;DATABASE=prueba1;UID=;PWD=;DSN=coneccionodbc ")
' la coneccion esta realizada en base a la BD llama escuela
End Function


No funcionaria bien....
__________________
Contento Señor contento :-) (Sto. Padre Alberto Hurtado)
  #13 (permalink)  
Antiguo 18/01/2005, 08:33
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
bueno colocale la librería Data Objects 2.5
y coloca este codigo en proyecto nuevo

Código:
Dim VarConexion As Connection
Dim Rs As New Recordset
Private Function verdatacombo()
Dim Dir As String
Dir = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\prueba1.mdb"
Set VarConexion = New Connection
VarConexion.Open Dir, Usr
Set Rs = New Recordset
Rs.Open "select pro_id,pro_nombre from producto", VarConexion, adOpenStatic, adLockOptimistic
Set DataCombo.RowSource = Rs
DataCombo.ListField = "pro_nombre"
DataCombo.BoundColumn = "pro_id"
End Function
Private Sub Command2_Click()
verdatacombo
End Sub
Private Sub DataCombo_Change()
MsgBox DataCombo.BoundText
End Sub
espero te sirva..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #14 (permalink)  
Antiguo 18/01/2005, 10:22
Avatar de lucasiramos  
Fecha de Ingreso: agosto-2004
Ubicación: Santa Rosa, La Pampa, Argentina
Mensajes: 1.484
Antigüedad: 19 años, 8 meses
Puntos: 13
Propiedad Itemdata

Hola ¿Has probado la propiedad itemdata? La propiedad itemdata es un vector del combo que tiene tantos elementos como tiene el combo. Entonces alli podes almacenar tu codigo. Para agregar el codigo al itemdata seria asi

Código:
 
Private Function BusTipoPro()
conectbd
Dim RsetDatos As Recordset
Dim cadena_conexion As String
Dim intcontador As Integer
'sentencias sql
cadena_conexion = "select TIPPRO_NOMBRE,TIPPRO_ID from TIPO_PRODUCTO"
'cadena_conexion = "select tippro_nombre,tippro_id from tipo_producto where subtippro_id= 2 "
Set RsetDatos = VarConexion.OpenRecordset(cadena_conexion)
 
With RsetDatos
Do While Not .EOF
	 intcontador = intcontador + 1
	 If intcontador = .RecordCount Then
		 Exit Do
	 End If
	 cbotipopro.AddItem !TIPPRO_NOMBRE 
	 cbotipopro.ItemData(cbotipopro.NewIndex) = !TIPPRO_ID 
 
	 .MoveNext
Loop
End With
 
RsetDatos.Close
End Function
Para hacer referencia a un elemento de esa matriz (me refiero al itemdata) seria asi
Código:
 
Private sub cbotipopro_Click()
	MsgBox "El codigo para el elemento " & cbotipopro.List(cbotipopro.Listindex) & " es " & cstr(cbotipopro.itemdata(cbotipopro.Listindex))
End Sub
¿Se entiende?

Saludos. Lucas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:30.