asptt9 Posté(e) le 15 mai 2014 Posté(e) le 15 mai 2014 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.
(gile) Posté(e) le 15 mai 2014 Posté(e) le 15 mai 2014 Salut, Voir ici. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
asptt9 Posté(e) le 15 mai 2014 Auteur Posté(e) le 15 mai 2014 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 ?
asptt9 Posté(e) le 15 mai 2014 Auteur Posté(e) le 15 mai 2014 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.
(gile) Posté(e) le 15 mai 2014 Posté(e) le 15 mai 2014 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
asptt9 Posté(e) le 15 mai 2014 Auteur Posté(e) le 15 mai 2014 Aparemment ça vient de la ligne suivante : (vlax-invoke-method ConnectionObject "Open" "DSN=myMDB;" "admin" "" adok-adConnectUnspecified )
(gile) Posté(e) le 15 mai 2014 Posté(e) le 15 mai 2014 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
asptt9 Posté(e) le 15 mai 2014 Auteur Posté(e) le 15 mai 2014 Oui, j'ai essayé mais ça me renvoie la même erreur...
Patrick_35 Posté(e) le 15 mai 2014 Posté(e) le 15 mai 2014 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
asptt9 Posté(e) le 15 mai 2014 Auteur Posté(e) le 15 mai 2014 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" ?
Olivier Eckmann Posté(e) le 15 mai 2014 Posté(e) le 15 mai 2014 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
asptt9 Posté(e) le 15 mai 2014 Auteur Posté(e) le 15 mai 2014 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...
Olivier Eckmann Posté(e) le 15 mai 2014 Posté(e) le 15 mai 2014 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
asptt9 Posté(e) le 15 mai 2014 Auteur Posté(e) le 15 mai 2014 Je viens d'essayer et ça ne marche pas, ni via le lisp, ni en passant par la connexion des données d'autocad...
Olivier Eckmann Posté(e) le 15 mai 2014 Posté(e) le 15 mai 2014 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
asptt9 Posté(e) le 16 mai 2014 Auteur Posté(e) le 16 mai 2014 Bonjour, Je suis sous windows XP SP3 (32 bits) avec autocad map 3d 2014.
Patrick_35 Posté(e) le 20 mai 2014 Posté(e) le 20 mai 2014 Salut Et si tu nous indiquais ce que tu cherches à faire exactement ? @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
asptt9 Posté(e) le 21 mai 2014 Auteur Posté(e) le 21 mai 2014 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.
Patrick_35 Posté(e) le 21 mai 2014 Posté(e) le 21 mai 2014 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
asptt9 Posté(e) le 23 mai 2014 Auteur Posté(e) le 23 mai 2014 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.
Patrick_35 Posté(e) le 23 mai 2014 Posté(e) le 23 mai 2014 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 23 mai 2014 Posté(e) le 23 mai 2014 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
GEGEMATIC Posté(e) le 27 mai 2014 Posté(e) le 27 mai 2014 salut,le (setq mdb ne sert à rien chez moi, la méthode retourne nill'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.frBlog: http://g-eaux.over-blog.com
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant