Visual Basic - combobox con recorset

Life is soft - evento anual de software empresarial
 
Vista:

combobox con recorset

Publicado por sandra (86 intervenciones) el 29/07/2008 04:18:49
Hola Como estan..

Tengo una tabla de Personas con los campos: apellido, nombre, documento, tipodocumento.
estos datos lo asigne a dos combos; asi:

combo1:
dim Recorset1 as adodb.recordset
set Recorset1 0 new adodb.recordset
Recorset1.open "Select apellido, nombre,documento, tipodocumento from Personas"
for i = 1 to Recorset1.recordcount
combo1.additem Recorset1("apellido") & ", " & Recorset1("nombre")
Recorset1.movenext
next i
Recorset1.close

combo 2:
dim Recorset2 as adodb.recordset
set Recorset2 0 new adodb.recordset
Recorset2.open "Select documento, tipodocumento from Personas"
for i = 1 to Recorset2.recordcount
combo1.additem Recorset2("documento") & ", " & Recorset2("tipodocumento")
Recorset2.movenext
next i
Recorset2.close

el combo2 lo tengo como invisible. El combo1 tengo visible.
Como ago para que estos combos sean relacionados, osea que si selecciono una persona quiero guardar el documento y el tipodocumento de esa persona. como puedo hacer esto???

Desde ya muchas gracias...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:combobox con recorset

Publicado por m0skit0 (62 intervenciones) el 29/07/2008 11:40:36
Suponiendo que al elemento 1 del combo1 le corresponde el elemento 1 del combo2, la siguiente función te devuelve el valor de combo2 correspondiente al valor seleccionado de combo1:

Combo2.List(Combo1.ListIndex)

Salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:combobox con recorset

Publicado por sandra (86 intervenciones) el 29/07/2008 22:08:27
hola como estas..

Si pongo asi Combo2.List(Combo1.ListIndex)
me dice que la propiedad List no es valida. Ah y esto lo puse en el clik del combo1.

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:combobox con recorset

Publicado por m0skit0 (62 intervenciones) el 30/07/2008 10:02:51
Ponlo en el Change de combo1. Si puedes poner más código sería útil, a lo mejor el problema está en otro sitio. A mí el código que te di me funciona perfectamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:combobox con recorset

Publicado por Jeronimo (49 intervenciones) el 29/07/2008 15:05:19
Hola, Sandra.
Otra alternativa, que no es del todo buena si es necesario contemplar el campo "tipodocumento", podría ser la siguiente:

Recorset1.open "Select apellido, nombre,documento, tipodocumento from Personas"

for i = 1 to Recorset1.recordcount
combo1.additem Recorset1("apellido") & ", " & Recorset1("nombre")
combo1.ItemData(combo1.NewIndex) = Recordset1("documento")
Recorset1.movenext
next i

El problema con esto es que la propiedad "ItemData" acepta solo números, por lo cual no podés asignarle el tipo de documento.

Una segunda opción sería hacer lo mismo que en el caso anterior, pero modificando lo siguiente:

combo1.additem Recorset1("apellido") & ", " & Recorset1("nombre") & space$(50) & Recordset1("tipodocumento")

Lo que hacés ahí es agregarle 50 espacios luego del nombre para que el tipo de documento (que se agrega a continuación de los espacios) no se vea en el combo.
Entonces, para saber qué tipo de documento tiene, lo recuperás de esta manera:

dim TipoDocumento as string

TipoDocumento = Trim(Mid$(combo1.Text, InStrRev(combo1.Text, Space$(50))))

Espero que te sirva.

Jerónimo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

vaya chapuza!

Publicado por chato (2 intervenciones) el 29/07/2008 15:19:04
y a eso le llamas tu programar, no se te ocurrio otra manera mas rocambolesca?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:combobox con recorset

Publicado por sandra (86 intervenciones) el 29/07/2008 22:14:46
Hola Jeronimo.

Y si te cuento que apellido, nombre obviamente son dos string y
documento, tipodocumento son datos numericos el tipodocumento contiene el id de otra tabla que si tiene los tipodedocumento.
Como quedaria entonces??

O no existe otra forma, digo porq en el combo1 muestro solamente los apellidos y el nombre pero cuando yo elijo esa persona necesito guardar el documento, tipodocumento correspondiente, por eso hice con dos combos.

saludos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:combobox con recorset

Publicado por Jeronimo (49 intervenciones) el 30/07/2008 20:24:01
Hola, Sandra.
Las dos opciones que te mencioné no son muy profesionales ni muy ortodoxas, pero funcionan. Y de esa manera podés prescindir del combo2.

Si no, podés crear una matriz de dos dimensiones para guardar los documentos y los tipos de documentos. Es decir:

Dim miMatriz(40,2) '(suponiendo que el combo1 tiene 40 elementos)

Entonces, a medida que vas cargando el combo vas cargando también la matriz. Por ejemplo:

For i = 1 to Recordset1.Recordcount
combo1.AddItem Recordset1!apellido & ", " & Recordset1!nombre
miMatriz(combo1.NewIndex, 1) = Recordset1!documento
miMatriz(combo1.NewIndex, 2) = Recordset1!tipodocumento
Recordset1.MoveNext
Next i

De esta forma, los índices del combo1 coinciden con los de la primera dimensión de la matriz. Y para recuperar el documento y el tipodocumento correspondiente al elemento seleccionado en el combo1, hacés lo siguiente:

dim nDocumento
dim tDocumento

nDocumento = miMatriz(combo1.ListIndex, 1)
tDocumento = miMatriz(combo1.ListIndex, 2)

Espero haber sido claro y que mi humilde punto de vista (no tengo mucha experiencia) te sirva.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:combobox con recorset

Publicado por m0skit0 (62 intervenciones) el 30/07/2008 22:00:34
Están bien tus soluciones, pero son un poco brutas. Un consejo: es mejor intentar evitar las matrices en VB porque son muy lentas (más aún, sí). Salu2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:combobox con recorset

Publicado por Jeronimo (49 intervenciones) el 31/07/2008 00:49:02
Gracias por tu aporte. La verdad, no me había dado cuenta de que las matrices son lentas. Antes lo hacía con dos combos o con un combo y una lista, pero pensé que eso era muy básico y cambié la metodología y empecé a usar las matricer. ¿Cómo sería la alternativa óptima para un caso como el que plantea Sandra?

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:combobox con recorset

Publicado por sandra (86 intervenciones) el 31/07/2008 04:56:37
hola Que tal...

LA SOLUCION ES:

COMBO2..ListIndex = COMBO1.ListIndex

Gracias....Igualmente...

Saludos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:combobox con recorset

Publicado por m0skit0 (62 intervenciones) el 31/07/2008 09:33:34
Que viene a ser exactamente lo mismo que te he puesto yo, sólo que no sabes usarlo. En fin, a aprender un poco:

variable = Combo2.List(Combo1.ListIndex)

A lo mejor así lo entiendes mejor. Salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:combobox con recorset

Publicado por Jeronimo (49 intervenciones) el 01/08/2008 15:30:37
Hola, Sandra.
Claro, una solución es esa. Yo sugerí las otras alternativas porque pensé que querías hacerlo de otra forma y no con dos "combos".
Perdón si entendí mal.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:combobox con recorset

Publicado por m0skit0 (62 intervenciones) el 31/07/2008 09:31:43
Puedes usar dos vectores independientes pero de 1 dimensión que son más rápidos. Si no, siempre puedes usar Visual C++ :D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:combobox con recorset

Publicado por Jeronimo (49 intervenciones) el 01/08/2008 15:31:34
La verdad, no sabía que usar dos vectores de una dimensión era más rápido que usar uno de dos dimensiones.
Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar