Visual Basic.NET - Conexión con B.D. en access

   
Vista:

Conexión con B.D. en access

Publicado por Miguel (56 intervenciones) el 01/07/2015 14:06:36
Tengo un modulo para conectar con la BD en access que me funciona correctamente. Es este :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Option Explicit On
Imports System.Data.OleDb
 
Module modConexion
    Public da As New OleDbDataAdapter
    Public ds As New DataSet
    Public dt As New DataTable
    Public cn As New OleDb.OleDbConnection
 
    Sub Open(ByVal BD As String)
        Try
            cn = New OleDbConnection
            cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source =" &
                        Application.StartupPath.Substring(0, Application.StartupPath.Length) & "\" & BD
            cn.Open()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub
End Module

Y lo que hago es hacer el modulo como una dll. Pues como dll me error en "Application"

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
Option Explicit On
Option Strict On
Imports System.Data.OleDb
 
Namespace Conectar
    Public Class clsConexion
        Private Paht As String
        Private cn As OleDbConnection
 
        Public Sub Open(ByVal BD As String)
            Try
                Paht = Application.StartupPath.Substring(0, Application.StartupPath.Length) & "\" & BD
                Dim Conectar As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source =" & Paht
                cn = New OleDbConnection(Conectar)
                cn.Open()
            Catch ex As Exception
                MsgBox("Can not open connection ! ")
            End Try
        End Sub
 
        Public Sub Close(ByVal BD As String)
            cn.Close()
        End Sub
    End Class
End Namespace

Podría alguien decirme en que consiste el fallo.

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

Conexión con B.D. en access

Publicado por David (45 intervenciones) el 01/07/2015 23:32:44
Prueba a recoger la ruta de la aplicación así:

1
Paht = Assembly.GetExecutingAssembly().Location
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 Wilfredo Patricio Castillo

Conexión con B.D. en access

Para qu+e el substring?.

Además el substring necesita 3 en ese contexto necesita 3 parámetros, 1 la cadena, 2 desde donde empezar, 3 longitud hasta donde va a tomar los datos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Conexión con B.D. en access

Publicado por Miguel Arce Nuñez (56 intervenciones) el 02/07/2015 11:21:54
Perdona pero no entiendo lo que me dices. No obstante tal y como he comentado el código del modulo funciona perfectamente. Mi duda es respecto a la Classe.
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

Conexión con B.D. en access

Publicado por Miguel Arce Nuñez (1 intervención) el 02/07/2015 11:19:37
Gracias David por tu contestación, pero quisiera saber donde le añades la variable para que identifique la BD que he pasado como parámetro.
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

Conexión con B.D. en access

Publicado por David (45 intervenciones) el 02/07/2015 13:28:07
Según el código que has puesto, montas la ruta completa a la BB.DD de Access en la variable Paht.

Al pasar el código a una DLL, no puedes usar la clase Application para recuperar el path donde está el ejecutable. En vez de eso, recuperas el path con la clase Assembly.

Sustituyendo la línea 12 de tu segundo bloque de código por la línea que te puse debería compilarte y funcionar.
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

Conexión con B.D. en access

Publicado por Miguel Arce Nuñez (56 intervenciones) el 03/07/2015 20:05:02
Sustituyo la linea del Paht por la que me has indicado y no reconoce el Assembly,
Paht = Assembly.GetExecutingAssembly().Location & "\" & BD

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
Imágen de perfil de Wilfredo Patricio Castillo

Conexión con B.D. en access

Si tienes problemas para obtener la cadena de conexion, lo que se hace es es obtener la cadena de conexion desde el app.config, y con eso te olvidas que si están en una .dll o no se que sea.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Conexión con B.D. en access

Publicado por Miguel (56 intervenciones) el 05/07/2015 19:52:31
Hola Wilfredo, un usuario me indico la clase que ha utilizar y con la misma he tenido un progreso aunque me da una excepción. Ya que tuviste la amabilidad de acudir en mi ayuda te mando el código de la librería con la actualización de la misma.
Te adjunto un documento con la información línea a línea dentro de la librería, haber si ves el error por lo cual se produce la excepción.

Gracias por tu tiempo y un saludo.
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

Conexión con B.D. en access

Publicado por Miguel (56 intervenciones) el 06/07/2015 14:03:32
Hola Wilfredo, después de muchas horas leyendo y viendo ejemplos he encontrado que los más facil y ademas funciona, es darle al Data Source la variable BD que contiene el nombre de la base de datos y asi se obliga a buscarla donde tiene la dll. Asi me funciona bien.

