none
Conectar Visual Studio 2010 con Acces

    Pregunta

  • Estimados, buenas tardes.

    comento que estoy aprendiendo lenguaje Visual Studio 2010, pero no es mi profesión es por un tema de curiosidad, por lo tanto investigue y me gusto.

    ahora quiero pasar a otro nivel intentando hacer un programa con base de datos, pero no logro conectarlo.

    tengo un formulario un commandbutton1 y una listbox1, mi objetivo es que los datos de mi base de datos en acces me aparezcan en la listbox1 presionando el commandbutton1.

     el código que va en el commandbuton que encontré en Internet es el siguiente:

    Dim cn As New ADODB.Connection        'Creamos el objeto Connection.

    Dim rs As New ADODB.Recordset           'Creamos el objeto Recordset.

    'Abrimos la base de datos "agenda.mdb".

    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=c:\agenda.mdb"

    rs.Source = "contactos"          'Especificamos la fuente de datos. En este caso la tabla "contactos".

    rs.CursorType = adOpenKeyset         'Definimos el tipo de cursor.

    rs.LockType = adLockOptimistic        'Definimos el tipo de bloqueo.

    rs.Open "select * from contactos", cn  'Abrimos el Recordset y lo llenamos con una consulta SQL.

    rs.MoveFirst           'Nos posicionamos en el primer registro del Recordset.

    Do Until rs.EOF      'Repite hasta que se lea todo el Recordset.

        List1.AddItem rs.Fields("nombre") & " " & rs.Fields("apellido") & " " & rs.Fields("telefono") & " " _

       & rs.Fields("direccion") & " " & rs.Fields("correo")

        rs.MoveNext       'Nos movemos al siguiente registro.

    Loop

    pero me sale error con la parte resaltada en negrita y subrayada.

    por favor si me pudieran ayudar.

    martes, 20 de septiembre de 2016 21:40

Respuestas

  • ernesolmt,

    ¿Por qué usas ADO y no ADO .NET?.

    ADO es una tecnología de acceso a datos antigua (entiendo se usaba en Visual Basic 6). Con ADO .NET el ejercicio que presentas lo podrías hacer bajo la siguiente estructura:

    Try
    	Using cn As New OleDbConnection("<Colocar cadena de conexión>")
    
    		Dim cmd As New OleDbCommand("SELECT * FROM Contactos", cn)
    
    		Dim da As New OleDbDataAdapter(cmd)
    
    		Dim dt As New DataTable
    
    		da.Fill(dt)
    
    		ListBox1.ValueMember = "IdContacto"
    		ListBox1.DisplayMember = "NombreContacto"
    		ListBox1.DataSource = dt
    	End Using
    Catch ex As Exception
    	MessageBox.Show(ex.Message)
    End Try

    Si tienes alguna duda puedes comentarlo.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 21 de septiembre de 2016 2:15
  • @eloshmt

    Puedes ver este link donde te muestra como conectarte a una base de datos Access Access Conection String

    Puedes usar el archivo de configuración App.Config

    <connectionStrings>
      <add name="default" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Biblioteca\DB\Biblioteca.accdb;
    Persist Security Info=False;"/>
    </connectionStrings>

    Para poder conectarte a uina DB Access debes utilizar el espacio de nombres using Imports.Data.OleDb para este ejemplo también tienes que usar en namespace using Imports.Configuration pero para esto debes agregar la referencia a tu proyecto System.Configuration

    Public Class Conexion
            Friend Shared Function Conectar(conStr As String) As OleDbConnection
                Try
                    Dim conn As String = ConfigurationManager.ConnectionStrings("default").ToString()
                    Dim cn As New OleDbConnection(conn)
                    cn.Open()
                    Return cn
    
                Catch ex As Exception
                    throw new ArgumentException("Error de conexion", ex)
    
                End Try
    
            End Function
    
    
        End Class 

    Modo de usarlo

    Public Shared Sub Guardar(alumno As AlumnoEntity)
                Using cn As OleDbConnection = Conexion.Conectar("default")
                    Using cmd As OleDbCommand = cn.CreateCommand()
                        cmd.CommandText = "INSERT INTO Alumnos(AlumnoId, Nombre, Direccion, Telefono, Email) VALUES(@AlumnoId, @Nombre, @Direccion, @Telefono, @Email)"
                        cmd.Parameters.AddWithValue("@AlumnoId", alumno.AlumnoId)
                        cmd.Parameters.AddWithValue("@Nombre", alumno.Nombre)
                        cmd.Parameters.AddWithValue("@Direccion", alumno.Direccion)
                        cmd.Parameters.AddWithValue("@Telefono", alumno.Telefono)
                        cmd.Parameters.AddWithValue("@Email", alumno.Email)
                        cmd.ExecuteNonQuery()
    
                    End using
    
                End using
    
            End Sub


    El código que muestras es de vb6.0 en VB.NET se usa ADO.NET sin lugar a dudas vienes de vb6.0 debes olvidarte de ADO, te dejo unos link para que estudies ADO.NET

    ADO.NET Code Examples

    Te recomiendo que para colecciones de datos uses Lista fuerte mente tipadas

    Public Shared Function GetAlumno() As List(Of AlumnoEntity)
                Using cn As OleDbConnection = Conexion.Conectar("default")
                    Using cmd As OleDbCommand = cn.CreateCommand()
                        cmd.CommandText = "SELECT AlumnoId, Nombre FROM Alumnos"
                        Dim alumno As List(Of AlumnoEntity) = new List(Of AlumnoEntity)()
                        Using reader As OleDbDataReader = cmd.ExecuteReader()
                            While reader.Read() 
                                Dim a As New AlumnoEntity()
                                    AlumnoId = Convert.ToString(reader("AlumnoId")), Nombre = Convert.ToString(reader("Nombre"))
                                End While
                                End using
    
                                alumno.Add(a)
    
                            End using
    
                        End using
                        Return alumno
    
                    End Function
    
    

    Mostrarías los datos en tu listBoxt de la siguiente manera

    ListBox1.ValueMember = "AlumnoId"
    		ListBox1.DisplayMember = "Nombre"
    		ListBox1.DataSource = AlumnoRepository.GetAlumno();

    También tiene el control DataGridView para mostrar datos es el que mas se usa en Windows Forms




    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    miércoles, 21 de septiembre de 2016 21:25

Todas las respuestas

  • Hola ernesolmt

    Cual es el error que te muestra en las líneas resaltadas?

    Al parecer te falta .Value

    Do Until rs.EOF      'Repite hasta que se lea todo el Recordset.
    
        List1.AddItem rs.Fields("nombre").value & " " & rs.Fields("apellido").value & " " & rs.Fields("telefono").value & " " _
    
       & rs.Fields("direccion").value & " " & rs.Fields("correo").value
    
        rs.MoveNext       'Nos movemos al siguiente registro.
    
    Loop

    Saludos y suerte!

     

    Javier

    miércoles, 21 de septiembre de 2016 1:40
  • ernesolmt,

    ¿Por qué usas ADO y no ADO .NET?.

    ADO es una tecnología de acceso a datos antigua (entiendo se usaba en Visual Basic 6). Con ADO .NET el ejercicio que presentas lo podrías hacer bajo la siguiente estructura:

    Try
    	Using cn As New OleDbConnection("<Colocar cadena de conexión>")
    
    		Dim cmd As New OleDbCommand("SELECT * FROM Contactos", cn)
    
    		Dim da As New OleDbDataAdapter(cmd)
    
    		Dim dt As New DataTable
    
    		da.Fill(dt)
    
    		ListBox1.ValueMember = "IdContacto"
    		ListBox1.DisplayMember = "NombreContacto"
    		ListBox1.DataSource = dt
    	End Using
    Catch ex As Exception
    	MessageBox.Show(ex.Message)
    End Try

    Si tienes alguna duda puedes comentarlo.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 21 de septiembre de 2016 2:15
  • lo que se resalta en negrita es lo que marca el error:

    List1.AddItem(rs.Fields("nombre") & " " & rs.Fields("apellido") & " " & rs.Fields("telefono") & " " _
       & rs.Fields("direccion") & " " & rs.Fields("correo"))

    Error 1 'List1' no está declarado. Puede que esté inaccesible debido a su nivel de protección.

    Error 2 El operador '&' no está definido para los tipos 'ADODB.Field' y 'String'.

    esos son los errores, de antemano gracias por el apoyo.

    miércoles, 21 de septiembre de 2016 20:51
  • Gracias por tu idea Williams de verdad que no tenia ni idea que existía ADO.NET, pero si me pudieras decir en que parte de mi codigo debería insertar las lineas que me dices, por que la verdad no se nada de ADO.NET y recién estoy entrando a la programación.

    Gracias por el apoyo.

    miércoles, 21 de septiembre de 2016 21:09
  • @eloshmt

    Puedes ver este link donde te muestra como conectarte a una base de datos Access Access Conection String

    Puedes usar el archivo de configuración App.Config

    <connectionStrings>
      <add name="default" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Biblioteca\DB\Biblioteca.accdb;
    Persist Security Info=False;"/>
    </connectionStrings>

    Para poder conectarte a uina DB Access debes utilizar el espacio de nombres using Imports.Data.OleDb para este ejemplo también tienes que usar en namespace using Imports.Configuration pero para esto debes agregar la referencia a tu proyecto System.Configuration

    Public Class Conexion
            Friend Shared Function Conectar(conStr As String) As OleDbConnection
                Try
                    Dim conn As String = ConfigurationManager.ConnectionStrings("default").ToString()
                    Dim cn As New OleDbConnection(conn)
                    cn.Open()
                    Return cn
    
                Catch ex As Exception
                    throw new ArgumentException("Error de conexion", ex)
    
                End Try
    
            End Function
    
    
        End Class 

    Modo de usarlo

    Public Shared Sub Guardar(alumno As AlumnoEntity)
                Using cn As OleDbConnection = Conexion.Conectar("default")
                    Using cmd As OleDbCommand = cn.CreateCommand()
                        cmd.CommandText = "INSERT INTO Alumnos(AlumnoId, Nombre, Direccion, Telefono, Email) VALUES(@AlumnoId, @Nombre, @Direccion, @Telefono, @Email)"
                        cmd.Parameters.AddWithValue("@AlumnoId", alumno.AlumnoId)
                        cmd.Parameters.AddWithValue("@Nombre", alumno.Nombre)
                        cmd.Parameters.AddWithValue("@Direccion", alumno.Direccion)
                        cmd.Parameters.AddWithValue("@Telefono", alumno.Telefono)
                        cmd.Parameters.AddWithValue("@Email", alumno.Email)
                        cmd.ExecuteNonQuery()
    
                    End using
    
                End using
    
            End Sub


    El código que muestras es de vb6.0 en VB.NET se usa ADO.NET sin lugar a dudas vienes de vb6.0 debes olvidarte de ADO, te dejo unos link para que estudies ADO.NET

    ADO.NET Code Examples

    Te recomiendo que para colecciones de datos uses Lista fuerte mente tipadas

    Public Shared Function GetAlumno() As List(Of AlumnoEntity)
                Using cn As OleDbConnection = Conexion.Conectar("default")
                    Using cmd As OleDbCommand = cn.CreateCommand()
                        cmd.CommandText = "SELECT AlumnoId, Nombre FROM Alumnos"
                        Dim alumno As List(Of AlumnoEntity) = new List(Of AlumnoEntity)()
                        Using reader As OleDbDataReader = cmd.ExecuteReader()
                            While reader.Read() 
                                Dim a As New AlumnoEntity()
                                    AlumnoId = Convert.ToString(reader("AlumnoId")), Nombre = Convert.ToString(reader("Nombre"))
                                End While
                                End using
    
                                alumno.Add(a)
    
                            End using
    
                        End using
                        Return alumno
    
                    End Function
    
    

    Mostrarías los datos en tu listBoxt de la siguiente manera

    ListBox1.ValueMember = "AlumnoId"
    		ListBox1.DisplayMember = "Nombre"
    		ListBox1.DataSource = AlumnoRepository.GetAlumno();

    También tiene el control DataGridView para mostrar datos es el que mas se usa en Windows Forms




    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    miércoles, 21 de septiembre de 2016 21:25
  • Pedro gracias por los link de la verdad es que son bien útiles, voy a estudiarlos, efectivamente tienes razon al decir que vengo de visual basic 6.0, aunque en este momento no tengo ni idea de lo que me indicas hacer, voy a estudiar los link que me envias y tratare de hacer la coneccion, como te digo es para poder crear un programa que permita editar guardar, eliminar y agregar datos.

    Gracias por la ayuda.

    miércoles, 21 de septiembre de 2016 22:50