Suite

Configurer la connexion ODBC avec la base de données Access dans MapBasic ?

Configurer la connexion ODBC avec la base de données Access dans MapBasic ?


Bonne journée! J'essaie de configurer une connexion ODBC dans ma base de données Access via le code mapbasic, mais je ne sais pas comment démarrer ce code.

Je pourrais le faire manuellement et pouvoir avoir un lien entre mes tables sur lesquelles travailler.

Je voudrais créer un outil qui ouvrira et liera mes tables dans l'accès et le mettra à jour de temps en temps quand chaque fois que je changerai quelque chose sur ma table mapinfo.


Lorsque vous travaillez avec une base de données de MapInfo Pro à MapBasic, vous devez d'abord établir une connexion à la base de données. Cela nécessite une source de données que je peux comprendre que vous avez déjà.

Pour ouvrir la connexion, vous devez utiliser la fonction Server_Connect() :

sConnString = "DSN=GIS_DB" '**et potentiellement aussi un nom d'utilisateur et un mot de passe sConnString = sConnString & "UID=USERNAME;PWD=SecretCode" nConnection = Server_Connect("ODBC", sConnString)

Maintenant, la variable entière nConnection contient l'ID de la connexion que vous venez d'ouvrir à votre base de données.

Il est maintenant temps de commencer à utiliser cette connexion. MapBasic a un certain nombre de fonctions et d'instructions qui peuvent être utilisées pour travailler avec des bases de données (spatiales) :

  • Serveur Créer une carte
  • Style de création de serveur
  • Table de création de serveur
  • Tableau des liens de serveur
  • Tableau d'enregistrement
  • Actualisation du serveur
  • Carte des ensembles de serveurs
  • Serveur_Exécuter
  • Tableau de validation

Si vous souhaitez créer une table liée, consultez l'instruction Server Link Table. Si vous souhaitez créer une table dynamique, utilisez l'instruction Register Table.

Déclaration de table de liaison de serveur : sCmd = "Select * From " & sSchema & "." sTable sTab = PathToTableName$(sFile) Serveur nConnection Link Table sCmd Toolkit "ODBC" dans le fichier sTab sFile

Déclaration de table d'enregistrement :

sCmd = "Sélectionner * à partir de " & sSchéma & "." sTable sTab = PathToTableName$(sFile) Register Table Type sTab Handle ODBC Connection Handle nConnection Toolkit "ODBC" Cache OFF '** Ou ON Table sCmd Into sFile Ouvrir la table sFile

Pour MS Access, vous pouvez probablement omettre le schéma et utiliser simplement :

sCmd = "Sélectionner * à partir de " & sTable

Une fois vos tables ouvertes, vous enregistrez les modifications dans la base de données via la déclaration de table de validation.

Pour actualiser une table, vous utilisez l'instruction Server Refresh. Je recommanderais de toujours exécuter une instruction Refresh après avoir validé les modifications.


Échec de la connexion Oracle ODBC (à l'aide des pilotes ODBC d'Oracle)

Je souhaite utiliser une connexion Oracle-ODBC dans Visual Studio 2017/SSIS car elle est beaucoup plus rapide que OLE DB lors des tests.

Je suis les étapes d'Oracle à la lettre.

Installez le client instantané (v18, également essayé v12).

Télécharger/extraire le téléchargement ODBC dans la même bibliothèque. Exécutez odbc_install.exe.

Voir le pilote dans 'ODBC Data Sources/Admin' dans Windows 10.

Ajouter une nouvelle source de données utilisateur. Les noms de service TNS s'affichent correctement. Testez la connexion (utilisateur/réussite) -- ça marche !! La connexion fonctionne !!

J'ai essayé cela avec 64 bits dans Oracle, leur client instantané v18.3 ou 12.2 les deux. Tout fonctionne dans "Oracle Source Administrator" de Windows via des connexions de test.

J'ai également essayé cela avec des téléchargements 32 bits. Tout est bon.

Maintenant, ouvrez Visual Studio. J'ai d'abord essayé 64 bits (mon système d'exploitation Windows est de 64 bits, mais Visual Studio Data Tools n'est que de 32 bits). J'avais le pressentiment que cela ne fonctionnerait pas.

Message d'erreur "l'architecture du système et le client ne sont pas les mêmes" ou autre. Je t'ai eu.

J'ai essayé le pilote ODBC Oracle 32 bits (source utilisateur). Je reçois toujours le même message (j'ai essayé les versions 18_3 et 12_2).

À présent . SQLORA32.dll se trouve dans le chemin d'accès au fichier qu'il a nommé. C'est juste là! Pourquoi ne peut-il pas être trouvé? La connexion de test dans ODBC Source Admin fonctionne ! Qu'est-ce qui se passe ici?

Et je ne sais pas si je dois "enregistrer" quelque chose via la ligne de commande, j'ai dû le faire une fois auparavant, c'était peut-être un problème sans rapport.

Pour démarrer, lorsque j'ai essayé un "connecteur ODBC Devart Oracle" tiers, il s'agit d'un simple assistant d'installation de 5 secondes qui fonctionne parfaitement instantanément. Le problème, c'est qu'il s'agit d'un essai de 30 jours et qu'il coûte au moins 150 $. Comment puis-je faire fonctionner un connecteur ODBC créé par Oracle (Oracle étant mondialement connu pour les produits janky-azz) ?

Devart, et probablement Attunity Oracle ODBC : 5 secondes d'installation

Le propre d'Oracle : plus difficile à installer que de pénétrer dans Fort Knox/apprendre le chinois mandarin. S'il vous plaît donnez votre avis.


Comment faire fonctionner cette connexion ODBC SQL Server ?

Remarque : j'ai évidemment changé les noms de serveur et les adresses IP en fictifs.

Voici ce qui se passe. J'ai un serveur, que j'appelle MYSERVER , exécutant Microsoft SQL Server Express 2005. Sur ce serveur lui-même, j'ai configuré une connexion ODBC pointant sur lui-même, et cela fonctionne déjà parfaitement. Je me connecte en utilisant l'authentification SQL Server (pas l'authentification Windows), et c'est configuré comme ceci :

Comme je l'ai dit, celui-là fonctionne. Mais ensuite, j'ai un autre ordinateur qui se trouve sur un domaine totalement différent/pas sur l'intranet, qui doit accéder à ce même serveur SQL hébergé sur MYSERVER. Parce qu'il se trouve sur un domaine différent, il ne reconnaît pas le nom "MYSERVER", je dois le pointer sur l'adresse IP de MYSERVER, que nous dirons 123.456.789.012. Mais la connexion ODBC ne semble pas fonctionner là-bas. J'ai essayé de le configurer comme ceci :

Cela ne fonctionne pas. Lorsque je saisis le nom d'utilisateur et le mot de passe et que j'appuie sur Suivant, il se bloque pendant 10 à 20 bonnes secondes, puis revient finalement avec l'erreur suivante :

Si j'essaie la même chose, mais que je change le "serveur" de 123.456.789.012SQLEXPRESS en tout simplement vieux 123.456.789.012 , j'obtiens une erreur différente :

Maintenant je sais ce que tu penses. Vous pensez peut-être, "duh, vous n'avez probablement pas ouvert le pare-feu pour le port 1433, fictif." Sauf que je l'ai fait, et j'ai vérifié cela, comme je peux avec succès Cours:

. de la ligne de commande tout ce que je veux. Donc je ne sais pas quoi faire. Je sais que le serveur SQL existe, fonctionne et une connexion ODBC pouvez être configuré correctement, je ne suis tout simplement pas sûr de ce que je me suis trompé dans mes paramètres de connexion qui génère ces erreurs. Sur la base de la dernière erreur que j'ai répertoriée, il semblerait qu'il puisse se connecter au serveur, mais ne puisse tout simplement pas trouver l'instance (puisque je n'en ai pas spécifié à ce moment-là). Cela signifie-t-il donc que j'ai juste besoin d'utiliser une syntaxe différente pour spécifier l'adresse IP avec un nom d'instance ? Que fais-je? Merci d'avance.


Applications personnalisées

Créez des applications qui se connectent à Microsoft Access

En tant qu'interface de données relationnelles la plus largement utilisée, les interfaces ODBC sont accessibles à partir de toutes les principales technologies de développement, notamment PHP, Python, Delphi, Visual Basic, Labview, PowerBuilder, FoxPro, FileMaker Pro, etc.

Les développeurs peuvent utiliser le pilote ODBC Access pour créer rapidement des applications Web, de bureau et mobiles qui interagissent avec les données Microsoft Access en direct !

Connectez les outils Office avec Microsoft Access

Toute application pouvant accéder aux données via ODBC, comme Microsoft Excel, PowerPivot ou Word, peut tirer parti de nos pilotes ODBC pour se connecter aux données en temps réel.

Grâce au pilote ODBC d'accès, les applications telles que Microsoft Word permettent aux utilisateurs d'accéder directement aux données Microsoft Access en direct avec des fonctionnalités puissantes telles que le « Fusion et publipostage », éliminant le besoin de procédures d'importation/exportation compliquées.


Un DSN système s'applique par définition à l'ensemble de l'ordinateur, quel que soit le compte de connexion utilisé, donc (si je lis bien votre question), cela signifie que (1) la réponse est "oui", et (2) vous aurez besoin d'un administrateur droits de créer le DSN.

Au fait, avez-vous regardé comme des connexions sans DSN? Je pense qu'ils seraient beaucoup plus adaptés à vos besoins et supprimeraient également le besoin de configuration client avant que votre application puisse être utilisée.

Vous pouvez également utiliser la commande "runas" pour lancer l'administrateur de source de données ODBC sous votre compte administrateur tout en étant connecté sous votre compte normal. Cela vous permettrait de configurer et de tester la connexion sans recevoir une erreur « l'utilisateur n'est pas associé à une connexion SQL de confiance ».

Voici un exemple de commande d'invite de commande :

Comme Jimmy l'a dit, la définition DSN ne serait pas liée au compte administrateur, mais utiliserait le compte d'authentification Windows auquel vous étiez connecté lors de l'utilisation ultérieure de la connexion. (Vous devrez donc à nouveau utiliser "runas" pour lancer tous les programmes utilisant la connexion, à moins que vous ne soyez connecté sous votre compte administrateur.)


Ainsi, en supposant que vous ayez un client de base de données en cours d'exécution sur votre PC, vous pouvez créer un tunnel ssh qui configure les ports sur votre PC pour refléter les ports qui s'exécutent sur le serveur de base de données. Ensuite, demandez à votre client d'interroger votre hôte local. Voici comment configurer le tunnel pour l'un des ports, disons 8471 :

Dans ce cas, "localhost" fait référence au serveur, pas à votre PC. Vous pouvez remplacer "localhost" par l'adresse IP du serveur si vous le souhaitez.

Après avoir configuré ce tunnel, si vous "telnet" sur le port 8471 de votre PC, il vous connectera au port 8471 du serveur de base de données.

Vous devrez répéter cette opération pour chacun des ports de la liste.

Vous pouvez rencontrer un problème si le serveur de base de données requiert son propre nom d'hôte dans la chaîne de connexion. Si c'est le cas, vous devrez faire croire à votre client que le nom d'hôte du PC est le même que le nom d'hôte du serveur db.


2 réponses 2

Il s'avère que le problème était avec un assembly créé avec des autorisations « Unrestricted ». résoudre le problème.

J'ai également constaté que je reçois cette erreur lorsque SQL Server (et probablement tout autre fournisseur ODBC) renvoie un message d'erreur trop long. Lors de mes propres tests, j'ai découvert que l'erreur est générée lorsqu'un message d'erreur ODBC contient plus de 511 caractères.

Je n'ai trouvé aucune documentation répertoriant 511 caractères comme longueur maximale pour ces messages, mais cela correspond à un nombre binaire rond (2 9 = 512), donc cela a du sens comme limite à cet égard.

Il est peu probable que les messages d'erreur de stock soient aussi longs, mais si vous renvoyez un message d'erreur personnalisé, c'est tout à fait possible. La solution de contournement que j'ai utilisée consistait à détecter l'erreur et à la réduire avant de la relancer.

Il y a du texte par défaut qui est toujours renvoyé ( [Microsoft][ODBC SQL Server Driver][SQL Server] ) au début du message. Cette chaîne peut être légèrement différente selon la façon dont la table a été liée, vous devrez donc peut-être ajuster la longueur de coupe en conséquence.

Nous devons donc réduire le message d'erreur d'origine à 464 caractères. Je fais ceci comme suit :


Pilote ODBC Microsoft Access : pas assez d'espace sur le disque temporaire

J'exécute un logiciel de modélisation spatiale qui utilise une base de données Access pour stocker les données nécessaires au calcul. À chaque exécution du modèle, les données sont chargées dans le modèle à partir d'une base de données Microsoft Access 2010 à l'aide d'une requête SQL et du moteur de base de données Jet 4.0. La connexion entre le logiciel et la base de données se fait avec ODBC.

J'ai besoin d'exécuter le modèle pour des milliers d'emplacements, mais après des dizaines d'exécutions de modèle, j'obtiens l'erreur : « [Pilote ODBC Microsoft Access] Pas assez d'espace sur le disque temporaire ». Après avoir redémarré le modèle, le calcul s'exécute correctement pour la même requête et le même ensemble de données, mais j'obtiens à nouveau rapidement l'erreur. La quantité de données chargées diffère selon l'exécution du modèle, avec un maximum de

30.000 enregistrements. Lors du chargement de petits ensembles de données de max. 1000 enregistrements, l'erreur ne se produit pas.

Les éléments suivants n'ont pas fonctionné :

  • augmenter le MaxLocksPerFile dans le registre Windows
  • augmentation de MaxBufferSize
  • Compacter et réparer le fichier .mdb
  • il y a assez d'espace sur mon disque temporaire

Fait intéressant, je n'ai eu aucun problème avec le même modèle sur mon ancien système (Windows XP 32 bits). Ce n'est que sur cet ordinateur (Windows 64 bits 7, 16 Go de RAM) que l'erreur se produit. Le logiciel de modélisation est 32 bits et la connexion ODBC est définie avec odbcad32.exe dans le répertoire "c:WindowsSysWOW64". Il semble qu'il y ait une fuite de mémoire dans la version Windows7, car le même modèle et les mêmes données fonctionnent bien sur un ancien ordinateur Windows XP avec moins de mémoire. Toutes les idées sont grandement appréciés!


7 réponses 7

Voici les instructions étape par étape (disponibles ici) :

J'ai également installé les packages suivants (peut-être nécessaires) :

Ensuite, téléchargez, décompressez, compilez et installez FreeTDS (attention, l'URL peut changer) :

Tentez une connexion via Telnet à votre instance SQL Server :

Utilisez l'outil tsql pour tester la connexion :

Cela devrait vous demander le mot de passe, après quoi vous pouvez espérer voir ce beau panneau :

Si cela a fonctionné, je recommande d'organiser une fête (de codage). Ensuite, il y a une configuration. Ouvrez le fichier de configuration FreeTDS. /usr/local/etc/freetds.conf

Ajoutez l'entrée suivante au bas du fichier. Nous mettons en place un nom de source de données (DSN) appelé « MSSQL ».

Ouvrez maintenant le fichier de configuration ODBC : /usr/local/etc/odbcinst.ini

Et ajoutez l'entrée de pilote MSSQL suivante (FreeTDS) à la fin :

Ensuite, enfin, configurez le DSN dans ODBC dans le fichier odbc.ini ici /usr/local/etc/odbc.ini En ajoutant ce bit au fichier :

Testez la connexion à l'aide de l'outil isql :

Si vous voyez "Connecté!" tu es en or, félicitations ! Sinon, je suis vraiment désolé, voyez ci-dessous où il y a des ressources qui pourraient vous aider.

Redémarrez maintenant Apache et testez-le à partir de PHP en utilisant 'MSSQL' comme DSN. Si quelque chose ne fonctionne pas, vous pouvez essayer d'installer tout ou partie de ces packages : mdbtools libmdbodbc libmdbtools mdbtools-gmdb


Exemples

Obtenir les données SSURGO de SDA

Un exemple rapide d'utilisation de la fonction de requête d'accès aux données sur les sols (SDA) de l'USDA-NRCS. Le code suivant décrit comment obtenir des données sur les sols au niveau des composants pour le comté de Yolo (zone d'enquête CA113) et calculer une classification de niveau de sous-ordre représentatif pour chaque unité cartographique. Cet exemple nécessite une compréhension de SQL, de la US Soil Taxonomy et de la base de données SSURGO. Bien qu'il ne s'agisse pas de l'approche la plus efficace pour la tâche décrite ci-dessous, le code illustre plusieurs stratégies pour travailler avec les données SSURGO dans R.

Tout d'abord, nous devons configurer certaines fonctions qui aideront à résumer les données des composants, au sein de chaque unité de carte. Ces fonctions seront appliquées en gros aux blocs de données, en utilisant la stratégie split-apply-combine.

Chargez les bibliothèques requises, configurez une requête, soumettez-la à SDA et traitez les résultats.

Calculez la superficie de chaque sous-ordre dans le comté de Yolo, arrondissez à l'entier le plus proche et triez. Une approche spatialement explicite serait requise pour les scénarios de zones de relevés multiples ou une partie irrégulière d'un relevé unique.

Récupérer les polygones SSURGO à partir de SDA

Les polygones unitaires de la carte peuvent également être interrogés à partir de SDA, en utilisant une requête de cadre de délimitation similaire, avec la fonction mapunit_geom_by_ll_bbox(). Cette fonction renvoie un objet de classe SpatialPolygonsDataFrame, contenant toutes les délimitations d'unités de carte qui chevauchement avec le cadre de délimitation fourni. Le post-traitement avec des fonctions du package rgeos peut être utilisé pour extraire l'intersection spatiale entre les polygones unitaires de la carte et une région d'intérêt.

L'exemple de jeu de données Gopheridge

L'exemple de jeu de données gopheridge est très similaire au type de données renvoyé par fetchNASIS() ou fetchPedonPC() . La démonstration suivante s'adresse aux utilisateurs intermédiaires de R et familiarisés avec les classes et méthodes définies par le package aqp. Avant de continuer, il peut être utile de consulter les pages de manuel d'aqp : library(aqp) help(aqp) , ou l'introduction de l'objet SoilProfileCollection.

Ouvrez R et configurez l'environnement en chargeant les packages et l'exemple de jeu de données.

Définissez une fonction simple pour extraire la profondeur supérieure d'une caractéristique de diagnostic et utilisez-la pour calculer la profondeur supérieure du contact Cr pour chaque pédon. Notez que les arguments de cette fonction sont x (un SoilProfileCollection à 1 élément, c'est-à-dire un seul profil de sol) et d.hz (le nom de la caractéristique ou de l'horizon de diagnostic que nous interrogeons). Si la caractéristique/l'horizon de diagnostic demandé n'est pas présent pour un pédon donné, NA est renvoyé. Cette fonction est utilisée en conjonction avec profileApply() , de sorte qu'elle est évaluée pour chaque pédon dans une collection. Le résultat est un vecteur de même longueur que le nombre de pédons dans la collection.

Réorganiser les profils de gopheridge par présence/absence de contact paralithique, tracer, puis annoter la profondeur du contact Cr.

Ce document est basé sur aqp version 1.9.1 et SoilDB version 1.6.3. [2015-11-20]


Voir la vidéo: ODBC Connections - First Basic Query with Excel