Le grenier Access

Aller au contenu | Aller au menu | Aller à la recherche

mercredi 22 octobre 2008

Importation d'un fichier DBF

J'essaie d'importer un fichier dBase (au format DBF) par la commande Fichier/Données externes/Importer. J'obtiens l'erreur suivante : "Le moteur de base de données Jet n'a pas pu trouver l'objet 'abcdefghijklmn.dbf'. Assurez-vous que l'objet existe et que vous avez correctement saisi son chemin d'accès." Or le fichier existe, et le chemin est correct. Que se passe-t-il ?

Le bug

Je viens encore de me faire piéger par ce détail, en essayant d'importer des données INSEE au format dBase :-)
Pour information, le fichier s'appelle comsimp2008.dbf.

La solution

Donc si ça peut aider d'autres personnes : dBase reste lié à la période "MS-DOS". Et à cette époque, les noms de fichiers étaient au format 8.3 (8 caractères, un point, 3 caractères d'extension).

Si vous devez importer un fichier dBase dans Access, il faut que le fichier dBase respecte ce format. Dans l'exemple ci-dessus, renommez votre fichier communes.dbf, ou com.dbf, et ça passe. C'est tout, mais il fallait y penser !

vendredi 18 avril 2008

Simplifier les noms de tables liées

Vous avez vu dans cet article comment lier des tables Oracle à un frontal Access (le principe étant sensiblement le même pour d'autres moteurs comme MySQL ou PostgreSQL). Le problème est que, dans ce cas, le nom des liaisons reprend généralement le schéma de la base de données d'origine. Comment simplifier ces noms rapidement ?

Un exemple ?

Dans l'exemple ci-dessous, les tables tblActeurs, tblClients et autres sont utilisées par un utilisateur ORAVID, ce qui équivaut à un schéma dans la base Oracle (en gros : un espace de travail cloisonné). En SQL, la table serait référencée par ORAVID.tblActeurs ; par contre, la liaison Access devient ORAVID_TBLACTEURS.

L'inconvénient est que les objets Access (requêtes, formulaires, états ou code VBA) qui vont reposer sur ces liens vont utiliser ces noms longs, ce qui n'est pas vraiment pratique. Rien ne vous empêche de les modifier (notamment d'enlever ORAVID_, dans l'exemple ci-dessus), pour simplifier votre travail.

Enlever le préfixe de façon automatique

La première solution consiste à renommer chaque liaison manuellement : clic droit / Renommer (ou F2) sur une liaison, puis suppression du préfixe ORAVID_. Mais on peut faire mieux si le nombre de tables est important :

  1. Créez un nouveau module standard dans votre base de données (onglet Modules).
  2. Recopiez le code ci-dessous dans ce module, puis enregistrez le module.
' ---
' SUPPRESSION DE PREFIXE DANS UN NOM DE TABLE
' ---
Function RenommerTables(ByVal strPrefixe As String)
Dim tdf As DAO.TableDef

' Supprimer le préfixe des tables
strPrefixe = UCase(strPrefixe)
For Each tdf In CurrentDb.TableDefs
  If UCase(Left(tdf.Name, Len(strPrefixe))) = strPrefixe Then
    tdf.Name = Mid(tdf.Name, Len(strPrefixe) + 1)
  End If
Next

' Mettre à jour la fenêtre de base de données
Application.RefreshDatabaseWindow
End Function
Le bout de code ci-dessus parcourt toutes les tables (ou liaisons) de la base de données Access, à la recherche d'un préfixe donné. Si le nom de la table démarre par ce préfixe, celui-ci est supprimé. Pour appeler la fonction :
  1. Faites apparaître la fenêtre Exécution (CTRL + G).
  2. Tapez dans cette fenêtre :
RenommerTables "ORAVID_"
...si ORAVID_ est le préfixe à enlever (notez que le souligné fait partie du préfixe, car il doit aussi être supprimé).
Important
L'exemple de code ci-dessus fait appel à la bibliothèque DAO (Microsoft DAO Object Library). Cette bibliothèque doit être associée à votre base de données pour que le programme fonctionne.
 
Pour plus de détails sur les références, consultez cette page.

mercredi 26 mars 2008

Se connecter à des tables Oracle depuis Access

Une base Access peut se connecter à d'autres moteurs de bases de données (SQL Server, Oracle, MySQL, PostgreSQL, etc.) par différents mécanismes. Dans cet article, nous allons voir comment nous connecter à un serveur Oracle au travers d'une passerelle ODBC.

Lire la suite...

dimanche 26 août 2007

Tables en lecture seule

Je connecte des tables externes (SQL Server, Oracle, MySQL, PostgreSQL, etc.) à ma base Access, mais celles-ci sont ouvertes en lecture seule : impossible d'ajouter, modifier ou supprimer des données...


  • Vérifiez dans le logiciel d'origine (SQL Server, Oracle, MySQL, etc.) si chaque table dispose d'une clef primaire. Le problème vient souvent de là.
  • Si c'est déjà le cas, vérifiez aussi les droits attribués aux tables d'origine.

Connexion MySQL

Peut-on lier des bases MySQL ou PostgreSQL à Access ?


Oui. Dans les deux cas, la procédure est sensiblement la même :
  1. Installez sur votre ordinateur un pilote (driver) ODBC pour MySQL ou PostgreSQL.
    Vous trouverez ces drivers sur les sites qui vous fournissent déjà MySQL et PostgreSQL.
  2. Configurez le driver.
    Sur Windows 9x, cette configuration se fait dans Démarrer / Paramètres / Panneau de configuration, puis via l'icône Sources de données DBC. Il s'agit alors d'ajouter une source de données système. Sur Windows XP et Vista, vous trouverez cette icône dans la catégorie Outils d'administration du Panneau de configuration.

    Pour configurer complètement le driver, MySQL et PostgreSQL nécessiteront la saisie d'un nom d'utilisateur ainsi que d'un mot de passe. Consultez la documentation de ces logiciels pour les détails (à titre indicatif, l'utilisateur par défaut sur MySQL est root, son mot de passe est vide).
  3. Vérifiez ensuite que le serveur MySQL ou PostgreSQL est en cours d'exécution. 
  4. Enfin, démarrez Access, et liez vos tables au serveur via le menu Fichier / Données externes / Lier les tables.

