#1 Wed 02 March 2011 13:55
- Nicoo
- Participant occasionnel
- Date d'inscription: 27 Jul 2010
- Messages: 10
VBA Excel et fonctions SQLite/Spatialite
Bonjour,
Je souhaite lier un classeur Excel avec une BDD SQLite/Spatialite. La connexion fonctionne très bien ainsi que les commandes SQL standards… Cependant, dès que j’utilise une fonction propre à Spatialite (en l’occurrence : GeomFromText), j’obtiens le message d’erreur suivant (via la gestion d’erreur : Err.Description) : « No such function : GeomFromText (1)».
Pour plus de détails, mon fichier Excel contient les coordonnées d’un polygone que je cherche à insérer dans la BDD dans une colonne formatée en GeometryColumn afin de pouvoir le visualiser dans un SIG (QGis). La commande SQL en question : « INSERT INTO test (sceneid,geom) VALUES ("40442461009061053582I0",GeomFromText('POLYGON((5.9716 50.956299, 6.2766 51.4618, 5.2801 51.664101, 4.9849 51.156101))',4326)) ». A noter que cette commande fonctionne très bien si je la passe depuis l’outil Spatialite-gui.
Ma question est donc la suivante ; Existe-t-il une possibilité pour intégrer les fonctions Spatialites (et tout particulièrement GeomFromText) dans VBA Excel ?
Merci d’avance.
Nicolas.
Hors ligne
#2 Thu 03 March 2011 11:02
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3199
- Site web
Re: VBA Excel et fonctions SQLite/Spatialite
Bonjour,
Comment liez vous le classeur excel à la BDD SQLite ?
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#3 Thu 03 March 2011 11:57
- Nicoo
- Participant occasionnel
- Date d'inscription: 27 Jul 2010
- Messages: 10
Re: VBA Excel et fonctions SQLite/Spatialite
Bonjour,
Pour me connecter, j'ai repris l'exemple fourni sur cette page : http://www.excel-downloads.com/forum/10 … cel-2.html.
J'ai installé le pilote ODBC, ajouté la référence ADO (Microsoft ActiveX Data Objects 2.1 Library) puis instancié une ADODB.Connection.
La chaîne de connexion est la suivante : "DRIVER=SQLite3 ODBC Driver;Database=" & CheminBDD & BDD & ";LongNames=0;Timeout=1000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;".
J'avoue l'avoir recopiée sans en comprendre les paramètres (en tout cas elle fonctionne).
Hors ligne
#4 Fri 04 March 2011 09:10
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3199
- Site web
Re: VBA Excel et fonctions SQLite/Spatialite
Bonjour,
Le provider que vous utilisez ADODB ne gère apparemment pas les fonctionnalités spatiales. J'ai essayé de regarder ça hier avec un provider pour ADO.Net mais je l'avoue je n'ai pas eu le temps de finir .... Si je trouve qq chose je le posterai ici.
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#5 Fri 04 March 2011 09:42
- Nicoo
- Participant occasionnel
- Date d'inscription: 27 Jul 2010
- Messages: 10
Re: VBA Excel et fonctions SQLite/Spatialite
Bonjour Christophe,
Merci d'avoir cherché, mais finalement le problème est résolu : je n'avais pas poussé assez loin mes recherches internet....
Un petit résumé, ça peut toujours servir:
1. Avoir une BDD bien configurée spatialite, voir ce site : http://www.gaia-gis.it/spatialite-2.4.0 … index.html
2. Télécharger la librairie spatialite libspatialite-2.dll ansi que les dépendances suivantes : libproj-0.dll, libgeos_c-1.dll, libgeos-3-1-1.dll, libiconv2.dll.
Elles sont disponibles ici : http://www.gaia-gis.it/spatialite/binaries.html
Les placer dans un même dossier (par défaut C:\WINDOWS\system32).
3. Dans le projet VBA, cocher la Référence "Microsoft ActiveX Data Objects 2.8 Library.
4. Connecter la BDD sqlite avec Excel (cf le lien donné dans mon message précédent).
5. Dans le code VBA, après la connection, passer la commande SQL suivante : "SELECT load_extension("CheminVersLesDLL\libspatialite-2.dll")"
6. La BDD est maintenant connectée avec les fonctions spatialites ; les commandes SQL incluant des fonctions comme GeomFromText peuvent être utilisées.
Bonne journée!
Hors ligne
#6 Fri 04 March 2011 12:08
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3199
- Site web
Re: VBA Excel et fonctions SQLite/Spatialite
Bonjour,
Merci pour la solution !
SELECT load_extension("CheminVersLesDLL\libspatialite-2.dll")
Cela permet au provider de trouver la définition des fonctions de la dll spatiale.
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne