IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

VB CONNECTION BASE ACCESS : DECLARATION DE BASE IMPOSSIBLE


Sujet :

VB.NET

  1. #1
    2o
    2o est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 12
    Points : 10
    Points
    10
    Par défaut VB CONNECTION BASE ACCESS : DECLARATION DE BASE IMPOSSIBLE
    Bonjour

    Je suis comptable, et depuis une dizaine d’années dans mon cadre professionnel, j’écris et utilise des bases de données ACCESS. Je manipule donc le SQL et VBA.

    Pour des raisons stratégiques d’évolution du matériel informatique et des OS partagés entre collègues, je veux à l’avenir piloter les données d’une base ACCESS depuis l’extérieur de la base elle-même. Par exemple, utiliser VB pour accéder aux données d’ACCESS.

    Par ailleurs, il est envisagé d’abandonner les produits Microsoft Office au profit d’autres, par exemple Interbase.

    Pour l’instant, je me familiarise avec VB dans sa version Visual Basiv 2008 Express B 9.0.30729.1 SP.
    Et je fais « mes armes » à partir des cours disponibles sur le site Develppez.com et des exercices de tests.

    Aujourd’hui deux questions se posent à moi. Je les aborde dans deux messages différents pour en simplifier le traitement.

    Second message :

    J’ai décidé pour mon apprentissage de faire des tests. L’un des premiers consiste à utiliser une base de données, de me connecter à celle-ci et d’en manipuler les enregistrements déjà existants.

    La base de données est une base ACCESS en registrée dans le répertoire même de mon projet : Base_Donnees.mdb

    La table s’appelle : TADHERENTS

    Les 3 champs sont :
    Prénom Texte
    NomFamille Texte
    idA Numéro indenté automatiquement

    Le projet consiste à déclencher une procédure nommée TestSecondAfficheContenuTable_1
    d’afficher dans le label Label1.Text le résultat de la requête suivante :
    pour Prénom= "Marcel" et Ida=1 donner NomFamille.

    J’ai donc écrit ce qui suit dans un module avec :

    En en-tête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'Déclaretions des espaces système
    Imports System
    Imports System.Data
    Imports System.Data.Linq
    Imports System.Data.OleDb
    Puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Module ModuleEssai1
        Sub TestSecondAfficheContenuTable_1()
            'Récupérer dans la table Adhérents de la base Base_Donnee.mdb les données
            'puis les afficher dans le label1 du formulaire Form1
            'Creation de l'objet connection
            Dim Connection As New OleDb.OleDbConnection()
            'Parametrage de la chaine de connection
            Connection.ConnectionString = "provider=microsoft.jet.oledb.4.0;" _
            & "data source= " & Application.StartupPath & "\" & Base_Donnee.mdb;
            'Déclaration du DataSet
            Dim DtSet As New DataSet()
            'Declare le DataAdapter et selectionne tout les champs de la table Base_Donnee
            Dim AdapTContact As New OleDb.OleDbDataAdapter("select * from Base_Donnee", Connection)
            ' Remplissage du dataset
            AdapTContact.Fill(DtSet, "Base_Donnee")
            'Affectation des données recherchées à la variable requête
            Dim requête = From TADHERENTS In Base_DonneeDataSet.TADHERENTS.AsEnumerable() _
            Where (TADHERENTS.Prénom = "Marcel" And TADHERENTS.idA = 1) _
            Select TADHERENTS.NomFamille
            'Affichage du résultat dans le formulaire Form1
            My.Forms.Form1.Label1.Text = requête
        End Sub
    End Module
    A l’exécution de la procédure, un message d’erreur est généré pour la donnée Base_DonneeDataSet :
    le nom ‘Base_DonneeDataSet’ n’est pas déclaré.

    Pourriez-vous m’éclairer sur les raisons de cet incident et m’indiquer le remède à y apporter ?

    Je vous remercie infiniment pour votre réponse.

    Cordialement

    BG

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Ben c'est quoi d'après toi, Base_DonneeDataSet ?
    Je suppose que c'est un DataSet que tu as créé avec le designer ?

  3. #3
    2o
    2o est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Précisions
    Merci Tomlev pour ta réponse.

    Oui, Base_DonneeDataSet est effectivement un DataSet que j'ai créé avec le designer.

    Cependant, j'ai commis une erreur dans les lignes de programme qui précèdent son utilisation, erreur que je n'arrive pas à déterminer, vu mon trop peu d'expérience en VB.

    Lors de la compilation avant exécution, VB me renvoie un message d'erreur concernant ce DataSet Base_DonneeDataSet. Le message est le suivant : le nom ‘Base_DonneeDataSet’ n’est pas déclaré.
    C' est très clair, j'en conviens.

    Après avoir paramétrer la chaîne de connexion
    Connection.ConnectionString = "provider=microsoft.jet.oledb.4.0;" _
    & "data source= " & Application.StartupPath & "\" & Base_Donnee.mdb;

    après avoir déclarer le DataSet
    Dim DtSet As New DataSet()

    je crois comprendre qu'intervient ensuite la déclaration du nom du DataSet Base_DonneeDataSet.

    Apparemment, il ne suffit pas de paramétrer la chaine de connexion avec le nom de la base Base_Donnee.mdb pour que VB comprenne qu'elle est la base sur laquelle porte le traitement des données.

    Or je n'ai pas trouvé ou su trouver dans les tutoriels, voire comprendre

    - d'une part le schéma logique détaillé du raisonnement à suivre pour communiquer correctement avec une base Access ou autres, puisqu'il me manque un paramètre

    - d'autre part la syntaxe de la déclaration du nom du DataSet lui-même.

    Je tourne en rond depuis une semaine. C'est pour cette raison que je fais appel au savoir faire de plus chevronnés que moi.

    Cordialement

    BG

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    OK... dans ton code, tu initialises DtSet comme un DataSet non typé. Il faudrait que ce soit une instance de Base_DonneeDataSet (dataset typé généré par le DataSet), donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim DtSet As New Base_DonneeDataSet()
    Ensuite, dans ta requête tu utilises Base_DonneeDataSet comme si c'était une variable, alors que c'est un type. Il faut utiliser l'instance que tu as créée (sinon pourquoi l'avoir créée ?)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim requête = From TADHERENTS In DtSet.TADHERENTS.AsEnumerable()...
    Enfin, tu affectes le résultat de la requêtes à la propriété Text d'un Label : ça n'a pas de sens car la requête peut très bien renvoyer plusieurs éléments. Si tu veux afficher le premier tu peux faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    My.Forms.Form1.Label1.Text = requête.FirstOrDefault()

  5. #5
    2o
    2o est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Merci à toi Tomlev pour la réponse.
    Je l'étudie des que possible.

    Il est des notions qu'ils me faut réviser.
    J'ai dû mélanger quelque chose.
    Merci d'en attirer mon attention.

    BG

Discussions similaires

  1. [AC-2010] Comment connecter crystal report avec une base access dynamiquement ?
    Par hamza_azerty dans le forum Access
    Réponses: 1
    Dernier message: 26/08/2018, 10h29
  2. [AC-2000] Récupération de table d'une base Access 2010 sur base Access 2000
    Par chahnou dans le forum Access
    Réponses: 5
    Dernier message: 03/03/2015, 07h15
  3. [AC-2010] conversion d´une base Access en une base Access web
    Par Bubar49 dans le forum Access
    Réponses: 0
    Dernier message: 03/05/2012, 12h46
  4. Connecter un rapport Crystal à une base ACCESS
    Par capitaine dans le forum ASP.NET
    Réponses: 1
    Dernier message: 14/12/2007, 16h43
  5. Declarer une base access ds SQL server
    Par Bjuice2 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/07/2005, 17h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo