Problema con visual basic y Access

Estado
Cerrado para nuevas respuestas

Caito

Ex- Mod
Miembro
#1
Tengo el siguiente problema para acceder a una base de datos con el VB.

Tengo una tabla en Excel:

NOMBRE | DIRECCION | TELEFONO | DOCUMENTO |

-----------------------------------------------------------

nom 1 | dir 1 | tel 1 | DNI 1 |

-----------------------------------------------------------

nom 2 | dir 2 | tel 2 | DNI 1 |

-----------------------------------------------------------

nom 3 | dir 3 | tel 3 | DNI 3 |

El objetivo del planteo es que medianante un List, en el VB, me aparezcan los nombres de dicha tabla ( con eso sí pude), pero lo que debo hacer también, es que cuando haga doble click en cualquier nombre que aparezca en el List, me aparezcan los respectivos datos de aquel nombre (Ejemplo: Doble click en nom 1, me deben aparecer en labels diferentes dir 1, tel 1, y DNI 1.) Todo esto utilizando el Access junto con el VB.

Esprero que me haya expresado bien y que alguien por favor pueda ayudarme.

Desda ya muchas gracias,

Caito
 

rob1104

Super Moderador
Super Moderador
#2
Hola, un placer ayudarlo :D :D ...

Bueno, no menciona la versión de Visual Basic, pero supongo que es la 6.0 (en dado caso que sea otra corregiré)

Para conectar a VB con access hay una infinidad de formas (bueno en realidad como 6 o 7 aprox ), no menciona cual usó, pero le voy a dar una de las mas sencillas.. usando ADO (ActiveX Data Object) sin DataControl.

Primero que nada hay que agregar la referencia para poder usar los métodos ADO, eso se logra dando click al menu proyecto/referencias y palomear:

Microsoft ActiveX Data Object 2.8 como lo muestro en las imagenes:



Ahora, en el ejemplo que utilizé agregue un combobox, tres labels y tres textbox, y no les cambié ninguna propiedad, ahora solo agregar el siguiente codigo:

<span style='font-size:8pt;line-height:100%'>

<span style="color: #0000ff">Option Explicit</span>

<span style="color: #0000ff">Dim</span> conexión <span style="color: #0000ff">As</span> ADODB.Connection <span style="color: #008000">'Conexion</span>

<span style="color: #0000ff">Dim WithEvents</span> rs <span style="color: #0000ff">As</span> ADODB.Recordset <span style="color: #008000">'Recordset</span>

<span style="color: #0000ff">Private Sub </span>Form_Load()

<span style="color: #0000ff">Dim</span> y As <span style="color: #0000ff">Integer</span><span style="color: #008000"> 'Contador</span>

<span style="color: #0000ff">Const</span> ruta = &quot;base.mdb&quot; <span style="color: #008000">'Ruta de la base</span>

<span style="color: #008000">'Creamos los &quot;objetos&quot;</span>

<span style="color: #0000ff">Set</span> conexión = New ADODB.Connection

<span style="color: #0000ff">Set</span> rs = <span style="color: #0000ff">New</span> ADODB.Recordset

<span style="color: #008000">'Creamos la conexión a la base

'Si es access 97 cambiar el 4.0 por 3.51</span>

conexion.ConnectionString = &quot;Provider=Microsoft.Jet.OLEDB.4.0;&quot; &amp; _

&quot:)ata Source=&quot; &amp; ruta &amp; &quot;;&quot;

conexion.Open 'Abrimos la conexion

<span style="color: #008000">'Abrimos el recordSet (tabla, es el nombre de la tabla :D</span>

rs.Open &quot;SELECT * FROM tabla&quot;, conexion, adOpenDynamic, adLockOptimistic

rs.MoveFirst 'Posicionamos el RecordSet en el primer registro



<span style="color: #008000">'/*Cargamos el nombre al combobox&quot;</span>

<span style="color: #008000">'Mientras no sea Fin de archivo</span>

<span style="color: #0000ff">While Not</span> rs.EOF

<span style="color: #008000"> 'A&ntilde;adir un nombre al combo</span>

Combo1.AddItem rs.Fields(&quot;nombre&quot;)

rs.MoveNext 'Pasar al siguiente registro

<span style="color: #0000ff">Wend</span>

rs.Close 'Cerramos el RecordSet

