Access
 sql >> Base de données >  >> RDS >> Access

Ouverture ou liaison de texte ou d'Excel en tant que sources de données dans Microsoft Access

Ouvrir ou lier du texte ou Excel en tant que sources de données dans Microsoft Access

Access est un outil phénoménal pour travailler avec de nombreuses sources de données. Vous savez peut-être depuis longtemps que vous pouvez facilement importer ou exporter des données dans un large éventail de formats. Cependant, nous avions un scénario dans lequel nous devions traiter des données provenant de sources de données externes. Le traitement s'exécute fréquemment, de sorte que l'importation de données gonflerait rapidement le fichier frontal. De plus, dans cette situation, la création d'une deuxième copie du fichier Access en tant que base de données temporaire pour éviter le gonflement n'était pas une option viable. Quels choix avions-nous ? C'est là que nous avons remarqué un manque d'informations concernant l'ouverture ou la liaison à des sources de données non relationnelles. Alors, approfondissons ce sujet.

Cette série de blogs vise à combler une lacune béante dans la documentation de Microsoft sur l'ouverture ou la liaison à du texte ou à Excel en tant que source de données dans les applications Access. Connectionstrings.com et d'autres sites fournissent des fils d'Ariane. Vous pouvez également généralement découvrir certains des comportements en utilisant les assistants d'Access, puis en examinant les objets par la suite. Cependant, la supposition n'est pas très utile. Par conséquent, cette série d'articles discutera de la façon d'utiliser les fichiers Excel et texte comme sources de données sans nécessairement importer ou exporter les données.

Veuillez noter que la série ne serait pas possible sans l'aide de Dan Haught et Jim Ferguson, co-auteurs du Guide du programmeur du moteur de base de données Microsoft Jet. Même si le livre est épuisé depuis longtemps, il reste un livre précieux si vous travaillez beaucoup avec DAO.

Accès et sources de données non relationnelles

Access a toujours pris en charge l'utilisation de la méthode d'accès séquentiel indexé (ISAM) comme source de données potentielle, ce qui lui permet d'importer, de lier ou d'exporter vers des sources de données non relationnelles telles que des fichiers texte ou des feuilles de calcul Excel et même d'autres formats de fichiers tels que Exchange, dBASE ou FoxPro. DAO rend cela possible car il dispose des pilotes ISAM qui peuvent fonctionner avec ces formats. Cependant, je vais me concentrer sur les fichiers texte et les feuilles de calcul Excel car ce sont des sources plus courantes avec lesquelles nous avons besoin d'Access pour travailler. Si tout ce que vous avez déjà fait est d'importer des données à l'aide de l'onglet Données externes via Access, cela peut sembler magique, mais en réalité, toutes les fonctionnalités d'Access sont disponibles pour nous en tant que programmeurs au niveau de DAO.

Alors oublions que les sorciers existent. Oublions les icônes brillantes sur le ruban. Oublions qu'il y a des tables liées. Utilisons simplement le code VBA pour travailler avec des sources de données, à partir de rien. Peut-on? Absolument. Tout d'abord, nous examinerons la différence entre lier et ouvrir une source de données.

Lien contre ouverture

Pour aider à la terminologie, nous devons faire une distinction entre lier vs ouverture . La liaison signifie que nous créons une table liée qui est maintenant une "table" Access que nous pouvons utiliser comme n'importe quelle autre table Access. En tant que tel, il s'agit d'un objet permanent défini dans l'application Access. En revanche, l'ouverture se produit lorsque nous accédons directement à la source de données en utilisant OpenDatabase de DAO méthode. De par sa nature, l'ouverture d'une source de données se fera généralement via le code VBA comme vous le verrez bientôt.

Configuration des exemples et du code

Étant donné que la série consiste à comprendre les moindres détails de la façon dont Access interagit avec ces sources de données, nous nous concentrerons d'abord sur l'ouverture au lieu de la liaison ici. Alors, comment ouvrir une feuille de calcul Excel ? Ce n'est sûrement pas une base de données? Configurons un exemple minimum pour commencer. Dans un dossier, C:\Links , nous allons créer une feuille de calcul Excel et un fichier de base de données Access, nommé Products.xlsx et Sample.accdb , respectivement :

Le Products.xlsx est une simple feuille de calcul avec une seule feuille avec ce contenu :

