none
Simple appel de fonction sous VB RRS feed

  • Question

  • Bonjour,

    j'ai une fonction "Atelier" et j'importe "Init",

    'AppliStage' étant le nom de l'appli, 'Init' mon module contenant 'connexion' ma procédure pour me connecter à la BD.

    (La fonction atelier c'est pour remplir une liste déroulante d'ou le while.)

    Message d'erreur :

    Erreur (Page 1) 'maconnexion' n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection.

    code :

    -----------------------1ére Page------------------------------------

    Imports AppliStage.Init

    Public Class Atelier

        Private Sub Atelier_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

            Call Init.connexion()

            Dim req As String
            req = "select LIBELLE from CATEGORIE"
            Dim cmd As New OleDbCommand(req, maconnexion)

            Dim rdr As OleDbDataReader = cmd.ExecuteReader()
            While rdr.Read()
                Me.ListCateg.Items.Add(rdr.Item("LIBELLE"))
            End While

            maconnexion.Close()

        End Sub

    End Class

    -----------------------------2éme Page---------------------------------

    Module Init

        Public Sub connexion()

            Dim chaineconnexion As String

            chaineconnexion = "provider = microsoft.jet.oledb.4.0 ; data source = " &
                                                 Application.StartupPath & "\Stage.mdb;"

            Dim maconnexion As New OleDbConnection(chaineconnexion)
            maconnexion.Open()


        End Sub


    End Module

    ----------------------------------------Fin----------------------------------------

    Merci d'avance pour toute aide

    jeudi 7 juin 2012 10:29

Réponses

  • Bonjour,

    maconnexion est une variable locale qui est donc effectivement inconnue en dehors et notamment dans Atelier_load. Dans ce cas particulier j'utiliserai sans doute http://msdn.microsoft.com/fr-fr/library/aa326246(v=vs.71).aspx et donc notamment l'option CommandBehavior.CloseConnection qui permet de fermer la connexion quand le reader est fermé.

    Eventuellement voir http://xo.developpez.com/tutoriel/vb.net/poo/ (sans vouloir précipiter les choses l'utilisation de classes plutôt que de modules sera sans doute assez rapidement préférable...)


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    jeudi 7 juin 2012 10:42
    Modérateur
  • C'est bon j'ai trouvé en tatonant je ne connais pas bien le language ... :/

    code qui m'a posé probléme :

    "Public maconnexion As OleDbConnection"

    "maconnexion = New OleDbConnection(chaineconnexion)"

    truc de débutant comme moi :p

    --------------------------------Module---------------------

    Module Init

        Public chaineconnexion As String
        Public maconnexion As OleDbConnection

        Public Sub connexion()

            chaineconnexion = "provider = microsoft.jet.oledb.4.0 ; data source = " & Application.StartupPath & "\Stage.mdb;"
            maconnexion = New OleDbConnection(chaineconnexion)
            maconnexion.Open()

        End Sub


    End Module

    ---------------------------------------Fonction atelier-----------------------------------

    Imports AppliStage.Init

    Public Class Atelier

        Private Sub Atelier_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

            Call Init.connexion()

            Dim req As String
            req = "select LIBELLE from CATEGORIE"
            Dim cmd As New OleDbCommand(req, Init.maconnexion)

            Dim rdr As OleDbDataReader = cmd.ExecuteReader()
            While rdr.Read()
                Me.ListCateg.Items.Add(rdr.Item("LIBELLE"))
            End While

            maconnexion.Close()

        End Sub

    End Class

    ------------------------------------Merci--------------------------------

    merci de la réponse rapide quand méme :)

    jeudi 7 juin 2012 11:15

Toutes les réponses

  • Bonjour,

    maconnexion est une variable locale qui est donc effectivement inconnue en dehors et notamment dans Atelier_load. Dans ce cas particulier j'utiliserai sans doute http://msdn.microsoft.com/fr-fr/library/aa326246(v=vs.71).aspx et donc notamment l'option CommandBehavior.CloseConnection qui permet de fermer la connexion quand le reader est fermé.

    Eventuellement voir http://xo.developpez.com/tutoriel/vb.net/poo/ (sans vouloir précipiter les choses l'utilisation de classes plutôt que de modules sera sans doute assez rapidement préférable...)


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    jeudi 7 juin 2012 10:42
    Modérateur
  • hum désolé de ne pas comprendre aprés la premiére ligne :/

    J'ai adapté le code fourni par mon professeur et voila se que ça donne (ça fonctionne quand c'est sur la méme page) je voudrais juste que cela continu à fonctionné en utilisant un module où j'appel une procédure. Voila je ne comprend pas ou il faut faire les déclaration ... merci d'avance, je post le sujet comme ça on à l'objectif précis.

    -----------------------Voici mon sujet----------------------

    ● Par conséquent, le code effectuant le remplissage de la liste déroulante sera le suivant :

    Dimchaineconnexion As String

    chaineconnexion = "provider = microsoft.jet.oledb.4.0 ; data source = " &

                                         Application.StartupPath & "\Stage.mdb;"

    Dimmaconnexion As New OleDbConnection(chaineconnexion)

    maconnexion.Open( )

    Dimreq As String

    req = "select libelle from categorie"

    Dimcmd As New OleDbCommand(req, maconnexion)

    Dimrdr As OleDbDataReader= cmd.ExecuteReader( )

    Whilerdr.Read( )

       Me.ListCateg.Items.Add (rdr.Item("libcateg"))     '** ListCateg = Nom de la liste déroulante

    EndWhile

    maconnexion.Close( )

    ● Bien entendu, dans un deuxième temps; il sera plus judicieux de ne pas déclarer et affecter la variable maconnexion dans chaque procédure évenementielle de l'application, mais plutôt de la déclarer dans un module (commande [Projet – Ajouter un module]), avec Public au lieu de Dim, et de l'affecter dans une procédure de nom "init" par exemple, appelée une fois au lancement de l'application.


    jeudi 7 juin 2012 11:07
  • C'est bon j'ai trouvé en tatonant je ne connais pas bien le language ... :/

    code qui m'a posé probléme :

    "Public maconnexion As OleDbConnection"

    "maconnexion = New OleDbConnection(chaineconnexion)"

    truc de débutant comme moi :p

    --------------------------------Module---------------------

    Module Init

        Public chaineconnexion As String
        Public maconnexion As OleDbConnection

        Public Sub connexion()

            chaineconnexion = "provider = microsoft.jet.oledb.4.0 ; data source = " & Application.StartupPath & "\Stage.mdb;"
            maconnexion = New OleDbConnection(chaineconnexion)
            maconnexion.Open()

        End Sub


    End Module

    ---------------------------------------Fonction atelier-----------------------------------

    Imports AppliStage.Init

    Public Class Atelier

        Private Sub Atelier_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

            Call Init.connexion()

            Dim req As String
            req = "select LIBELLE from CATEGORIE"
            Dim cmd As New OleDbCommand(req, Init.maconnexion)

            Dim rdr As OleDbDataReader = cmd.ExecuteReader()
            While rdr.Read()
                Me.ListCateg.Items.Add(rdr.Item("LIBELLE"))
            End While

            maconnexion.Close()

        End Sub

    End Class

    ------------------------------------Merci--------------------------------

    merci de la réponse rapide quand méme :)

    jeudi 7 juin 2012 11:15
  • Ok, c'est un peu difficile de traiter le problème sans interférer avec votre apprentissage. Mon approche était plutôt de ne pas exposer maconnection l'idée générale étant qu'une partie de code ait à en savoir le moins possible sur une autre partie de code, mais vous verrez cela sans doute plus tard dans votre cursus...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    jeudi 7 juin 2012 11:50
    Modérateur