Foros del Web » Programación para mayores de 30 ;) » .NET »

VB.NET Problemas conexión Con clases

Estas en el tema de VB.NET Problemas conexión Con clases en el foro de .NET en Foros del Web. Buenas, Estoy realizando un programa el cual tiene un formulario y varias Clases con una base de datos de Acces. El problema que tengo, es ...
  #1 (permalink)  
Antiguo 23/08/2011, 08:39
Avatar de freemanworld  
Fecha de Ingreso: agosto-2008
Mensajes: 191
Antigüedad: 15 años, 8 meses
Puntos: 0
VB.NET Problemas conexión Con clases

Buenas,

Estoy realizando un programa el cual tiene un formulario y varias Clases con una base de datos de Acces.

El problema que tengo, es el siguiente:
- Tal y cómo está ahora el programa funciona correctamente, no da errores, pero necesito añadir más clases para poder añadir más empresas.
- Al añadir más clases me da un error de conexión. Si elimino la clase creada (copiar y pegar de las anteriores que si que funcionan) funciona todo correctamente.
- La que falla no es la última creada, sino la anterior... cosa rara...

el código que falla es el siguiente:
Código:
'Constructor de la clase
    Public Sub New()
        conectar()
    End Sub
    Public Sub conectar()

        Dim ruta As String
        ruta = Application.StartupPath & "\bdDatabase.mdb;Jet OLEDB:Database Password=pass;"
        'conexionBD = New OdbcConnection("dsn=RedUtility;uid=root;pwd=pass;")
        conexionBD = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & ruta)
        conexionBD.Open()
        sql = New OleDb.OleDbCommand
        sql.Connection = conexionBD


    End Sub
El error que me dá es el siguiente:
Me marca en amarillo la siguiente línea:
Código:
       conexionBD.Open()
Y me indica lo siguiente:
No se controló OleDbException
Error no especificado

Me estoy empezando a volver loco, porque he estado probando cosas pero no consigo ni engañarle ni nada al programa!!!!
  #2 (permalink)  
Antiguo 23/08/2011, 08:44
Avatar de galletica12  
Fecha de Ingreso: mayo-2011
Ubicación: Tekax, Yucatán
Mensajes: 213
Antigüedad: 13 años
Puntos: 8
Respuesta: VB.NET Problemas conexión Con clases

primero debes declarar tu variable y despues utilizarla.

Código:
'Constructor de la clase    
 Public Sub New()         
conectar()    
 End Sub    
 Public Sub conectar()  
       
 Dim ruta As String

        sql = New OleDb.OleDbCommand  
       sql.Connection = conexionBD 

        ruta = Application.StartupPath & "\bdDatabase.mdb;Jet OLEDB:Database Password=pass;"       
  'conexionBD = New OdbcConnection("dsn=RedUtility;uid=root;pwd=pass;")       
  conexionBD = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & ruta)        
 conexionBD.Open()      
 End Sub
__________________
Info y Servicios http://www.pc-land.webege.com/ Saludos...:adios:.
  #3 (permalink)  
Antiguo 23/08/2011, 08:58
Avatar de freemanworld  
Fecha de Ingreso: agosto-2008
Mensajes: 191
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: VB.NET Problemas conexión Con clases

galletica12 Gracias por responder.

He probado lo que me has indicado y me sigue fallando... Alguna otra idea?

Gracias nuevamente
  #4 (permalink)  
Antiguo 23/08/2011, 09:10
Avatar de galletica12  
Fecha de Ingreso: mayo-2011
Ubicación: Tekax, Yucatán
Mensajes: 213
Antigüedad: 13 años
Puntos: 8
Respuesta: VB.NET Problemas conexión Con clases

agregale el

Código:
return ConexionBD;
despues del ConexionBD.Open
__________________
Info y Servicios http://www.pc-land.webege.com/ Saludos...:adios:.
  #5 (permalink)  
Antiguo 23/08/2011, 09:18
Avatar de freemanworld  
Fecha de Ingreso: agosto-2008
Mensajes: 191
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: VB.NET Problemas conexión Con clases

Gracias Nuevamente, pero me subraya el texto y me dice lo siguiente:
Una instrucción "Return"en Sub o Set no puede devolver un valor.
Lo he puesto tal cual:
Cita:
Public Sub conectar()
Dim ruta2 As String
sql = New OleDb.OleDbCommand
sql.Connection = conexionBD
ruta2 = Application.StartupPath & "\bdDatabase.mdb;Jet OLEDB:Database Password=alba;"
'conexionBD = New OdbcConnection("dsn=RedUtility;uid=root;pwd=alba;" )
conexionBD = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLED B.4.0; Data Source=" & ruta2)
conexionBD.Open()
Return conexionBD

End Sub
Gracias nuevamente

Una de las pruebas que he realizado es comentar la linea de conexionBD.Open() de tal manera que el programa me arranca sin errores, pero a la hora de buscar algo en la tabla perteneciente me pide conectarme, pero me sale error todo el rato!
  #6 (permalink)  
Antiguo 23/08/2011, 09:27
Avatar de galletica12  
Fecha de Ingreso: mayo-2011
Ubicación: Tekax, Yucatán
Mensajes: 213
Antigüedad: 13 años
Puntos: 8
De acuerdo Respuesta: VB.NET Problemas conexión Con clases

prueba con esta:

Código:
Public Sub New()
        InitializeComponent()
        Dim cadena_conexion As String
        cadena_conexion = String.Format("Provider=Microsoft.jet.OLEDB.4.0; 
Data Source=" + My.Application.Info.DirectoryPath + "\usuarios.mdb")
        Try
            conexion = New OleDb.OleDbConnection(cadena_conexion)
            conexion.Open()
        Catch ex As OleDb.OleDbException
            MessageBox.Show("No se ha podido conectar al servidor "
 + ex.Message)
        End Try
    End Sub
__________________
Info y Servicios http://www.pc-land.webege.com/ Saludos...:adios:.
  #7 (permalink)  
Antiguo 23/08/2011, 09:35
Avatar de freemanworld  
Fecha de Ingreso: agosto-2008
Mensajes: 191
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: VB.NET Problemas conexión Con clases

Gracias nuevamente, pero cómo declaro en este caso InitializeComponent()??

Gracias por tu ayuda
  #8 (permalink)  
Antiguo 23/08/2011, 09:39
Avatar de galletica12  
Fecha de Ingreso: mayo-2011
Ubicación: Tekax, Yucatán
Mensajes: 213
Antigüedad: 13 años
Puntos: 8
Información Respuesta: VB.NET Problemas conexión Con clases

debes declarar estas variables:

Código:
 'Crear una instancia de conexión
Dim conexion As OleDb.OleDbConnection
'Hace los datos legibles para crear instancias de un origen de datos
Dim adaptador As OleDb.OleDbDataAdapter Dim constructor As OleDb.OleDbCommandBuilder 
'Sirve para construir comandos y consultas SQL'
Dim reader As OleDb.OleDbDataReader
cualquier otro error avisa.
__________________
Info y Servicios http://www.pc-land.webege.com/ Saludos...:adios:.
  #9 (permalink)  
Antiguo 23/08/2011, 09:45
Avatar de freemanworld  
Fecha de Ingreso: agosto-2008
Mensajes: 191
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: VB.NET Problemas conexión Con clases

Buff me está costando entenderlo bastante... el Tema de programación lo tengo muy olvidado (lo poco que sabía),
Lo raro, es que funciona bien teniendo así:
- Form1
- CEmpresa1
- CEmpresa2
- CEmpresa3
- CEmpresa4
- CEmpresa5

Pero a la hora de Agregar una clase llamada CEmpresa6 me devuelve el error el - CEmpresa5!!! Es lo que no entiendo, mientras los demás no fallan...

Gracias por tu tiempo!
  #10 (permalink)  
Antiguo 23/08/2011, 09:49
Avatar de galletica12  
Fecha de Ingreso: mayo-2011
Ubicación: Tekax, Yucatán
Mensajes: 213
Antigüedad: 13 años
Puntos: 8
Respuesta: VB.NET Problemas conexión Con clases

no entendi? en que lo quieres utilizar, la clase CEmpres6
__________________
Info y Servicios http://www.pc-land.webege.com/ Saludos...:adios:.
  #11 (permalink)  
Antiguo 23/08/2011, 09:51
Avatar de freemanworld  
Fecha de Ingreso: agosto-2008
Mensajes: 191
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: VB.NET Problemas conexión Con clases

EL problema está en que al crear Cempresa6 (es un copiar pegar del 5 y modificando los datos para no repetirlos) y al ejecutarlo me falla la CEmpresa5....
  #12 (permalink)  
Antiguo 23/08/2011, 09:53
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: VB.NET Problemas conexión Con clases

Hola freemanworld podes colocar todo el codigo que tienes en tu CEmpresa6 creada?. Saludos!.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #13 (permalink)  
Antiguo 23/08/2011, 09:59
Avatar de galletica12  
Fecha de Ingreso: mayo-2011
Ubicación: Tekax, Yucatán
Mensajes: 213
Antigüedad: 13 años
Puntos: 8
Respuesta: VB.NET Problemas conexión Con clases

Muestra el codigo de lo que estas haciendo.
__________________
Info y Servicios http://www.pc-land.webege.com/ Saludos...:adios:.

Última edición por galletica12; 23/08/2011 a las 10:08
  #14 (permalink)  
Antiguo 23/08/2011, 10:18
Avatar de freemanworld  
Fecha de Ingreso: agosto-2008
Mensajes: 191
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: VB.NET Problemas conexión Con clases

Esta es la Clase Que he creado y que es la que me dá un error:

Código:
Imports System.Data.Odbc
Imports System.Data.OleDb
Imports System.Data
Public Class CMenai
    Private conexionBD As OleDb.OleDbConnection
    Private sql As OleDb.OleDbCommand
    Private datos As OleDb.OleDbDataReader
    Public lista As String
    Public CONCESIONARIOMEN As String
    Public UsuarioMEN As String
    Public PassMEN
    Public PcMEN
    Public RAM_MEN
    Public Equipo_MEN
    Public MAIL_MEN
    Public APE_MEN
    Public IMP_MEN

    'Constructor de la clase
  
    Public Sub conectar()
        Dim ruta2 As String
       
        ruta2 = Application.StartupPath & "\bdDatabase.mdb;Jet OLEDB:Database Password=pass;"
        'conexionBD = New OdbcConnection("dsn=RedUtility;uid=root;pwd=pass;")
        conexionBD = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & ruta2)
        conexionBD.Open()
        sql = New OleDb.OleDbCommand
        sql.Connection = conexionBD
    End Sub

    Public Function Obtener_Usuario(ByVal UsuarioMEN As String)
        Dim user As String = ""
        sql.CommandText = String.Format("Select Usuario from MENAI where Nom_Usuario = '{0}'", UsuarioMEN)
        'On Error GoTo Usr_usuario
        datos = sql.ExecuteReader

        If datos.Read() Then
            user = datos("Usuario")
        End If
        datos.Close()
        Return user
        'Usr_usuario:
        '   user = ""
    End Function

    Public Function Obtener_Nequipo(ByVal PcMEN As String)
        Dim user As String = ""
        conexionBD.Open()
        sql.CommandText = String.Format("Select Nombre_PC from MENAI where Nom_Usuario = '{0}'", PcMEN)
        'On Error GoTo Err_NombreEquipo
        datos = sql.ExecuteReader
        If datos.Read() Then

            user = datos("Nombre_PC")
        End If

        datos.Close()
        Return user
        'Err_NombreEquipo:
        '      user = ""
        '     Resume Next
    End Function

    Public Function Obtener_Password(ByVal PassMEN As String)

        Dim user As String = ""

        sql.CommandText = String.Format("Select Password from MENAI where Nom_Usuario = '{0}'", PassMEN)
        On Error GoTo Usr_Password
        datos = sql.ExecuteReader

        If datos.Read() Then

            user = datos("Password")

        End If
        Resume Next
        datos.Close()
        Return user