Option Explicit On
Option Strict On
Imports System.Data.OleDb
Imports System.Reflection.Assembly

Namespace Conectar
Public Class clsConexion
Public cn As OleDb.OleDbConnection
Private Paht As String

Sub Open(ByVal BD As String)
Try
cn = New OleDbConnection
'Paht = Reflection.Assembly.GetExecutingAssembly().CodeBase
cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source =" & BD
cn.Open()
Catch ex As Exception
MsgBox("No se ha podido conectar")
End Try
End Sub

Public Sub Close(ByVal BD As String)
cn.Close()
End Sub
End Class
End Namespace

Gracias por tu ayuda y tu dedicación para este mi problema.
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

Conexión con B.D. en access

Publicado por David (45 intervenciones) el 04/07/2015 10:08:25
Assembly está en System.Reflection.Aasembly.
Aunque la opción del compañero @Wilfredo también es válida, poniéndola en la sección ConnectionStrings del app.config.
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

Conexión con B.D. en access

Publicado por Miguel (56 intervenciones) el 05/07/2015 19:39:28
Hola David, he tenido un progreso. Efectivamente con las dos líneas de código que me has indicado me ha permitido compilar la aplicación. Ahora me da una excepción pero se me escapa la razón del porque de la misma. Es posible que a mi edad estos temas sean una pared demasiado vertical, pero es ahora cuando tengo tiempo para poder aprender de forma autodidacta. Así que te mando el código con el objeto de que me puedas ayudar y lamento las molestias que te pueda causar por tu tiempo.
Te adjunto un documento con la información línea a línea dentro de la librería, haber si ves el error por lo cual se produce la excepción.


Gracias y un saludo
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

Conexión con B.D. en access

Publicado por Miguel (56 intervenciones) el 05/07/2015 20:05:41
David una observación, es normal que en el paht incluya la dll como si formara parte del camino para llegar a la BD. A mi enteneder no es lógico. Evidentemente eso lo hace la "Assembly.GetExecutingAssembly().Location"

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

Conexión con B.D. en access

Publicado por Miguel (56 intervenciones) el 05/07/2015 21:27:49
Depués de dos días leyendo sobre la información que me pasaste encuentro que otra igual en cuanto el concepto

1
2
Paht = Reflection.Assembly.GetExecutingAssembly().Location
Paht = Reflection.Assembly.GetExecutingAssembly().CodeBase

Parece ser que con Location algunas veces no encuentra la ubicación correcta caso que con CodeBase si. Pero de todas formas este código busca la ubicación de la DLL y por defecto la BD a la que hace referencia la variable que le paso. Es por esa razón que en el Paht salen ambas. La cuestión es ¿por que lo ignora y no se conecta?.

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
Option Explicit On
Option Strict On
Imports System.Data.OleDb
Imports System.Reflection.Assembly
 
Namespace Conectar
    Public Class clsConexion
        Public cn As OleDb.OleDbConnection
        Private Paht As String
 
        Sub Open(ByVal BD As String)
            Try
                cn = New OleDbConnection
                'Paht = Reflection.Assembly.GetExecutingAssembly().Location
                Paht = Reflection.Assembly.GetExecutingAssembly().CodeBase
                cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source =" & Paht
                cn.Open()
            Catch ex As Exception
                MsgBox("No se ha podido conectar")
            End Try
        End Sub
 
        Public Sub Close(ByVal BD As String)
            cn.Close()
        End Sub
    End Class
End Namespace

Un saludo
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

Conexión con B.D. en access

Publicado por Miguel (56 intervenciones) el 06/07/2015 14:02:10
Hola David, después de muchas horas leyendo y viendo ejemplos he encontrado que los más facil y ademas funciona, es darle al Data Source la variable BD que contiene el nombre de la base de datos y asi se obliga a buscarla donde tiene la dll. Asi me funciona bien.

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
Option Explicit On
Option Strict On
Imports System.Data.OleDb
Imports System.Reflection.Assembly
 
Namespace Conectar
    Public Class clsConexion
        Public cn As OleDb.OleDbConnection
        Private Paht As String
 
        Sub Open(ByVal BD As String)
            Try
                cn = New OleDbConnection
                'Paht = Reflection.Assembly.GetExecutingAssembly().CodeBase
                cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source =" & BD
                cn.Open()
            Catch ex As Exception
                MsgBox("No se ha podido conectar")
            End Try
        End Sub
 
        Public Sub Close(ByVal BD As String)
            cn.Close()
        End Sub
    End Class
End Namespace

Gracias por tu ayuda y tu dedicación para este mi problema.
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