none
Comment programmer le choix d'une base de données Access RRS feed

  • Question

  • Je suis en train de développer une application pour gérer des fichiers individuels que j'ai créé sous Access. J'aurais besoin de pouvoir choisir pour exploitation une de ces bases. Je voudrais savoir comment écrire le code pour créer le bindingsource et les affectations aux textbox.

    Merci.

    samedi 16 novembre 2013 15:56

Réponses

  • Bonjour

    Vous avez le code pour récupérer les tables dans la BD Access.  

    Une solution c'est de remplir un ComboBox avec les noms de ces tables. Apres vous pouvez utiliser une OleDbDataAdapter pour remplir un DataSet/DataTable selon la table sélectée dans le ComboBox avec les données continues dans la table :

    http://msdn.microsoft.com/fr-fr/library/system.data.oledb.oledbdataadapter(v=vs.110).aspx

    Vous bindez le DataTable a un DataGrid pour pouvoir modifier les informations.

    Pour la mise à jour dans la DB vous pouvez utiliser OleDbCommandBuilder:

    http://msdn.microsoft.com/fr-fr/library/system.data.oledb.oledbcommandbuilder(v=vs.110).aspx

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 18 novembre 2013 14:42
  • Comme ça:

    Dim dbc As OleDbCommandBuilder = New OleDbCommandBuilder(oda)
    dbc.QuotePrefix="["
    dbc.QuoteSuffix="]"
    dtx = New DataTable()

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.


    vendredi 22 novembre 2013 13:30
  • Bonjour,

    Si j'ai bien compris vous souhaitez proposer à l'utilisateur une liste des bases de données (fichiers access) ?

    Dans ce cas il suffit d'utiliser la méthode Directory.GetFiles() qui retourne les fichiers présent dans un répertoire. Par exemple :

    Dim bd As String()
    bd = Directory.GetFiles("C:\...\Répertoire\", "*.accdb")

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    dimanche 17 novembre 2013 16:01
    Modérateur
  • Bonjour,

    Voici comment récupérer la liste des tables dans un DataTable :

            Using connexion As OleDbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\...MaBD.accdb;Persist Security Info=False;")
                connexion.Open()
    
                Dim dt As DataTable
                dt = connexion.GetSchema("Tables")
    
            End Using

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    dimanche 17 novembre 2013 23:51
    Modérateur
  • Bonjour

    Ici vous avez un petit exemple : une forme avec un bouton et  un FileOpenDialog pour la sélection d’un fichier, un comboBox pour afficher les tables dans la BD Access et un DataGrid pour afficher les informations.

    Imports System.Data
    Imports System.Data.OleDb
    Public Class Form1
        Private fileName As String
        Private oda As OleDbDataAdapter
        Private dtx As New DataTable()
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
                fileName = OpenFileDialog1.FileName
    
                Using connexion As OleDbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Persist Security Info=False;")
                    connexion.Open()
    
                    Dim restrictions() As String = New String(3) {}
                    restrictions(3) = "Table"
    
                    Dim dt As DataTable
                    dt = connexion.GetSchema("Tables", restrictions)
                    ComboBox1.ValueMember = "TABLE_NAME"
                    ComboBox1.DisplayMember = "TABLE_NAME"
                    ComboBox1.DataSource = dt
    
                End Using
            End If
    
        End Sub
    
        Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
            If ComboBox1.SelectedIndex = 0 Then Return
    
            Dim TableName As String = ComboBox1.SelectedValue
    
            oda = New OleDbDataAdapter("select * from  " & TableName, "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Persist Security Info=False;")
    
            Dim dbc As OleDbCommandBuilder = New OleDbCommandBuilder(oda)
    
            dtx = New DataTable()
            oda.Fill(dtx)
            DataGridView1.DataSource = Nothing
    
            DataGridView1.DataSource = dtx
    
        End Sub
    End Class

    Cordialememnt,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.


    mercredi 20 novembre 2013 07:53
  • Merci pour votre réponse mais je vous avoue honnêtement que je ne sais pas quoi en faire. A quel moment ou dans quelle instruction dois-je les placer ? Pourquoi avoir compliqué à ce point VB2010 alors que sousVB98 c'était beaucoup plus simple ?

    Merci d'avance pour votre réponse.

    vendredi 22 novembre 2013 13:19
  • Ça sera un peu plus difficile.

    Le plus probable dans la structure Access vous avez un champ texte d’une certaine longueur et vous avez saisi plusieurs caractères.

    Souvent c’est difficile de trouver exactement le champ qui pose des problèmes et on n’est jamais sûr que on les a trouvé tous. 

     Vous contrôlez la structure de votre base de données ? Si oui,  simplement permettre plusieurs caractères dans les camps d’une table fera le travail.

    Cordialement,

     


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    vendredi 22 novembre 2013 14:27

Toutes les réponses

  • Bonjour,

    Si j'ai bien compris vous souhaitez proposer à l'utilisateur une liste des bases de données (fichiers access) ?

    Dans ce cas il suffit d'utiliser la méthode Directory.GetFiles() qui retourne les fichiers présent dans un répertoire. Par exemple :

    Dim bd As String()
    bd = Directory.GetFiles("C:\...\Répertoire\", "*.accdb")

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    dimanche 17 novembre 2013 16:01
    Modérateur
  • Merci pour votre réponse. Je précise ma demande : j'ai créé une base données dans laquelle je dispose d'un certains nombres de tables. Le but de ma demande est de pouvoir choisir et activer une de ces tables en fonction de mes besoins. Je désire ouvrir cette table, ajouter des enregistrements, les modifier ou les lister.

    Je vais essayer votre solution voir si elle me convient.

    Cordialement.

    dimanche 17 novembre 2013 21:06
  • Bonjour,

    Voici comment récupérer la liste des tables dans un DataTable :

            Using connexion As OleDbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\...MaBD.accdb;Persist Security Info=False;")
                connexion.Open()
    
                Dim dt As DataTable
                dt = connexion.GetSchema("Tables")
    
            End Using

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    dimanche 17 novembre 2013 23:51
    Modérateur
  • Merci pour la réponse. J'ai essayé votre astuce mais je ne sais pas quoi en faire. Quelles doivent être les opérations suivantes pour récupérer les données de la table sélectionnée ? J'ai beau essayer un tas de trucs et de fouiller l'aide, je ne m'en sort pas. C'était plus facile sous VB6 !

    Merci d'avance.

    lundi 18 novembre 2013 13:32
  • Bonjour

    Vous avez le code pour récupérer les tables dans la BD Access.  

    Une solution c'est de remplir un ComboBox avec les noms de ces tables. Apres vous pouvez utiliser une OleDbDataAdapter pour remplir un DataSet/DataTable selon la table sélectée dans le ComboBox avec les données continues dans la table :

    http://msdn.microsoft.com/fr-fr/library/system.data.oledb.oledbdataadapter(v=vs.110).aspx

    Vous bindez le DataTable a un DataGrid pour pouvoir modifier les informations.

    Pour la mise à jour dans la DB vous pouvez utiliser OleDbCommandBuilder:

    http://msdn.microsoft.com/fr-fr/library/system.data.oledb.oledbcommandbuilder(v=vs.110).aspx

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 18 novembre 2013 14:42
  • J'ai essayé de faire comme vous me l'indiquez. Je n'y comprend absolument rien et je n'arrive à rien. Les références que vous me donnez correspondent à des fonctions dans lesquelles il y a des paramètres que je ne sais pas déclarés. Je n'arrive pas à trouver une chronologie pour lier les actions. Je n'ai pas compris comment utiliser la commande GetFiles, bref, je nage complètement.

    Auriez-vous un exemple concret à me proposer ou au moins une chronologie dans les instructions. La programmation n'est pas mon métier, c'est juste un passe-temps de retraité. Les utilitaires que j'essaie de développer ne servirant jamais qu'à moi-même.

    Merci d'avance pour votre compréhension.

    mardi 19 novembre 2013 14:30
  • Bonjour

    Ici vous avez un petit exemple : une forme avec un bouton et  un FileOpenDialog pour la sélection d’un fichier, un comboBox pour afficher les tables dans la BD Access et un DataGrid pour afficher les informations.

    Imports System.Data
    Imports System.Data.OleDb
    Public Class Form1
        Private fileName As String
        Private oda As OleDbDataAdapter
        Private dtx As New DataTable()
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
                fileName = OpenFileDialog1.FileName
    
                Using connexion As OleDbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Persist Security Info=False;")
                    connexion.Open()
    
                    Dim restrictions() As String = New String(3) {}
                    restrictions(3) = "Table"
    
                    Dim dt As DataTable
                    dt = connexion.GetSchema("Tables", restrictions)
                    ComboBox1.ValueMember = "TABLE_NAME"
                    ComboBox1.DisplayMember = "TABLE_NAME"
                    ComboBox1.DataSource = dt
    
                End Using
            End If
    
        End Sub
    
        Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
            If ComboBox1.SelectedIndex = 0 Then Return
    
            Dim TableName As String = ComboBox1.SelectedValue
    
            oda = New OleDbDataAdapter("select * from  " & TableName, "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Persist Security Info=False;")
    
            Dim dbc As OleDbCommandBuilder = New OleDbCommandBuilder(oda)
    
            dtx = New DataTable()
            oda.Fill(dtx)
            DataGridView1.DataSource = Nothing
    
            DataGridView1.DataSource = dtx
    
        End Sub
    End Class

    Cordialememnt,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.


    mercredi 20 novembre 2013 07:53
  • Merci pour votre eemple. Je viens de le faire fonctionner et il me fait comprendre le processus. Je vais enfin pouvoir continuer mon application en me faisant moins de noeuds au cerveau.

    Cordialement

    mercredi 20 novembre 2013 12:55
  • J'ai utilisé et adapté votre solution et elle marche très bien. Par contre, j'ai un autre problème.

    Je voudrais ajouter des enregistrements dans la table sélectionnée mais j'ai des soucis pour y arriver. Pour ce faire, j'utilise les instructions suivantes :

         Dim Enreg as DataRow

         Enreg=DataSet.NewRow

         Enreg.Item("Champs")=Valeur

         Try

              DataSet.Rows.Add(Enreg)

              Dim Ligne as integer=OleDbDataAdapter.Update(DataSet)

         catch ...

         End Try

    Et, à chaque fois, j'ai droit à un message d'erreur : Erreur de syntaxe dans l'instruction INSERT INTO.

    J'ai cherché dans l'aide mais je n'ai pas trouvé pourquoi j'ai droit à ce message. Est-ce que j'utilise la bonne solution, est-ce que les instructions sont bien libellées, je ne comprend pas.

    Merci d'avance pour un coup de main supplémentaire.

    Cordialement.

    jeudi 21 novembre 2013 15:58
  • Essayez de ajouter :

    dbc.QuotePrefix="[";
    dbc.QuoteSuffix="]";

    C'est nécessaire quand dans les noms de tables ou champs vous avez d'espaces ou autres caractères spéciales.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    vendredi 22 novembre 2013 07:44
  • Merci pour votre réponse mais je vous avoue honnêtement que je ne sais pas quoi en faire. A quel moment ou dans quelle instruction dois-je les placer ? Pourquoi avoir compliqué à ce point VB2010 alors que sousVB98 c'était beaucoup plus simple ?

    Merci d'avance pour votre réponse.

    vendredi 22 novembre 2013 13:19
  • Comme ça:

    Dim dbc As OleDbCommandBuilder = New OleDbCommandBuilder(oda)
    dbc.QuotePrefix="["
    dbc.QuoteSuffix="]"
    dtx = New DataTable()

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.


    vendredi 22 novembre 2013 13:30
  • A priori, il y a de l'évolution ! Je n'ai plus l'erreur précédente mais une nouvelle qui me dit que les champ est trop petit et que je dois coller moins de données ! Ca devient énervant, je ne change pas les anciennes instructions mais les erreurs changent quand à elles !!!!!

    Un petit coup de main ?

    Merci

    vendredi 22 novembre 2013 14:15
  • Ça sera un peu plus difficile.

    Le plus probable dans la structure Access vous avez un champ texte d’une certaine longueur et vous avez saisi plusieurs caractères.

    Souvent c’est difficile de trouver exactement le champ qui pose des problèmes et on n’est jamais sûr que on les a trouvé tous. 

     Vous contrôlez la structure de votre base de données ? Si oui,  simplement permettre plusieurs caractères dans les camps d’une table fera le travail.

    Cordialement,

     


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    vendredi 22 novembre 2013 14:27
  • Après contrôle de mes longueurs de champs, je me suis aperçu que je les avaient dimensionnés sans tenir compte du formatage que j'effectuais ensuite sur les données ! Quand on vieillit, la tête suis mal !!!!! Merci pour tous vos conseils et réponses et j'espère ne plus vous questionner pour cette application.

    Cordialement

    vendredi 22 novembre 2013 15:32