Usr_Password:
        user = ""
    End Function

    Public Function Obtener_IP(ByVal IP_MEN As String)
        Dim user As String = ""
        sql.CommandText = String.Format("Select IP from MENAI where Nom_Usuario = '{0}'", IP_MEN)

        datos = sql.ExecuteReader
        If datos.Read() Then
            '  On Error GoTo Err_IP
            user = datos("IP")
        End If

        datos.Close()
        Return user
        'Err_IP:
        'user = ""
    End Function

    Public Function Obtener_InfoEquipo(ByVal Equipo_MEN As String)
        Dim user As String = ""
        sql.CommandText = String.Format("Select Equipo from MENAI where Nom_Usuario = '{0}'", Equipo_MEN)
        'On Error GoTo Usr_Equipo
        datos = sql.ExecuteReader
        If datos.Read() Then

            user = datos("Equipo")
        End If

        datos.Close()
        Return user
        'Usr_Equipo:
        'user = ""
    End Function
    Public Function Obtener_RAM(ByVal RAM_MEN As String)
        Dim user As String = ""
        sql.CommandText = String.Format("Select RAM from MENAI where Nom_Usuario = '{0}'", RAM_MEN)
        'On Error GoTo Usr_RAM
        datos = sql.ExecuteReader
        If datos.Read() Then

            user = datos("RAM")
        End If

        datos.Close()
        Return user
        'Usr_RAM:
        '   user = ""
    End Function
    Public Function Obtener_Mail(ByVal MAIL_MEN As String)
        Dim user As String = ""


        sql.CommandText = String.Format("Select mail from MENAI where Nom_Usuario = '{0}'", MAIL_MEN)
        On Error GoTo Usr_Mail
        datos = sql.ExecuteReader

        If datos.Read() Then
            user = datos("mail")
        End If
        datos.Close()
        Return user