Remarques

  • Si le serveur est celui d'un hébergeur Internet, vérifiez que ce dernier autorise une connexion depuis l'extérieur, faute de quoi la liaison sera bien sûr impossible.
  • D'autre part, pour que vous puissiez ajouter et modifier des données, faites en sorte que chaque table MySQL / PostgreSQL ait une clef primaire. La passerelle ODBC appréciera !

Access et MySQL ou PostgreSQL

Peut-on convertir une base Access au format MySQL ou PostgreSQL ?

Oui. Deux techniques sont envisageables :

Fichier texte

Traduisez les définitions de vos tables Access au format SQL (CREATE TABLE...) et faites-en un fichier texte (du style tables.sql). Ensuite, du côté de MySQL ou PostgreSQL, tapez la commande qui intègrera ce fichier texte dans la base de destination de façon à recréer les tables (consultez la documentation de ces systèmes pour plus de détails).

Vous pouvez procéder de même pour les données, en tapant dans un fichier texte des commandes SQL d'insertion (INSERT INTO), commandes qui seront ensuite exécutées dans la base d'arrivée.

Attention : la syntaxe des commandes SQL varie généralement un peu d'un système à un autre. Le format des dates, notamment, est différent dans Access et dans MySQL. Pensez à faire les conversions !

Passerelle ODBC

L'autre solution consiste à installer sur votre machine un pilote (ou driver) ODBC gérant la connexion entre Access et MySQL ou PostgreSQL. Vous trouverez ces drivers sur les sites concernés (adresses plus bas).

Une fois le driver en place, une connexion est possible entre Access et votre base d'arrivée. Vous pouvez alors recréer les tables de plusieurs manières : en manuel depuis Access, via un fichier texte comme expliqué plus haut, ou via des requêtes "SQL Pass Through".

Le transfert des données sera plus facile que par fichier texte, puisqu'il peut s'effectuer par des requêtes Ajout, depuis l'interface graphique d'Access.

Notes

Dans les deux cas, il existe des passerelles automatisées en Visual Basic, qui vous feront gagner un temps précieux dans l'étape de transfert. Consultez les sites www.mysql.com ou www.postgresql.org, ou faites une recherche Google en tapant par exemple comme mots-clefs : access mysql converter

Des bases comme MySQL ou PostgreSQL font uniquement du stockage de données, elles ne comportent pas nécessairement d'interface graphique. Les formulaires et états ne peuvent donc être convertis.