Visual Basic para Aplicaciones - Recuperar recordset

Life is soft - evento anual de software empresarial
 
Vista:

Recuperar recordset

Publicado por Pablo (77 intervenciones) el 02/11/2013 10:30:04
Tengo un problema de concepto.

Me conecto mediante ADO a la tabla clientes de una DB y le paso los registros a un cuadro combinado o combobox.

Hasta ahí, bien.

Como tengo clientes con el mismo nombre, aunque distinta población, lo que he hecho ha sido mostrar en el combo nombre y población.

Algo así:

rs![Customer Name] & " - " & rs![Location]

Y bien, en el combo sale lo que yo quiero.

Ahora el problema lo tengo al revés, cuando el usuario elige una pareja Cliente - Localidad a mi lo que me interesa es recuperar el resto de la información del recordset: Número de cliente, dirección, localidad, provincia, persona de contacto, etc. datos que están en el recordset porque lo que le digo a la consulta es SELECT * FROM clientes ORDER BY [Customer Name] ASC.

Si recupero el valor que ha seleccionado el usuario con Me.Combobox1.Value lo que me da es Cliente - Localidad.

¿Cómo puedo obtener los otros valores del recordset que ha seleccionado el usuario?

Al menos en Access está el truco de seleccionar dos columnas diciendo que una sea de ancho cero y que el usuario solo vea el nombre del cliente.

Gracias de antemano por vuestros comentarios.
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

Recuperar recordset [Solucionado]

Publicado por Pablo (77 intervenciones) el 02/11/2013 21:19:59
Bueno, al final he encontrado un camino alternativo, que no sé si será lo mas elegante, pero me sirve:

He convertido el recordset en un array, aunque técnicamente el recordset ya lo es.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Private Sub userForm_initialize()
'Declaración de variables.
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim cs, sPath As String
    Dim sql, arr() As String
    Dim i, z As Single
 
    'Este es el path de la base de datos. En realidad puede estar en cualquier sitio.
    sPath = ThisWorkbook.Path & "\DB\db.accdb"
    cs = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sPath & ";Persist Security Info=False;"
 
    Set cn = New ADODB.Connection
    cn.Open cs
 
    Set rs = New ADODB.Recordset
    With rs
        .CursorLocation = adUseClient
        .CursorType = adOpenDynamic
        .LockType = adLockOptimistic
    End With
 
    'Vamos a crear un array con los datos que obtengamos de la consulta.
    sql = "SELECT [Index],[Customer Name],[City] FROM clientes ORDER BY [Customer Name] ASC"
 
    rs.Open sql, cn
 
    'Contando el número de registros que contiene la consulta.
    While Not rs.EOF
        z = z + 1
        rs.MoveNext
    Wend
    ReDim arr(z, 2)
    For i = 1 To z
        If i = 1 Then
        rs.MoveFirst
        End If
        'Cargando los datos del recordset en el array.
        arr(i, 0) = rs![Index] 'Este es el dato que el combo me va a guardar.
        arr(i, 1) = rs![Customer Name] & " - " & rs![City] 'Esto es lo que se va a ver en el combo.
        rs.MoveNext
    Next i
    'Ahora definimos el combobox
    With Me.ComboBox1
        .ColumnCount = 2
        .BoundColumn = 1
        .ColumnWidths = "0;3,5cm"
        .List = arr
    End With
 
    'Despedida y cierre.
    rs.Close
    cn.Close
 
    Set rs = Nothing
    Set cn = Nothing
 
End Sub
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
Imágen de perfil de xve

Recuperar recordset [Solucionado]

Publicado por xve (15 intervenciones) el 02/11/2013 21:32:41
Gracias por comentarlo Pablo!!!
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

Recuperar recordset [Solucionado]

Publicado por Pablo (77 intervenciones) el 04/11/2013 16:40:04
De nada.
También me sirve a mi de referencia para futuras ocasiones.
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