Avec cela, ajoutons du code VBA dans le Sample.accdb . Dans un module standard :

Public Sub OpenExcel()
    Dim db As DAO.Database
    
    Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx")
    
    Dim tdf As DAO.TableDef
    For Each tdf In db.TableDefs
        Debug.Print tdf.Name
        
        Dim fld As DAO.Field
        For Each fld In tdf.Fields
            Debug.Print fld.Name,
        Next
        Debug.Print
        
        Dim rs As DAO.Recordset
        Set rs = tdf.OpenRecordset
        Do Until rs.EOF
            For Each fld In rs.Fields
                Debug.Print fld.Value,
            Next
            Debug.Print
            rs.MoveNext
        Loop
    Next
End Sub

Si nous exécutons le code, nous devrions obtenir la sortie suivante dans notre fenêtre immédiate :

Products      Count         
Apples         3            
Bananas        5            
Figs           8            

Donc, même si Excel n'est pas une "base de données" (et si vous utilisez Excel comme base de données, honte à vous 😉 ), nous pouvons toujours prétendre qu'il s'agit d'une "base de données" et parcourir ses "tables" et "enregistrements" en utilisant des objets DAO familiers. Toute la magie vient de cette chaîne de connexion :

Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx

Mais cela ne doit pas être magique. La série disséquera les parties des chaînes de connexion pour les pilotes de fichiers Excel et texte. Commençons donc par comparer à la chaîne de connexion ODBC que vous connaissez peut-être mieux.

Types de sources de données

Si vous avez établi un lien vers des sources de données ODBC, vous avez probablement remarqué que les chaînes de connexion ODBC ressemblent généralement à ceci :

ODBC;DRIVER=...;SERVER=...;DATABASE=...;

Je me demandais pourquoi cela commençait toujours par ODBC ? Cette première partie est ce que DAO utilise pour identifier le type de source. Cependant, comme Excel n'est pas une base de données ODBC, nous devons utiliser Excel 12.0 Xml pour indiquer que DAO doit utiliser un pilote Excel particulier. Le reste de la syntaxe de la chaîne de connexion est alors influencé par le pilote que nous utilisons dans la première partie de la chaîne de connexion.

Voici une liste partielle des types de sources de données possibles que MS Access reconnaîtra :

  1. Excel 8.0 :97-2003 fichiers xls
  2. Excel 12.0 :fichiers xlsb
  3. Excel 12.0 Xml :fichiers xlsx
  4. Text  :Tous les fichiers texte

Il existe d'autres sources de données, notamment SharePoint, Exchange ou FoxPro, mais je ne vais pas les couvrir. Même ainsi, cela démontre qu'Access est capable de travailler avec ces sources comme une base de données et cela peut nous permettre d'utiliser DAO pour lire le contenu. Notez que lorsque nous utilisons des sources de données non relationnelles, toutes les opérations peuvent ne pas être entièrement prises en charge. Par exemple, vous ne pouvez pas être autorisé à modifier une ligne existante même si vous pouvez insérer une ligne.

Cependant, un défi avec l'ouverture ou la liaison à une source de données signifie que vous ne pouvez pas simplement importer les données, puis modifier le schéma après pour répondre à vos besoins. Par conséquent, vous pouvez constater que le schéma par défaut que vous obtenez lors de la liaison ne sera pas ce que vous voulez. Pour cette raison, une compréhension approfondie de la chaîne de connexion sera importante. Par conséquent, vous en apprendrez plus sur les détails des chaînes de connexion pour les fichiers Excel et texte dans les prochains articles.

Conclusion

Vous avez vu qu'au lieu d'importer les données externes, nous pouvons choisir de lier ou même d'ouvrir une source de données externe à l'aide de DAO. La possibilité de lier ou d'ouvrir une source de données externe est largement sous-utilisée. Cependant, la possibilité de lier ou d'ouvrir ne doit pas être ignorée car cela peut ouvrir de nouveaux scénarios, comme éviter les ballonnements résultant de l'importation, en particulier dans un environnement verrouillé. Dans le prochain article, j'aborderai les différents paramètres utilisés par le pilote Excel pour construire une chaîne de connexion valide. Dans les articles suivants, j'examinerai le pilote de fichier texte et les paramètres de connexion. Dans le dernier article, nous mettrons tout cela ensemble.