Usr_Mail:
        user = ""

    End Function
    Public Function Obtener_Apellido(ByVal APE_MEN As String)
        Dim user As String = ""
        conectar()
        sql.CommandText = String.Format("Select Ape_Usu from MENAI where Nom_Usuario = '{0}'", APE_MEN)
        On Error GoTo Usr_err
        datos = sql.ExecuteReader

        If datos.Read() Then

            user = datos("Ape_Usu")
        End If

        datos.Close()
        Return user
Usr_err:
        user = ""
    End Function

    Public Function Obtener_Impresora(ByVal IMP_MEN As String)
        Dim user As String = ""
        sql.CommandText = String.Format("Select Impresora from MENAI where Nom_Usuario = '{0}'", IMP_MEN)
        On Error GoTo Usr_Impresora
        datos = sql.ExecuteReader
        If datos.Read() Then

            user = datos("Impresora")
        End If

        datos.Close()
        Return user
Usr_Impresora:
        user = ""
    End Function
    Public Sub desconectar()
        conexionBD.Close()
    End Sub
    Public Sub Listar()
        Try

            sql.CommandText = String.Format("Select * from MENAI")
            datos = sql.ExecuteReader()


        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Sub

    Public Sub Alta(ByVal CONCESIONARIO As String, ByVal DNS As String, ByVal NombreDNS As String)

        Dim sqlAlta As String


        sqlAlta = "Insert into MENAI (CONCESIONARIO) values ('{0}')"
        sql.CommandText = String.Format(sqlAlta, CONCESIONARIO)
        sql.ExecuteNonQuery()

    End Sub

    Public Sub ListarUsuarios()
        sql.CommandText = "Select Nom_Usuario from MENAI ORDER BY Nom_Usuario"
        datos = sql.ExecuteReader()
    End Sub

    Public Function ListarCombo() As Boolean
        If datos.Read Then
            UsuarioMEN = datos("Nom_Usuario")
            ListarCombo = True
        Else
            datos.Close()
            ListarCombo = False
        End If
    End Function
End Class
Y la llamo desde el Formulario Principal:

Código:
Imports System.Net
Imports System.Net.Sockets
Imports System.Runtime.InteropServices
Imports System.Text
Imports System.Data.OleDb
Imports System.Data
Imports System.Data.Odbc


