XLDB : Une base de données Excel via ODBC

www.vbfrance.com/code.aspx?id=29468

Par Patrice Dargenton

patrice.dargenton@free.fr

http://patrice.dargenton.free.fr/index.html

www.vbfrance.com/listeauteur2.aspx?ID=1124

Version 1.0 du 13/02/2005

Ce logiciel permet de faire des requêtes SQL sur un fichier Excel vu en tant que base de données grâce à ODBC. Chaque feuille Excel est vue en tant que table de la base, il suffit que la première ligne contiennent les entêtes des colonnes pour pouvoir préciser les champs dans la requête SQL. Si la première ligne ne contient pas les entêtes, on peut quand même lire toute la feuille Excel d'un coup.

On peut même faire des joints entre deux tables pour récupérer un tableau regroupant les données des deux tables via un champ pivot (ce qui équivaut sous Access à une relation sans intégrité référentielle, c'est-à-dire qu'on ne peut pas forcer l'existence de la valeur pivot dans l'autre table).

La chaîne de connexion ODBC est directe sur le fichier Excel, mais on peut aussi indiquer un fichier .dsn pour paramétrer la connexion à l'extérieur du logiciel, ce qui permet en théorie d'indiquer n'importe quelle source de données ODBC, même après avoir compilé le programme. Le problème, c'est que la syntaxe SQL diffère légèrement mais fatalement de la syntaxe SQL normale : il faut indiquer chaque table avec un $ à la fin et donc la mettre entre crochet, par exemple "Select * From [Article$]". Cette syntaxe est complètement idiote (sous Access on n'utilise les crochets que pour les noms de table contenant des espaces) et compromet l'utilisation de ce principe du fichier .dsn pour fonctionner avec une source de données ODBC quelconque. En fait, l'utilité principale de ce système n'est pas vraiment d'utiliser Excel en tant que base de données (limité à 65000 lignes, pas d'intégrité référentielle, pas de contrôle des doublons, ...), mais plutôt de lire très rapidement le contenu d'un fichier Excel.

 

Notes :

- On peut saisir des valeurs à la volée dans Excel et faire des requêtes sans avoir à sauver le fichier (ce qui est impossible avec une vrai base de données) ;

- Selon leur format, le contenu des champs Excel peuvent dépendre des paramètres régionaux de Windows au moment de la requête : séparateur décimal ou monétaire, date, ... vérifiez donc plusieurs configurations avant de distribuer un logiciel...

 

Limitations :

- Bug : On reçoit l'erreur -2147467259 (80004005 : "L'ordre de tri sélectionné n'est pas géré par le système d'exploitation" ou "Selected collating sequence not supported by the operating system") lors du premier lancement dans l'IDE de Visual Basic (mais pas pour les programmes compilés) pour des requêtes autres que "Select * From Table1", par exemple avec des requêtes du type "Select Champ1 From Table1"). On a également cette erreur pour des joints entre plusieurs tables, voir l'article MSDN :

http://support.microsoft.com/kb/246167/en-us

- Attention au mélange des données numériques et textes dans une même colonne : ce mélange risque de produire une perte de données car l'extraction ODBC ne peut pas obtenir simultanément l'un et l'autre des 2 types de données. Solution : modifier le fichier Excel avec un format Texte ET convertir les données de la colonne via le menu Données : Convertir... en précisant le format Texte à la troisième et dernière étape de l'assistant conversion de données (pourtant, lorsque l'on enregistre le fichier Excel en .csv, cela fonctionne : Excel effectue cette conversion à ce moment là) ;

Description du bug : Excel Values Returned as NULL :

http://support.microsoft.com/kb/194124/EN-US/

Description de la solution : Format existing numbers as text : Three ways to convert numbers to text :

http://office.microsoft.com/en-us/assistance/HA011366191033.aspx

 

Voir aussi :

DBComp2 : le comparateur de structure de base de données Access (ou ODBC) avec Windiff

  www.vbfrance.com/code.aspx?ID=17847 : DBComp2.05

 

ODBCDotNet : Extraire des requêtes ODBC dans un tableau de tableaux de String

  www.vbfrance.com/code.aspx?ID=34701

 

XL2Csv : Convertir un fichier Excel en fichiers Csv (ou en 1 fichier txt, ce qui peut servir à comparer le contenu de fichiers Excels via Windiff)

  www.vbfrance.com/code.aspx?ID=44827