<span style="color: #0000ff">End Sub</span>

<span style="color: #008000">'/*Aqui esta lo que pides Caito*/</span>

<span style="color: #0000ff">Private Sub</span> Combo1_click()

<span style="color: #008000"> 'Cada vez que se le de click al combo

'&Eacute;ste tomara los campos con el filtro nombre=texto del combo1

'Y después asigna los dem&aacute;s campos de la tabla al combobox</span>

rs.Open &quot;SELECT * FROM tabla WHERE nombre like '&quot; &amp; Combo1.Text &amp; &quot;'&quot;, conexion, adOpenDynamic, adLockOptimistic

Text1.Text = rs.Fields(&quot;direccion&quot;)

Text2.Text = rs.Fields(&quot;telefono&quot;)

Text3.Text = rs.Fields(&quot;documento&quot;)

rs.Close

<span style="color: #0000ff">End Sub</span>
</span>

Es algo dificil de comprender la primera vez, pero agarrandole el hilo es muy fácil :D, te adjunto el proyecto por si quedan dudas:

BASE DE DATOS ADO SIN DC
 

Caito

Ex- Mod
Miembro
#3
Muchas gracias por la ayuda robbie110487, me funcionó correctamente. Pero hay un problema. Lo debo hacer con otra forma de código, le mando un ejemplo a continuación de cómo se realizó la primera parte. (el ver los nombres de una tabla de access en un List de Visual). Debo hacer lo que le pedí en el primer mensaje, pero utilizando la misma forma de código que se usó en la primera parte:

Microsoft DAO 2.5/3.5 Compatibility Activado.

Código FGM

Dim datas as database

Dim reg as recordset

Dm cons as string

Set datas = Opendatabase("C:\tabla.mdb")

Cons = "select Nombre from Hoja1 where Nombre like ' "

Cons = Cons + Text1 + " * ' "

Set reg = datas.openrecordset(cons)

Do while not reg.EOF

If re.nomatch then

Print " no se encontró"

Else

list1.additem reg!Nombre

reg.movenext

End if

Loop

End sub

---------------------

(si me explique mal, o falta algo de información, no dude en hacermelo saber)

Ese fue el código que utilizé para hacer la 1ra parte, usando un List, un Text...

Si es posible hacer la úlitma parte (hacer click en cualquier nombre del List y que te aparezcan los datos de esa persona) usando un código similar se lo agradecería mucho. De lo contrario, muchas gracias igual, robbie110487.

Saludos

Caito
 

RadicalEd

Ex-Mod
Miembro
#4
Muchas gracias por la ayuda robbie110487, me funcionó correctamente. Pero hay un problema. Lo debo hacer con otra forma de código, le mando un ejemplo a continuación de cómo se realizó la primera parte. (el ver los nombres de una tabla de access en un List de Visual). Debo hacer lo que le pedí en el primer mensaje, pero utilizando la misma forma de código que se usó en la primera parte:

Microsoft DAO 2.5/3.5 Compatibility Activado.

Código FGM

Dim datas as database

Dim reg as recordset

Dm cons as string

Set datas = Opendatabase("C:\tabla.mdb")

Cons = "select Nombre from Hoja1 where Nombre like ' "

Cons = Cons + Text1 + " * ' "

Set reg = datas.openrecordset(cons)

Do while not reg.EOF

If re.nomatch then

Print " no se encontró"

Else

list1.additem reg!Nombre

reg.movenext

End if

Loop

End sub
De hecho, lo que necesitas ya lo tienes hecho solo es acomodar el evento que debes utilizar.

Cuando selecciones el Nombre del usuario, deberas decir en otra consulta:

Private Sub List1_Click()

On Error Resume Next

'ESTA PRIMERA PARTE DEBERIAS DEJARLA AL COMIENZO DEL FORMULARIO PARA NO HACERLO EN CADA EVENTO, O EN UN MODULO PARA HACERLO GLOBAL EN LA APLICACION.

Dim datas as database

Dim reg as recordset

Dm cons as string

Set datas = Opendatabase("C:\tabla.mdb")

Cons = "SELECT * from Hoja1 where Nombre like '" & List1.Text & "'"

End Sub

Y el resto es imprimir los datos.

Ojala te sirva.

Chao
 
Estado
Cerrado para nuevas respuestas
Arriba Pie