Public Class FrmAplicacion
    Dim seleccionconcesion
    Dim ValorConcesion
    Dim ResultadoUsuario
   '----------------
    'Declaramos las Variables para las concesiones (todas igual)
    Public Concesion As CConcesion
    Public UsuarioConcesion As CConcesion
    'Declaramos las Variables para VASA
    Public Vasa As Cvasa
    
    'Declaramos las Variables para AKOTEI
    Public Akotei As CAkotei
    Public UsuarioAko As CAkotei
    
    Private Sub FrmAplicacion_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Para cargar las clases:
        Concesion = New CConcesion

        Vasa = New Cvasa
        UsuarioVAS = New Cvasa
        PassVAS = New Cvasa
        PcVAS = New Cvasa
        IP_VAS = New Cvasa
        RAM_VAS = New Cvasa
        Equipo_VAS = New Cvasa
        MAIL_VAS = New Cvasa
        APE_VAS = New Cvasa
        IMP_VAS = New Cvasa


        ' Para listar los concesionarios en su combobox una vez arranque el programa


        Concesion.ListarCONCESIONARIO()
        While Concesion.ListarCombo = True
            cmbconcesion.Items.Add(Concesion.CONCESIONARIO)
        End While
    End Sub

    Private Sub cmbconcesion_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbconcesion.SelectedIndexChanged
   

        If cmbconcesion.SelectedItem.ToString = "VASA" Then
            'Para realizar limpìeza y que no queden restos de usuarios (o se repitan datos)
            cmbnombreusuario.Items.Clear()

            ' Llamamos a la Clase CVASA para buscar en la tabla de VASA
            UsuarioVAS.ListarUsuarios()
            While UsuarioVAS.ListarCombo = True
                cmbnombreusuario.Items.Add(UsuarioVAS.UsuarioVAS)
            End While
            ValorConcesion = 1


        End If
        If cmbconcesion.SelectedItem.ToString = "AKOTEI" Then
            cmbnombreusuario.Items.Clear()

            UsuarioAko.ListarUsuarios()
            While UsuarioAko.ListarCombo = True
                cmbnombreusuario.Items.Add(UsuarioAko.UsuarioAKO)
            End While

            ValorConcesion = 2
        End If
        If cmbconcesion.SelectedItem.ToString = "ALCIBAR-AZKOITIA" Then
          End Sub

    Private Sub cmbnombreusuario_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbnombreusuario.SelectedIndexChanged
        If ValorConcesion = 1 Then
            TxtUsuario.Text = ""
            TxtUsuario.Text = UsuarioVAS.Obtener_Usuario(cmbnombreusuario.SelectedItem)
            TxtApellidos.Text = APE_VAS.Obtener_Apellido(cmbnombreusuario.SelectedItem)
            TxtPassword.Text = PassVAS.Obtener_Password(cmbnombreusuario.SelectedItem)
            TxtNombreEquipo.Text = PcVAS.Obtener_Nequipo(cmbnombreusuario.SelectedItem)
            TxtIp.Text = IP_VAS.Obtener_IP(cmbnombreusuario.SelectedItem)
            TxtInfoEquipo.Text = Equipo_VAS.Obtener_InfoEquipo(cmbnombreusuario.SelectedItem)
            TxtRam.Text = RAM_VAS.Obtener_RAM(cmbnombreusuario.SelectedItem)
            TxtMail.Text = MAIL_VAS.Obtener_Mail(cmbnombreusuario.SelectedItem)
            TxtImpresora.Text = IMP_VAS.Obtener_Impresora(cmbnombreusuario.SelectedItem)
                 End If
    End Sub
End Class
  #15 (permalink)  
Antiguo 23/08/2011, 10:47
Avatar de galletica12  
Fecha de Ingreso: mayo-2011
Ubicación: Tekax, Yucatán
Mensajes: 213
Antigüedad: 13 años
Puntos: 8
Respuesta: VB.NET Problemas conexión Con clases

Aver pon le esto para ver que pasa:

Código:
 Try
   
        ConexionBD.Open()
   
    Catch ex As Exception
        Throw New Exception("No se ha podido conectar a la DB")
    End Try
para hacer la valdicion del ConexionBD.Open.
__________________
Info y Servicios http://www.pc-land.webege.com/ Saludos...:adios:.
  #16 (permalink)  
Antiguo 24/08/2011, 02:04
Avatar de freemanworld  
Fecha de Ingreso: agosto-2008
Mensajes: 191
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: VB.NET Problemas conexión Con clases

Gracias por los comentarios y por vuestra ayuda.
Finalmente cómo no conseguia resolverlo, he realizado el programa "casi" desde 0 con nueva apariencia, así el código queda más ordenado.
Creo que el problema era que no abria/cerraba correctamente las conexiones, ya que en el nuevo programa me va correctamente.

Gracias a todos nuevamente, se puede cerrar este hilo

Etiquetas: bd, clases, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:36.