Aller au contenu

Ouvrir un fichier microsoft access


Messages recommandés

Posté(e)

Bonjour,

 

J'ai lu sur ce forum qu'il était possible d'ouvrir un fichier excel avec visuallisp. Est-il possible d'en faire autant avec microsoft access ?

Si oui comment faire pour ouvrir le fichier "test" qui se trouve sur le répertoire c: par exemple ?

 

Merci par avance.

Posté(e)

Merci,

 

Je viens de tester le programme après avoir pris soin de changer les chemins d'accès.

 

Mais ça ne marche pas, quand je l'execute il me met le message suivant dans la ligne de commande : "; erreur: Erreur Automation [Microsoft][Gestionnaire de pilotes ODBC] Source de données introuvable et nom de pilote non spécifié".

 

Sait tu de quoi ça peut venir ?

Posté(e)

J'ai créé la source de données système myMDB comme dans le lien que tu m'as donné et cette fois ci ça me met le message d'erreur suivant:

 

 

; erreur: Erreur Automation [Microsoft][Pilote ODBC Microsoft Access] Ressources système insuffisantes.

Posté(e)

Très difficile à dire. Tous les arguments de type chaîne de caractère peuvent provoquer une erreur si la chaîne n'est pas valide.

 

As tu essayer de déboguer avec l'éditeur Visual LISP pour trouver d'où vient l'erreur ?

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Aparemment ça vient de la ligne suivante :

 

(vlax-invoke-method ConnectionObject

"Open"

"DSN=myMDB;"

"admin"

""

adok-adConnectUnspecified

)

Posté(e)

As tu essayé en utilisant, à la place de cette expression, celle qui est commentée juste au dessus ?

 

(vlax-invoke-method
 ConnectionObject
 "Open"
 (strcat "Driver={Microsoft Access Driver (*.mdb)};DBQ="
  MDB_File
 )
 "admin"
 ""
 adok-adConnectUnspecified
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Salut

 

Pour me connecter via ADO, j'avais plutôt utilisé ceci

(defun lancer_ado()
 (vlax-create-object "ADODB.Connection")
)

(setq activex (lancer_ado))

Mais juste pour jouer avec un fichier de type Excel. Je sais que c'est faisable avec access.

 

Sinon, tu as un excellent site

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Bonjour Patrick_35,

 

Je n'y connais pas grand chose (si ce n'est rien) dans ce type de procédure, d'où cette question:

 

Est-on obligé de se connecter par ADO pour simplement ouvrir un fichier access ?

 

Mon but étant simplement d'ouvrir ce fichier sans forcément y lier des données.

 

N'y a t-il pas une procédure plus "simple" ?

Posté(e)

Bonjour,

 

Exportes la table (requête) en CSV et lis la comme un fichier texte. Ce n'est pas très propre, mais beaucoup plus simple.

 

Sinon dans ta config ODBC, en cliquant sur le bouton Avancé, est-ce que tu as bien mis admin comme nom d'utilisateur, sinon si tu laisses le nom d'utilisateur vide, peut-être que dans ta command de vlax-invoke-method, il faut laisser le nom sous forme "" au lieu de "admin"

 

Sinon as-tu essayé de connecter ta source de données odbc directement sous AutoCAD via DbConnect pour voir si ça fonctionne. Car si AutoCAD n'y parvient pas, tu n'y arriveras pas non plus via vlisp.

 

Olivier

Posté(e)

Le problème, c'est que mon fichier access contient des macros qui me permettent justement d'exporter des fichiers textes (réimportés dans autocad ensuite). Je crains fort qu'au format .csv ces macros ne soient plus disponibles...

Posté(e)

Javais complété ma réponse précédente pendant ta réponse, je ne sais pas si tu l'as vu

 

"Sinon dans ta config ODBC, en cliquant sur le bouton Avancé, est-ce que tu as bien mis admin comme nom d'utilisateur, sinon si tu laisses le nom d'utilisateur vide, peut-être que dans ta command de vlax-invoke-method, il faut laisser le nom sous forme "" au lieu de "admin"

Sinon as-tu essayé de connecter ta source de données odbc directement sous AutoCAD via DbConnect pour voir si ça fonctionne. Car si AutoCAD n'y parvient pas, tu n'y arriveras pas non plus via vlisp."

 

 

Olivier

Posté(e)

Quelle version de Windows, Quelle version d'AutoCAD?

 

Sur ma machine Windows 7 64bits, AccessRuntime 2010 64bits, puis Office 2007 32bits, AutoCAD MAP 2012 64bits => pas de souci pour me connecter à une base MDB via ODBC depuis AutoCAD via DbConnect.

 

Olivier

Posté(e)

Salut,

 

En fait je cherche juste un bout de code qui me permette d'ouvrir une base de données Microsoft access.

 

Lorsque je travaille sous autocad, je travaille sur une commune. Dans chaque dessin, il y a une commune différente (il peut aussi y avoir plusieurs communes dans un même dessin). J'ai donc une base de données accès qui me permet de créer un fichier texte incluant le nom de commune et plusieurs infos relatives à cette même commune.

Sous autocad, je récupère ces infos via le bout de code suivant afin de pouvoir les intégrer dans les blocs dès leur insertion.

 

(Defun commune_syndicat (/)
 (setq filtex "C:/Mes documents/Commune_Syndicat.txt")
 (setq	x  (open filtex "r")
ct 0
 )
 (Setq llisttxt nil)
 (While
    (Setq exte (read-line x))
    (Setq exte (read exte))
    (Setq llisttxt (cons exte llisttxt))
    (Setq ct (+ ct 1))
 )
 (close x)
    (Setq Commune(nth 7 llisttxt))
    (Setq Syndicat(nth 6 llisttxt))
    (Setq District(nth 5 llisttxt))
    (setq SyndicatEU(nth 4 llisttxt))
    (setq cope(nth 3 llisttxt))
    (setq cope2(nth 2 llisttxt))
    (setq copeeu(nth 1 llisttxt))
    (setq copeeu2(nth 0 llisttxt))
)

 

Le problème est que si j'oublie de renseigner ma commune dans access, tous les blocs que j'insère comporte les mauvais renseignement dans leurs attributs.

Je veux donc faire un lisp qui me demande si la commune renseignée correspond à la commune sur laquelle je travaille afin d'éviter toute erreur.

Je demande qu'il m'affiche un volet "Vous êtes sur la commune de (commune renseignée par access), est-ce la bonne?"

Si je répond "oui", le volet se ferme.

si je répond "non", je voudrais qu'il aille m'ouvrir directement la base de données access qui me permet de modifier la commune.

 

Pour l'instant, j'ai juste écris un bout de code qui m'alerte au démarrage mais je ne sais pas comment le compléter pour qu'il aille ouvrir le fichier access (dont le chemin est : Z:\Travaux partagés\Dessin\INDICE\Indice_2003.mdb)si je répond "non".

 

J'espère que vous avez pu comprendre, en tout cas merci du temps que vous me consacrez.

Posté(e)

Si tu regardes dans "C:\Program Files\Autodesk\AutoCAD 20xx\Sample\Database Connectivity\CAO", tu as un exemple en lisp avec un dessin de test.

Voir si déjà ça peut répondre à ton besoin.

 

Sinon, un exemple qui permet de te connecter sur un fichier mdb

(setq fic (findfile "c:/temp/db_samples.mdb"))

(setq username "" password "")

(setq ado (vlax-create-object "ADODB.Connection"))

(setq mdb (vlax-invoke-method ado 'Open (strcat "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" fic) username password nil))

Pour ce qui est de lire un enregistrement, je n'ai pas trop le temps de chercher, mais tu devrais pouvoir avancer avec ce lien

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Pour info,

 

Je ne sais pas si la synthaxe est correcte mais j'ai réussi à faire ce que je voulais avec les lignes suivantes :

 

(setq acc (vlax-create-object "Access.Application"))

 (vlax-put acc 'visible :vlax-true)

 (setq mdb (vlax-invoke acc 'opencurrentdatabase "Z:\\Travaux partagés\\Dessin\\INDICE\\Indice_2003.mdb"))

 

Encore merci pour votre aide.

Posté(e)

Salut

 

Je suis content que tu ais trouvé, et par toi-même en plus car on n'est pas nombreux à s'aventurer dans les liaisons API.

Comme tu poses la question, peut-être un test pour vérifier que tu as bien access, sinon, rien de mieux.

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Salut,

 

En utilisant vlax-get-or-create-object à la place de vlax-create-object, tu éviteras de démarrer un nouveau prcessus Access s'il y en a déjà un en cours.

C'est bien d'avoir mis l'application visible parce que tu es responsable de la fermeture du processus.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

salut,

le (setq mdb ne sert à rien chez moi, la méthode retourne nil

l'objet sur lequel travailler reste acc.

 

Apparemment on bénéficie bien de la même interface que VBA pour access, donc c'est assez facile de retrouver ses petits

 

La question que je me pose, c'est :

quel est l'interret comparé de la méthode de connexion par ODBC ou ADODB ?

avec toutes les contraintes que ça suppose, plutôt qu'avec la méthode d'asptt9,

qui est quand même beaucoup plus simple, et qui s’affranchi des problèmes de pilotes ODBC64 avec access :

Il doit bien y avoir une subtilité qui m'échappe...

 

Gérald

----------------------------------------------------------------------

Site: https://www.g-eaux.fr

Blog: http://g-eaux.over-blog.com

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité