Manuel de référence MySQL 5.0


précédentsommairesuivant

25. Pilotes MySQL

Ce chapitre décrit les différents pilotes MySQL qui fournissent l'interface entre le serveur MySQL et les clients.

25-A. Support ODBC de MySQL

MySQL supporte ODBC grâce au MySQL Connector/ODBC, une famille de pilote MyODBC. C'est la référence pour les produits Connector/ODBC, qui fournissent un accès compatible ODBC 3.5x à MySQL. Cette section vous montre comment installer MyODBC et l'utiliser. Vous obtiendrez aussi des informations sur les programmes les plus courants qui sont reconnus pour fonctionner avec MyODBC et les réponses aux questions les plus courantes à propos de MyODBC.

Cette section s'applique à MyODBC 3.51. Vous pouvez trouver le manuel pour les anciennes versions de MyODBC dans la distribution source ou binaire de cette version.

C'est la section de référence pour les pilotes MySQL ODBC, et non pas un guide général pour ODBC. Pour plus d'informations sur ODBC, reportez-vous à http://www.microsoft.com/data/.

La partie sur le développement d'application de ce manuel de référence suppose une bonne connaissance du développement C, des concepts de bases de données relationnelles et MySQL. Pour plus d'informations sur MySQL et ses fonctionnalités, voyez http://dev.mysql.com/doc/.

Si vous avez des questions qui ne sont pas dans ce document, envoyez-les à <>.

25-A-1. Introduction à MyODBC

25-A-1-a. Qu'est-ce que ODBC ?

ODBC (Open Database Connectivity) fournit un moyen aux clients pour accéder à une vaste gamme d'applications et de sources de données. ODBC est une interface standardisée, qui permet la connexion aux serveurs de bases de données. Elle a été développée en fonction des spécifications du SQL Access Group et définit un ensemble de fonction, code d'erreurs et types de donnés qui peuvent être utilisés pour développer des applications indépendantes des bases de données. ODBC est généralement utilisé lorsque l'indépendance à la base de données ou les accès simultanés de différents clients est nécessaire.

Pour plus d'informations sur ODBC, regardez http://www.microsoft.com/data/.

25-A-1-b. Qu'est-ce que Connector/ODBC ?

Connector/ODBC est le nom désignant la famille des pilotes MySQL ODBC. Ils sont reconnus sous le nom de pilotes MyODBC.

25-A-1-c. Qu'est-ce que MyODBC 2.50 ?

MyODBC 2.50 est un pilote 32 bits ODBC de MySQL AB, basé sur les spécifications ODBC 2.50 de niveau 0 (avec les fonctionnalités de niveau 1 et 2). C'est l'un des pilotes ODBC les plus populaires du marché Open Source, utilisés par de nombreux programmeurs pour accéder aux fonctionnalités de MySQL.

25-A-1-d. Qu'est-ce que MyODBC 3.51 ?

MyODBC 3.51 est un pilote 32 bits ODBC, aussi connu sous le nom de MySQL ODBC 3.51. Cette version est une amélioration de la version MyODBC 2.50. Elle supporte les spécifications ODBC 3.5x de niveau 1 (API complète plus fonctionnalités de niveau 2), afin de fournir un accès à toutes les fonctionnalités ODBC lors de l'accès à MySQL.

25-A-1-e. Où obtenir MyODBC ?

MySQL AB distribue tous ses produits sous licence General Public License (GPL). Vous pouvez obtenir une copie de la dernière version des binaires MyODBC et des sources sur le site Web de MySQL AB : http://dev.mysql.com/downloads/.

Pour plus d'informations sur MyODBC, visitez http://www.mysql.com/products/myodbc/.

25-A-1-f. Plateformes supportées

MyODBC peut être utilisé sur la plupart des systèmes d'exploitation supportant MySQL comme :

  • Windows 95, 98, Me, NT, 2000, et XP ;
  • Tous les systèmes Unix :

    • AIX,
    • Amiga,
    • BSDI,
    • DEC,
    • FreeBSD,
    • HP-UX 10, 11,
    • Linux,
    • Mac OS X Server,
    • Mac OS X,
    • NetBSD,
    • OpenBSD,
    • OS/2,
    • SGI Irix,
    • Solaris,
    • SunOS,
    • SCO OpenServer,
    • SCO UnixWare,
    • Tru64 Unix.

Si une distribution binaire n'est pas disponible pour le téléchargement d'une plateforme particulière, vous pouvez construire le pilote vous-même en téléchargeant les sources du pilote. Vous pouvez contribuer aux binaires MySQL en envoyant un courriel à <>, de sorte qu'il devienne disponible pour d'autres utilisateurs.

25-A-1-g. Listes de diffusion MyODBC

MySQL AB fournit une assistance à la communauté des utilisateurs par le biais de ses listes de diffusion. Pour les questions liées à MyODBC, vous pouvez obtenir de l'aide auprès des utilisateurs expérimentés en utilisant <>.
Pour plus d'informations sur l'abonnement à la liste de diffusion MySQL ou pour parcourir la liste des archives, visitez http://lists.mysql.com/.

25-A-1-h. Forum MyODBC

Le support communautaire de la part d'utilisateurs expérimentés est disponible via les forums de MySQL, situé sur http://forums.mysql.com.

25-A-1-i. Rapporter des problèmes avec MYODBC

Si vous rencontrez des difficultés avec MyODBC, commencez par faire un fichier de log avec le gestionnaire ODBC (le fichier de log que vous obtenez en demande les logs de ODBCADMIN) et un log MyODBC.

Pour obtenir un fichier de log MyODBC, vous devez faire ceci :

  1. Assurez-vous que vous utilisez myodbcd.dll et non pas myodbc.dll. Le moyen le plus facile pour le faire est d'obtenir myodbcd.dll dans la distribution MYODBC et de le copier à la place de myodbc.dll, qui est probablement dans le dossier C:\windows\system32 ou C:\winnt\system32.
    Notez que vous voudrez probablement récupérer votre vieux fichier myodbc.dll lorsque vous aurez fini de tester, car il est bien plus rapide que myodbcd.dll ;
  2. Activez l'option 'Trace MyODBC' dans l'écran de configuration de MyODBC. Le fichier de log sera écrit dans le fichier C:\myodbc.log.
    Si l'option de trace n'est pas recommandée lorsque vous retournez dans l'écran précédent, cela signifie que vous n'utilisez pas myodbcd.dll (voir ci-dessus) ;
  3. Démarrez votre application, et faîtes la planter.

Vérifiez le fichier de trace MyODBC, pour essayer de comprendre ce qui ne va pas. Vous devriez être capable de trouver les requêtes émises en recherchant la chaîne >mysql_real_query dans le fichier myodbc.log.

Vous devriez aussi essayer de dupliquer la requête dans le client mysql ou admndemo pour voir si le problème vient de MYODBC ou MySQL.

Si vous trouvez quelque chose d'incorrect, n'envoyez que les lignes pertinentes (maximum, 40 lignes) à <>. N'envoyez jamais le fichier de log MYODBC ou ODBC complet !

Si vous êtes incapables de trouver une erreur, la dernière option est de faire une archive (tar ou zip) qui contienne le fichier de trace MYODBC, le fichier de log ODBC, et un fichier README qui contienne une description du problème. Vous pouvez envoyer le tout à ftp://support.mysql.com/pub/mysql/secret/. Seuls nous, à MYSQL AB, pourront accéder à ces fichiers, et nous seront très respectueux de vos données.

Si vous pouvez créer un problème qui reproduit le problème, essayez de l'uploader aussi !

Si le programme fonctionne avec d'autres serveurs SQL, vous devriez faire un log ODBC où vous faites exactement la même chose sur les autres serveurs SQL.

N'oubliez jamais que plus vous nous fournissez d'explication, plus nous pourront vous aider !

25-A-1-j. Comment soumettre un correctif MyODBC

Vous pouvez envoyer un correctif ou suggérer une meilleure solution à un problème en envoyant un message à <>.

25-A-2. Informations générales sur ODBC et MyODBC

25-A-2-a. Introduction à ODBC

Open Database Connectivity (ODBC) est une interface d'application populaire pour accéder aux bases de données. Elle est basée sur l'interface CLI Call-Level Interface de X/Open et ISO/IEC pour les bases de données, et utilise le SQL (Structured Query Language) comme langage d'accès.

La liste des fonctions ODBC supportées par MyODBC est donnée dans la section Section 25.1.16, « Table de référence MyODBC »25.1.16. Table de référence MyODBC. Pour les informations générales sur ODBC, voyez http://www.microsoft.com/data/.

25-A-2-b. Architecture MyODBC

L'architecture MyODBC est basée sur cinq composants, comme le montre le diagramme suivant :

Image non disponible
  • Application :
    Une application est un programme qui appelle l'API ODBC pour accéder aux données à partir du serveur MySQL. L'application communique avec le gestionnaire de pilotes en utilisant les appels ODBC standard. L'application ne se soucie pas du lieu de stockage des données, de comment elles sont stockées, ou même comment le système est configuré pour accéder à celles-ci. Il a seulement besoin de connaître le nom de la source de données (DSN).
    Un certain nombre de tâches sont communes à toutes les applications, peu importe la façon dont ils utilisent ODBC. Ces tâches sont les suivantes :

    • sélection du serveur MySQL et s'y connecter ;
    • envoi des instructions SQL pour l'exécution ;
    • récupération des résultats (le cas échéant) ;
    • les erreurs de traitements ;
    • protection ou annulation de la transaction entourant l'instruction SQL ;
    • déconnexion du serveur MySQL ;

    L'accès aux données se fait avec SQL, les tâches principales des applications utilisant ODBC soumettent des instructions SQL et la récupération des résultats générés se fait via ces déclarations.

  • gestionnaire de pilotes :
    Le gestionnaire de pilotes est une bibliothèque qui gère les communications entre l'application et le ou les pilotes. Il effectue les tâches suivantes :

    • résout les DSN (DSN) ;
    • charge le pilote et le décharge ;
    • la fonction ODBC appelle et transmet les communications au pilote.
  • Pilote MyODBC :
    Le pilote MyODBC est une bibliothèque qui implémente les fonctions de l'API ODBC. Il traite les appels des fonctions ODBC, soumet des requêtes SQL vers le serveur MySQL, et renvoie les résultats à l'application. Si nécessaire, le pilote modifie la demande d'une application de telle sorte que la demande soit conforme à la syntaxe prise en charge MySQL.
  • ODBC.INI :
    ODBC.INI est le fichier de configuration ODBC qui stocke les informations du pilote et la base de données nécessaire pour se connecter au serveur. Il est utilisé par le gestionnaire de pilote pour déterminer quel pilote doit être chargé à l'aide des DSN. Pour plus d'informations, Section 25.1.9, « MyODBC Configuration »25.1.9. MyODBC Configuration.
  • serveur MySQL :
    Le serveur MySQL est la source de données. MySQL est :

    • un système de gestion de base de données (SGBD) ;
    • un système de gestion de base de données relationnelle (SGBDR) ;
    • un logiciel gratuit.

25-A-2-c. Gestionnaire de pilotes ODBC

Un gestionnaire de pilotes ODBC est une bibliothèque qui gère les communications entre une application compatible ODBC et les pilotes. Ses fonctionnalités principales sont :

  • résolution des noms de sources (DSN) ;
  • chargement et déchargement des pilotes ;
  • traitement des appels de fonctions ODBC et relais vers le pilote.

Les gestionnaires suivants sont les plus utilisés :

MyODBC 3.51 est aussi livré avec UnixODBC depuis la version 2.1.2.

25-A-2-d. Types de pilotes MySQL ODBC

MySQL AB supporte deux pilotes ODBC Open Source pour accéder à MySQL via l'API ODBC : MyODBC (MyODBC 2.50) et MySQL ODBC 3.51 Driver (MyODBC 3.51).

Note : dans cette section, nous nous référerons aux deux pilotes sous le nom de MyODBC. Lorsque la différence sera nécessaire, nous utiliserons les noms originaux.

25-A-3. Comment installer MyODBC

MyODBC 2.50 est un pilote 32-bit ODBC 2.50 avec un niveau de spécification 0 (avec le niveau 1 et 2 de proposés) pour connecter une application compatible ODBC à MySQL. MyODBC fonctionne sur Windows 9x/Me/NT/2000/XP et la plupart des plateformes Unix. MyODBC 3.51 est une version améliorée avec les spécifications de niveau 1 de ODBC 3.5x (API noyau complète + fonctionnalités du niveau 2).

MyODBC est Open Source, et vous pouvez trouver la version la plus récente sur http://www.mysql.com/downloads/api-myodbc.html. Notez que les versions 2.50.x sont licenciées LGPL tandis que les versions 3.51.x sont licenciées GPL.

Si vous avez des problèmes avec MyODBC et que votre programme fonctionne aussi avec OLEDB, essayez le pilote OLEDB.

Normalement, vous n'avez besoin d'installer MyODBC que sur les machines Windows. Vous avez besoin d'installer MyODBC sous Unix si vous avez un programme tel que ColdFusion qui fonctionne sur les machines Unix et utilise ODBC pour se connecter aux bases de données.

Si vous voulez installer MyODBC sur un ordinateur Unix, vous aurez aussi besoin d'un gestionnaire ODBC. MyODBC est connu pour fonctionner avec la plupart des gestionnaires ODBC d'Unix.

Pour installer MyODBC sur Windows, vous devez télécharger le fichier .zip de MyODBC approprié, le décompresser avec WinZIP ou un programme similaire et exécuter le fichier SETUP.EXE.

Sur Windows/NT/XP vous pouvez obtenir l'erreur suivante durant l'installation de MyODBC :

 
Sélectionnez
An error occurred while copying C:\WINDOWS\SYSTEM\MFC30.DLL. Restart
Windows and try installing again (before running any applications which
use ODBC)

Le problème dans ce cas est qu'un autre programme utilise ODBC et du fait de l'architecture Windows, vous ne pouvez pas installer de nouveau pilote ODBC avec le programme d'installation de Microsoft ODBC. Dans la plupart des cas, vous pouvez continuer en cliquant juste sur Ignore pour copier le reste des fichiers MyODBC et l'installation finale devrait fonctionner. Si ce n'est pas le cas, la solution est de redémarrer votre machine en mode safe mode (faites-le en appuyant sur F8 juste avant que votre machine ne démarre Windows), installez MyODBC, et redémarrez en mode normal.

  • Pour créer une connexion à un ordinateur Unix depuis un ordinateur Windows, avec une application ODBC (une qui ne supporte pas MySQL nativement), vous devez installer MyODBC sur l'ordinateur Windows.
  • L'utilisateur et la machine Windows doivent avoir les droits d'accès au serveur MySQL situé sur la machine Unix. Vous pouvez configurer cela avec la commande GRANT. Voir Section 13.5.1.3, « Syntaxe de GRANT et REVOKE »13.5.1.3. Syntaxe de GRANT et REVOKE.
  • Vous devez créer une entrée DNS ODBC comme suit :

  • Démarrez maintenant votre application et sélectionnez le pilote ODBC avec les DSN que vous avez spécifiés dans l'administrateur ODBC.

Notez que d'autres options de configuration sont présentes dans l'écran de MySQL (traçage, se connecter automatiquement, etc.), vous pouvez les essayer en cas de problèmes.

25-A-4. Installer MyODBC depuis une distribution binaire sur Windows

Pour installer MyODBC sur Windows, il est recommandé de télécharger la distribution appropriée sur http://dev.mysql.com/downloads/connector/odbc/, la décompresser, et exécuter la commande MyODBC-VERSION.exe.

Sous Windows, vous pourriez rencontrer l'erreur suivante lors de l'installation d'un ancien pilote MyODBC 2.50 :

 
Sélectionnez
An error occurred while copying C:\WINDOWS\SYSTEM\MFC30.DLL. Restart
Windows and try installing again (before running any applications
which use ODBC)

Le problème est qu'un autre programme utilise ODBC. À cause de l'architecture de Windows, vous pourriez ne pas pouvoir installer de nouveau pilote ODBC avec le programme d'installation de Microsoft. Dans la plupart des cas, vous pouvez continuer avec le bouton Ignore pour copier le restant des fichiers MyODBC et l'installation finale peut fonctionner malgré tout. Si ce n'est pas le cas, la solution est de relancer votre ordinateur en « mode sans échec ». Choisissez ce mode en pressant F8 durant le redémarrage de Windows : installez MyODBC et relancez en mode normal.

25-A-5. Installer MyODBC depuis une distribution binaire Unix

25-A-5-a. Installer MyODBC depuis un RPM d'une distribution

Pour installer ou mettre à jour MyODBC depuis un RPM sous Linux, il faut le télécharger et lancer les commandes adéquates sous root.

Si c'est la toute première installation :

 
Sélectionnez
shell> su root
shell> rpm -ivh MyODBC-3.51.01.i386-1.rpm

Si le pilote existe déjà, la mise à jour se fait de la façon suivante :

 
Sélectionnez
shell> su root
shell> rpm -Uvh MyODBC-3.51.01.i386-1.rpm

S'il y a des erreurs de dépendances de bibliothèques clients MySQL, libmysqlclient, il faut l'ignorer via l'option --nodeps, et soyez sûr que le client MySQL partage la bibliothèque dans sa variable d'environnement ou l'assigne à travers LD_LIBRARY_PATH.

L'installation se fait dans /usr/local/lib et /usr/share/doc/MyODBC respectivement. Voir Section 25.1.9.3, « Configuration d'un DSN MyODBC sous Unix »25.1.9.3. Configuration d'un DSN MyODBC sous Unix.

Pour désinstaller le pilote, connectez-vous en root et exécutez la commande rpm suivante :

 
Sélectionnez
shell> su root
shell> rpm -e MyODBC

25-A-5-b. Installer MyODBC depuis une distribution binaire Tarball

Pour installer le pilote à partir d'un fichier tar.gz de distribution de tarball, téléchargez la dernière version du pilote pour votre système d'exploitation et suivez ces étapes :

 
Sélectionnez
shell> su root
shell> gunzip MyODBC-3.51.01-i686-pc-linux.tar.gz
shell> tar xvf MyODBC-3.51.01-i686-pc-linux.tar
shell> cd MyODBC-3.51.01-i686-pc-linux

Lire les instructions dans le fichier INSTALL-BINARY file et exécutez les commandes.

 
Sélectionnez
shell> cp libmyodbc* /usr/local/lib
shell> cp odbc.ini /usr/local/etc
shell> export ODBCINI=/usr/local/etc/odbc.ini

Ensuite, lisez le how to configure the DSN on unixConfiguration d'un DSN MyODBC sous Unix pour configurer le DSN pour ODBC. Pour plus d'informations, se référer au fichier INSTALL-BINARY de votre distribution.

25-A-6. Installer MyODBC depuis la version source sur Windows

25-A-6-a. Prérequis

  • MDAC, Microsoft Data Access SDK téléchargé sur http://www.microsoft.com/data/.
  • Bibliothèques client MySQL et fichiers d'inclusions de MySQL 4.0.0 ou plus récent. (De préférence, MySQL version 4.0.16 ou plus récent). Ceci est nécessaire, car MyODBC utilise les nouvelles interfaces et structures qui ne sont disponibles que depuis cette version. Pour télécharger les bibliothèques clientes et les fichiers d'inclusion, voyez http://dev.mysql.com/downloads/.

25-A-6-b. Compiler MyODBC 3.51

Les distributions source de MyODBC 3.51 incluent les fichiers Makefiles et utilisent nmake. Dans la distribution, vous pouvez trouver le Makefile pour différentes versions et le Makefile_debug pour compiler les versions de débogage du pilote et des DLL.

Pour compiler le pilote, suivez la procédure suivante :

  1. Téléchargez et décompressez les sources dans un dossier, puis placez-vous dans ce dossier. Les commandes suivantes supposeront que ce dossier s'appelle myodbc3-src :

     
    Sélectionnez
    C:\> cd myodbc3-src
  2. Éditez le fichier Makefile pour spécifier le chemin correct vers les bibliothèques client MySQL et les fichiers d'inclusions. Puis, utilisez les commandes suivantes pour compiler et installer votre version :

     
    Sélectionnez
    C:\> nmake -f Makefile
    C:\> nmake -f Makefile install

    nmake -f Makefile compile la version de production du pilote, et place les exécutables dans le dossier Release.

    nmake -f Makefile install installe (copie) le pilote DLL et les bibliothèques (myodbc3.dll, myodbc3.lib) dans votre dossier système.

  3. Pour compiler la version de débogage, utilisez Makefile_Debug plutôt que Makefile, comme ceci :

     
    Sélectionnez
    C:\> nmake -f Makefile_debug
    C:\> nmake -f Makefile_debug install
  4. Vous pouvez nettoyer et recompiler le pilote avec les commandes suivantes :
 
Sélectionnez
C:\> nmake -f Makefile clean
C:\> nmake -f Makefile install

Note :

  • Assurez-vous de spécifier le chemin correct jusqu'aux bibliothèques client MySQL et aux fichiers d'entêtes dans le fichier Makefile (modifiez les variables MYSQL_LIB_PATH et MYSQL_INCLUDE_PATH). Le chemin d'entête par défaut est C:\mysql\include. Le chemin par défaut pour la bibliothèque est C:\mysql\lib\opt pour les versions de publication, et C:\mysql\lib\debug pour les versions de débogage.
  • Pour une documentation complète de nmake, visitez http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcepb40/htm/_wcepb_nmake_tool.asp.
  • Si vous utilisez les sources sous BitKeeper pour la compilation, tous les fichiers Makefiles spécifiques à Windows sont nommés Win_Makefile*.

25-A-6-c. Tests de MyODBC

Après la compilation et l'installation des bibliothèques du pilote dans le système, vous pouvez tester votre installation avec les commandes suivantes, fournies dans le sous-dossier samples :

 
Sélectionnez
C:\> cd samples
C:\> nmake -f Makefile all

25-A-6-d. Compiler MyODBC 2.50

La distribution source MyODBC 2.50 inclut un projet VC. Vous pouvez compiler le pilote à partir de ces fichiers .dsp et .dsw, en les chargeant directement dans Microsoft Visual Studio 6.0 ou plus récent.

25-A-7. Installer MyODBC depuis une source sur Unix

25-A-7-a. Prérequis

  • Bibliothèques client MySQL et fichiers d'inclusions de MySQL 4.0.0 ou plus récent. (De préférence, MySQL version 4.0.16 ou plus récente). Ceci est nécessaire, car MyODBC utilise les nouvelles interfaces et structures qui ne sont disponibles que depuis cette version. Pour télécharger les bibliothèques clientes et les fichiers d'inclusion, regardez http://dev.mysql.com/downloads/.
  • La bibliothèque MySQL doit être configurée avec l'option --enable-thread-safe-client. libmysqlclient installée comme une bibliothèque partagée.
  • Un des gestionnaires de pilotes ODBC Unix suivants doit être installé :

  • Si vous utilisez un jeu de caractères qui n'est pas compilé dans la bibliothèque du client MySQL (les valeurs par défaut sont : latin1 big5 czech euc_kr gb2312 gbk sjis tis620 ujis), alors vous devez installer les définitions de caractères mysql du répertoire charsets dans SHAREDIR (par défaut, /usr/local/mysql/share/mysql/charsets). Ceux-ci devraient déjà exister si vous avez installé le serveur MySQL sur la même machine.

Une fois que vous avez tous les fichiers requis, décompressez les fichiers sources dans un répertoire distinct et suivez les instructions indiquées ci-dessous.

25-A-7-b. Options de configuration générales

Le script configure vous présente plusieurs manières de configurer votre MyODBC build. En règle générale, vous faites cela en utilisant les options de la ligne de commande configure. Vous pouvez également atteindre configure en utilisant certaines variables d'environnement. Pour une liste des options et des variables d'environnement supportées par configure, exécutez cette commande :

 
Sélectionnez
shell> ./configure --help

Certaines des options de configure les plus couramment utilisées sont décrites ici :

  1. Pour compiler MyODBC, vous devez fournir le chemin la bibliothèque client MySQL et les fichiers d'inclusion en utilisant l'option --with-mysql-path=DIR, où DIR est le répertoire où MySQL est installé.
    Les options de compilation de MySQL peuvent être déterminées en exécutant DIR/bin/mysql_config.
  2. Remplacer le chemin de l'entête standard et des fichiers de la bibliothèque par votre gestionnaire de pilotes ODBC (iodbc or unixobc).

    • Si vous utilisez i et qu'iodbc n'est pas installé dans cet emplacement par défaut (/usr/local), vous aurez à utiliser l'option --with-iodbc=DIR , où DIR est le répertoire où iodbc est installé.
      Si les entêtes iodbc ne sont pas présents dans DIR/include, vous pouvez utiliser l'option --with-iodbc-includes=INCDIR pour spécifier leur emplacement.
      La règle s'applique aux bibliothèques. Si elles ne sont pas dans le répertoire DIR/lib, vous pouvez utiliser l'option --with-iodbc-libs=LIBDIR.
    • Si vous utilisez unixODBC, utilisez l'option --with-unixODBC=DIR (sensible à la casse) pour faire examiner configure pour unixODBC au lieu de iodbc par défaut, DIR est le répertoire où unixODBC est installé.
      Si les entêtes et bibliothèques unixODBC ne sont pas présents dans DIR/include et DIR/lib, utilisez les options -with-unixODBC-includes=INCDIR et -with-unixODBC-libs=LIBDIR.
  3. Vous pouvez spécifier un préfixe d'installation autre que /usr/local. Par exemple, pour installer les pilotes MyODBC dans /usr/local/odbc/lib, utilisez l'option --prefix=/usr/local/odbc.

La dernière commande de configuration ressemblera à quelque chose comme ceci :

 
Sélectionnez
shell> ./configure --prefix=/usr/local \
           --with-iodbc=/usr/local \
           --with-mysql-path=/usr/local/mysql

25-A-7-c. Thread-Safe Client

Afin de lier le pilote avec les bibliothèques MySQL client thread safe libmysqlclient_r.so ou libmysqlclient_r.a, vous devez spécifier l'option de configure suivante :

 
Sélectionnez
--enable-thread-safe

et peut-être désactiver (par défaut) à l'aide de :

 
Sélectionnez
--disable-thread-safe

Cette option permet la création du pilote de la bibliothèque thread-safe à partir de la liaison avec la bibliothèque mysql client libmysqlclient_r.so thread-safe (Les extensions dépendent du système d'exploitation).

Lors de la configuration avec l'option thread-safe, si vous obtenez une erreur de configuration, regardez la config.log et vérifiez si elle est due à l'absence de thread-libraries dans le système ; et fournissez en une avec des options LIBS à savoir :

 
Sélectionnez
LIBS="-lpthread" ./configure ..

25-A-7-d. Options partagées ou statiques

Vous pouvez activer ou désactiver les versions partagées et statiques à l'aide de ces options :

 
Sélectionnez
--enable-shared[=yes/no]
--disable-shared
--enable-static[=yes/no]
--disable-static

25-A-7-e. Activation des informations de débogage

Par défaut, toutes les distributions binaires sont créées comme des versions sans débogage (configurées avec -without-debug).

Pour activer les informations de débogage, créez le pilote à partir de la distribution source et utilisez --with-debug) lorsque vous exécutez configure.

25-A-7-f. Activation de la documentation

Cette option n'est disponible que pour les clones BK ; pas pour les distributions de sources normales.

Par défaut, le pilote est construit avec (--without-docs) ; et quand vous voulez que la documentation soit prise en charge dans la construction normale, alors configurez avec :

 
Sélectionnez
--with-docs

25-A-7-g. Génération et compilation

Pour créer les bibliothèques de pilotes, il suffit d'exécuter make, qui prend tout en charge.

 
Sélectionnez
shell> make

Si des erreurs se produisent, corrigez-les et poursuivez le processus de génération. Si vous n'êtes pas en mesure de créer, envoyez un e-mail détaillé à <> pour obtenir de l'aide.

25-A-7-h. Création des bibliothèques partagées

Sur la plupart des plateformes, MySQL ne crée pas ou ne prend pas en charge les bibliothèques clientes .so (partagées) par défaut, car la génération avec des bibliothèques partagées nous a causé des problèmes dans le passé.

Dans les cas comme celui-ci, vous devez télécharger la distribution MySQL et la configurer avec les options suivantes :

 
Sélectionnez
--without-server --enable-shared

Pour créer des bibliothèques de pilotes partagés, vous devez spécifier l'option --enable-shared pour configure. Par défaut, configure n'active pas cette option.

Si vous avez configuré avec l'option --disable-shared vous pouvez créer un fichier .so à partir des bibliothèques statiques en utilisant les commandes suivantes :

 
Sélectionnez
shell> cd MyODBC-3.51.01
shell> make
shell> cd driver
shell> CC=/usr/bin/gcc \
       $CC -bundle -flat_namespace -undefined error \
           -o .libs/libmyodbc3-3.51.01.so \
           catalog.o connect.o cursor.o dll.o error.o execute.o \
           handle.o info.o misc.o myodbc3.o options.o prepare.o \
           results.o transact.o utility.o \
           -L/usr/local/mysql/lib/mysql/ \
           -L/usr/local/iodbc/lib/ \
           -lz -lc -lmysqlclient -liodbcinst

Assurez-vous de remplacer -liodbcinst par -lodbcinst si vous avez utilisé unixODBC au lieu de iODBC et configurez les chemins de bibliothèques en conséquence.

Cela génère et place le fichier libmyodbc3-3.51.01.so dans le répertoire .libs. Copiez ce fichier dans le répertoire de la bibliothèque MyODBC (/usr/local/lib (ou le répertoire lib dans le répertoire d'installation que vous avez fourni avec --prefix).

 
Sélectionnez
shell> cd .libs
shell> cp libmyodbc3-3.51.01.so /usr/local/lib
shell> cd /usr/local/lib
shell> ln -s libmyodbc3-3.51.01.so libmyodbc3.so

Pour créer la bibliothèque de pilote thread-safe :

 
Sélectionnez
shell> CC=/usr/bin/gcc \
       $CC -bundle -flat_namespace -undefined error
          -o .libs/libmyodbc3_r-3.51.01.so
          catalog.o connect.o cursor.o dll.o error.o execute.o
          handle.o info.o misc.o myodbc3.o options.o prepare.o
          results.o transact.o utility.o
          -L/usr/local/mysql/lib/mysql/
          -L/usr/local/iodbc/lib/
          -lz -lc -lmysqlclient_r -liodbcinst

25-A-7-i. Installation des bibliothèques de pilotes

Pour installer les bibliothèques de pilotes, exécutez les commandes suivantes :

 
Sélectionnez
shell> make install

Cette commande installe une des bibliothèques suivantes :

Pour MyODBC 3.51 :

  • libmyodbc3.so ;
  • libmyodbc3-3.51.01.so, où 3.51.01 est la version du pilote ;
  • libmyodbc3.a.

Pour thread-safe MyODBC 3.51 :

  • libmyodbc3_r.so ;
  • libmyodbc3-3_r.51.01.so ;
  • libmyodbc3_r.a.

Pour MyODBC 2.5.0 :

  • libmyodbc.so ;
  • libmyodbc-2.50.39.so, où 2.50.39 est la version du pilote ;
  • libmyodbc.a.

Pour plus d'informations sur le processus de création, se référer au fichier INSTALL qui est fourni avec la distribution source. Notez que si vous avez essayé d'utiliser make de Sun, vous risquez d'avoir des erreurs. D'autre part, gmake GNU devrait fonctionner correctement sur toutes les plateformes.

25-A-7-j. Tester MyODBC sur Unix

Pour exécuter les exemples de base fournis dans la distribution avec les bibliothèques que vous avez créées, exécutez simplement :

 
Sélectionnez
shell> make test

Assurez-vous que DSN 'myodbc3' est configuré en premier dans odbc.ini et que la variable d'environnement ODBCINI pointe vers le bon fichier odbc.ini ; et que le serveur MySQL est en cours d'exécution. Vous pouvez trouver un exemple de odbc.ini avec la distribution du pilote.

Vous pouvez même modifier le script samples/run-samples pour transmettre les valeurs DSN, UID et PASSWORD souhaitées en tant qu'arguments de ligne de commande à chaque échantillon.

25-A-7-k. Notes Mac OS X

Pour exécuter le pilote sur Mac OS X (Darwin), utilisez l'exemple configure suivant :

 
Sélectionnez
shell> ./configure --prefix=/usr/local
                   --with-unixODBC=/usr/local
                   --with-mysql-path=/usr/local/mysql
                   --disable-shared
                   --enable-gui=no
                   --host=powerpc-apple

La commande suppose que UnixODBC et MySQL sont installés aux emplacements par défaut. Sinon, configurez en conséquence.

Sur Mac OS X, --enable-shared crée des fichiers .dylib par défaut. Vous pouvez créer des fichiers .so comme ceci :

 
Sélectionnez
shell> make
shell> cd driver
shell> CC=/usr/bin/gcc \
       $CC -bundle -flat_namespace -undefined error
           -o .libs/libmyodbc3-3.51.01.so *.o
           -L/usr/local/mysql/lib/
           -L/usr/local/iodbc/lib
           -liodbcinst -lmysqlclient -lz -lc

Pour créer la bibliothèque du pilote thread-safe :

 
Sélectionnez
shell> CC=/usr/bin/gcc \
       $CC -bundle -flat_namespace -undefined error
       -o .libs/libmyodbc3-3.51.01.so *.o
       -L/usr/local/mysql/lib/
       -L/usr/local/iodbc/lib
       -liodbcinst -lmysqlclienti_r -lz -lc -lpthread

Assurez-vous de remplacer -liodbcinst par -lodbcinst si vous unixODBC au lieu de iODBC at configurez les chemins des bibliothèques conséquemment.

Dans la version Apple de GCC, les deux cc et gcc sont en fait des liens symboliques à gcc3.

Maintenant, copiez cette bibliothèque dans le répertoire $prefix/lib et créer un lien symbolique vers libmyodbc3.so.

Vous pouvez vérifier les propriétés de la bibliothèque partagée à l'aide de cette commande :

 
Sélectionnez
shell> otool -LD .libs/libmyodbc3-3.51.01.so

25-A-7-l. Notes HP-UX

Pour créer le pilote sur HP-UX 10.x ou 11.x, utilisez la commande configure suivante :

Si vous utilisez cc :

 
Sélectionnez
shell> CC="cc" \
       CFLAGS="+z" \
       LDFLAGS="-Wl,+b:-Wl,+s" \
       ./configure --prefix=/usr/local
                   --with-unixodbc=/usr/local
                   --with-mysql-path=/usr/local/mysql/lib/mysql
                   --enable-shared
                   --enable-thread-safe

Si vous utilisez gcc :

 
Sélectionnez
shell> CC="gcc" \
       LDFLAGS="-Wl,+b:-Wl,+s" \
       ./configure --prefix=/usr/local
                   --with-unixodbc=/usr/local
                   --with-mysql-path=/usr/local/mysql
                   --enable-shared
                   --enable-thread-safe

Une fois le pilote créé, vérifiez ses attributs en utilisant chatr .libs/libmyodbc3.sl pour voir si vous devez avoir le chemin des bibliothèques client MySQL à l'aide de la variable d'environnement SHLIB_PATH. Pour les versions statiques, ignorez toutes les options de bibliothèque partagée et exécutez configure avec l'option --disable-shared.

25-A-7-m. Notes pour AIX 

Pour compiler le pilote sur AIX, utilisez la commande configure suivante :

 
Sélectionnez
shell> ./configure --prefix=/usr/local
                   --with-unixodbc=/usr/local
                   --with-mysql-path=/usr/local/mysql
                   --disable-shared
                   --enable-thread-safe

NOTE : pour plus d'informations sur la compilation et la configuration de bibliothèques statiques ou partagées sur différentes plateformes, voyez « Using static and shared libraries across platforms ».

25-A-8. Installer MyODBC depuis le serveur de versions BitKeeper

Note : il est recommandé de lire cette section si vous souhaitez nous aider à tester les nouveaux codes.

Pour obtenir la version la plus récente depuis les serveurs de versions, utilisez ces instructions :

  1. Téléchargez BitKeeper depuis http://www.bitmover.com/cgi-bin/download.cgi. Vous aurez besoin de BitKeeper 3.0 ou plus récent pour vous connecter au serveur de versions.
  2. Suivez les instructions fournies pour l'installer.
  3. Une fois que BitKeeper est installé, placez-vous dans le dossier où vous voulez travailler, puis utilisez la commande suivante pour cloner la branche MyODBC 3.51 :

     
    Sélectionnez
    shell> bk clone bk://mysql.bkbits.net/myodbc3 myodbc-3.51

    Dans l'exemple précédent, les sources seront installés dans le dossier myodbc-3.51/ ou par défaut dans le sous-dossier myodbc3/ de votre dossier courant. Si vous êtes derrière un pare-feu, et que vous devez initier les connexions HTTP, vous devrez utiliser BitKeeper via HTTP. Si vous devez utiliser un serveur proxy, il suffit de configurer la variable d'environnement http_proxy pour qu'elle pointe sur votre proxy :

     
    Sélectionnez
    shell> export http_proxy="http://your.proxy.server:8080/"

    Maintenant, remplacez simplement bk:// par http:// lors du clonage. Par exemple :

     
    Sélectionnez
    shell> bk clone http://mysql.bkbits.net/myodbc3 myodbc-3.51

    Le téléchargement initial de l'arbre peut prendre un certain temps, en fonction de votre connexion : soyez patients.

  4. Vous aurez besoin de GNU autoconf 2.52 (ou plus récent), automake 1.4, libtool 1.4 et m4 pour lancer les commandes suivantes.

     
    Sélectionnez
    shell> cd myodbc-3.51
    shell> bk -r edit
    shell> aclocal; autoheader; autoconf;  automake;
    shell> ./configure  # Add your favorite options here
    shell> make

    Pour plus d'informations sur la compilation, lisez le fichier INSTALL dans le même dossier. Sous Windows, utilisez les fichiers Windows Makefiles WIN-Makefile et WIN-Makefile_debug pour compiler le pilote. Pour plus d'informations, voyez Section 25.1.6, « Installer MyODBC depuis la version source sur Windows »25.1.6. Installer MyODBC depuis la version source sur Windows.

  5. Lorsque la compilation est faite, lancez make install pour installer le pilote MyODBC 3.51 sur votre système.

  6. Si vous avez atteint l'instruction make et que la distribution ne compile pas, envoyez un message à <>.

  7. Après la commande bk clone initiale, vous devez utiliser la commande bk pull régulièrement, pour obtenir les dernières modifications.

  8. Vous pouvez examiner l'historique de changements du fichier avec toutes les modifications grâce à la commande bk sccstool. Si vous rencontrez des patchs étranges sur lesquels vous avez des questions, envoyez un mail à <>.
    De même, si vous pensez avoir une meilleure idée pour un traitement, envoyez un courriel avec votre patch. bk diffs va générer un patch pour vous, à partir de vos modifications. Si vous n'avez pas le temps de programmer votre idée, envoyez simplement une description.

  9. BitKeeper dispose d'une aide en ligne précieuse, que vous pouvez obtenir avec bk helptool.

Vous pouvez aussi lire les listes de modifications, les commentaires et les sources en ligne : http://mysql.bkbits.net:8080/myodbc3.

25-A-9. Configuration MyODBC

Cette section décrit comment configurer MyODBC, incluant la création d'un DSN et les différents arguments que prend le pilote comme « input » pour la connexion. Il décrit également comment créer le fichier de traces d'un fichier ODBC.

25-A-9-a. Qu'est-ce qu'un Data Source Name, ou Nom de Source de Données ?

Une « source de données » est un système qui émet des données. Les sources de données doivent avoir un identifiant persistant, appelé Data Source Name, ou Nom de Source de Données. En utilisant un Nom de Source de Données, MySQL peut accéder aux informations d'initialisation. Avec les informations d'initialisation, MySQL sait où accéder à la base, et quelles options de configuration utiliser lors de la connexion.

En effet, la source de données est un chemin vers les données. Dans un contexte différent, cela signifie autre chose, mais typiquement, cela identifie un serveur MySQL : par exemple, une adresse réseau, ou un nom de service ; plus un nom de base de données par défaut et les informations obligatoires comme le port, par exemple. Les pilotes MySQL, le système Windows et le gestionnaire ODBC utiliseront la source de données pour se connecter. Un utilitaire d'administration, appelé Microsoft ODBC Data Source Administrator peut être utile dans cette situation.

Il y a deux endroits pour stocker les informations d'initialisation : dans la base de registres de Windows, ou via un DSN sur n'importe quel système.

Si les informations sont dans la base de registres de Windows, elles sont dites sources de données Machine ("Machine data source"). Cela peut être une source de données utilisateur ("User data source"), auquel cas, seul un utilisateur pourra la voir. Ou, cela peut être une source de données système ("System data source"), auquel cas, elle sera accessible à tous les utilisateurs du système, ou même, tous les utilisateurs connectés au serveur. Lorsque vous exécutez le programme d'administration ODBC, vous aurez le choix entre "User" et "System" : ce sont deux onglets séparés.

Si les informations sont dans un fichier DSN, elles portent le nom de source de données fichiers ("File data source"). C'est un fichier texte. Les avantages sont que (a) c'est une option pour n'importe quel ordinateur et non pas seulement sur Windows ; (b) son contenu peut être transmis ou copié facilement.

25-A-9-b. Configuration du DSN MyODBC sur Windows

Pour ajouter et configurer une nouvelle source de données MyODBC sur Windows, utilisez le ODBC Data Source Administrator. Le ODBC Administrator modifie les informations de connexion à la source de données. En ajoutant de nouvelles sources, le ODBC Administrator met à jour la base des registres pour vous.

Ouvrir le ODBC Administrateur via le panneau de configuration :

  1. Cliquez sur Démarrer, pointez Paramètres et cliquez sur Panneau de configuration.
  2. Sur les ordinateurs exécutant Microsoft Windows 2000 ou version ultérieure, double-cliquez sur Outils d'administration, puis double-cliquez sur Sources de données (ODBC). Sur les ordinateurs exécutant des versions antérieures de Windows, double-cliquez sur ODBC 32 bits ou ODBC.
    Image non disponible
    La boîte de dialogue ODBC Data Source Administrator s'affiche, comme indiqué ici :
    Image non disponible
    Cliquez Help pour des informations détaillées sur chaque onglet de la boîte de dialogue ODBC Data Source Administrator.

Pour ajouter une source de données sous Windows :

  1. Ouvrir le ODBC Data Source Administrator.
  2. Dans la boîte de dialogue ODBC Data Source Administrator, cliquez Add. La boîte de dialogue Créer une nouvelle source de données apparaît.
  3. Sélectionnez le pilote MySQL ODBC 3.51 et cliquez sur Terminer. La boîte de dialogue de configuration du pilote MySQL ODBC 3.51 apparaît comme suit :
    Image non disponible
  4. Dans la zone Data Source Name entrez le nom de la source de données à laquelle vous souhaitez accéder. Il peut s'agir de n'importe quel nom valide que vous choisissez.
  5. Dans la zone Description, entrez la description requise pour le DSN.
  6. Pour Host ou Server Name (ou IP), saisissez le nom de l'hôte du serveur MySQL auquel vous souhaitez accéder. Par défaut c'est localhost.
  7. Dans la zone Database Name, entrez le nom de la base de données MySQL que vous voulez utiliser comme base de données par défaut.
  8. Dans la zone User, entrez votre nom d'utilisateur MySQL (l'ID de votre base de données).
  9. Dans la zone Password, entrez votre mot de passe.
  10. Dans la zone Port, entrez le numéro du port si ce n'est pas celui par défaut (3306).
  11. Dans la zone SQL Command, vous pouvez entrer une instruction SQL facultative que vous souhaitez lancer automatiquement une fois la connexion établie.
    La boîte de dialogue finale ressemble à ceci :
    Image non disponible
    Cliquez OK pour ajouter la source de données.

Note : lorsque vous cliquez sur OK, la boîte de dialogue Sources de données s'affiche et l'administrateur ODBC met à jour les informations du Registre. Le nom d'utilisateur et la chaîne de connexion que vous avez entrés deviennent les valeurs de connexion par défaut pour cette source de données lorsque vous vous connectez à elle.

Vous pouvez également vérifier si vos paramètres sont adaptés à la connexion au serveur à l'aide du bouton Test Data Source. Cette fonctionnalité est disponible uniquement pour le pilote MyODBC 3.51. Un résultat de test réussi dans la fenêtre suivante :

Image non disponible

Un test échoué entraîne une erreur :

Image non disponible

La boîte de dialogue de configuration DSN dispose également d'un bouton Options. Si vous le sélectionnez, la boîte de dialogue d'options suivante s'affiche affichant le comportement du pilote de contrôle. Voir la Section 25.1.9.4, « Paramètres de connexion »25.1.9.4. Paramètres de connexion pour plus d'informations sur la signification de ces options.

Image non disponible

Note : Les options répertoriées sous Driver Trace Options sont désactivées (grisé) sauf si vous utilisez la version de débogage du pilote DLL.

Pour modifier la source de données sous Windows :

  1. Ouvrir le ODBC Data Source Administrator. Cliquez sur l'onglet DSN approprié.
  2. Sélectionnez la source de données MySQL que vous voulez modifier et cliquez sur Configure. La boîte de dialogue MySQL ODBC 3.51 Driver - DSN apparaît.
  3. Modifiez les champs de source de données applicables, puis cliquez sur OK.

Lorsque vous avez terminé de modifier les informations dans cette boîte de dialogue, l'administrateur ODBC met à jour les informations du Registre.

25-A-9-c. Configuration d'un DSN MyODBC sous Unix

Sous Unix, vous configurez les DSN directement dans le fichier odbc.ini. Voici un exemple typique de fichier odbc.ini qui configure myodbc et myodbc3 comme noms DSN pour MyODBC 2.50 et MyODBC 3.51, respectivement :

 
Sélectionnez
;
;  odbc.ini configuration for MyODBC and MyODBC 3.51 drivers
;

[ODBC Data Sources]
myodbc      = MyODBC 2.50 Driver DSN
myodbc3     = MyODBC 3.51 Driver DSN

[myodbc]
Driver       = /usr/local/lib/libmyodbc.so
Description  = MyODBC 2.50 Driver DSN
SERVER       = localhost
PORT         =
USER         = root
Password     =
Database     = test
OPTION       = 3
SOCKET       =

[myodbc3]
Driver       = /usr/local/lib/libmyodbc3.so
Description  = MyODBC 3.51 Driver DSN
SERVER       = localhost
PORT         =
USER         = root
Password     =
Database     = test
OPTION       = 3
SOCKET       =

[Default]
Driver       = /usr/local/lib/libmyodbc3.so
Description  = MyODBC 3.51 Driver DSN
SERVER       = localhost
PORT         =
USER         = root
Password     =
Database     = test
OPTION       = 3
SOCKET       =

Reportez-vous aux Sections 25.1.9.4, « Paramètres de connexion »25.1.9.4. Paramètres de connexion, pour la liste de paramètres de connexion qui sont disponibles.

Note : si vous utilisez unixODBC, vous pouvez utiliser les outils suivants pour configurer les DSN :

Dans certains cas lorsque vous utilisez unixODBC, vous pouvez obtenir cette erreur :

 
Sélectionnez
Data source name not found and no default driver specified

Lorsque cela survient, assurez-vous que les variables d'environnement ODBCINI et ODBCSYSINI pointent sur le bon fichier odbc.ini. Par exemple, si votre fichier odbc.ini est situé dans /usr/local/etc, donnez les valeurs suivantes aux variables d'environnement :

 
Sélectionnez
export ODBCINI=/usr/local/etc/odbc.ini
export ODBCSYSINI=/usr/local/etc

25-A-9-d. Paramètres de connexion

Vous pouvez spécifier les paramètres suivants de MyODBC dans la section [Data Source Name] du fichier ODBC.INI ou via l'argument InConnectionString dans l'appel à SQLDriverConnect().

Paramètre

Valeur par défaut

Commentaire

user

ODBC (sur Windows)

Le nom de l'utilisateur pour se connecter à MySQL.

server

localhost

Le nom de l'hôte MySQL.

database

 

La base de données par défaut.

option

0

Options qui spécifient comment MyODBC fonctionne. Voir ci-dessous.

port

3306

Le port TCP/IP à utiliser si le server n'est pas localhost.

stmt

 

Une commande à exécuter lors de la connexion à MySQL.

password

 

Le mot de passe pour le compte user sur le serveur server.

socket

 

Le fichier de socket Unix ou le pipe nommé Windows utilisé pour se connecter à server s'il est sur localhost.

L'argument option sert à indiquer à MyODBC que le client n'est pas compatible à 100 % ODBC. Sur Windows, vous pouvez sélectionner des options avec les boîtes à cocher dans l'écran de configuration, mais vous pouvez aussi les configurer avec l'argument option. Les options suivantes sont listées dans l'ordre d'apparition à l'écran de connexion MyODBC :

Valeur

Description

1

Le client ne peut pas gérer la taille réelle des colonnes retournées par MyODBC.

2

Le client ne peut pas gérer la vraie valeur des lignes modifiées. Si cette option est active, MySQL retourne « found rows » à la place. Vous devez avoir MySQL 3.21.14 ou plus récent pour faire fonctionner cette option.

4

Crée un log de débogage dans c:\myodbc.log. Cela revient à ajouter la ligne MYSQL_DEBUG=d:t:O,c::\myodbc.log dans le fichier AUTOEXEC.BAT. (Sous Unix, ce fichier est /tmp/myodbc.log.)

8

Ne pas envoyer de limites de paquets pour les résultats et paramètres.

16

Ne pose aucune question, même si le pilote souhaite poser des questions.

32

Active ou désactive le support des curseurs dynamiques. (Interdit en MyODBC 2.50.)

64

Ignore l'utilisation du nom de la base de données dans la syntaxe db_name.tbl_name.col_name.

128

Force l'utilisation du gestionnaire de curseur ODBC (expérimental).

256

Désactive l'utilisation de la lecture étendue (extended fetch, expérimental).

512

Complète les colonnes CHAR jusqu'à leur taille maximale.

1024

SQLDescribeCol() retourne des noms de colonnes complets.

2048

Utilise le protocole client-serveur compressé.

4096

Indique au serveur qu'il peut ignorer l'espace après les noms de fonctions, avant la parenthèse ouvrante « ( » (exigé par PowerBuilder). Cela transforme tous les noms de fonctions en mots clés.

8192

Connexion au serveur mysqld avec les pipes nommés sous NT.

16384

Change les colonnes LONGLONG en INT (certaines applications ne peuvent pas gérer les LONGLONG).

32768

Retourne 'user' comme Table_qualifier et Table_owner de SQLTables (expérimental).

65536

Lit les paramètres du client depuis les groupes [client] et [odbc] dans my.cnf.

131072

Ajoute certaines vérifications de sécurité (normalement inutiles, mais sait-on jamais...)

262144

Désactive les transactions.

524288

Active le log de requêtes dans le fichier c:\myodbc.sql(/tmp/myodbc.sql). (Activé uniquement en mode débogage).

1048576

Ne met pas les résultats en cache localement dans le pilote, mais lit toujours auprès du serveur (mysql_use_result()). Cela ne fonctionne que pour les curseurs directs. Cette option est très importante pour traiter les très grandes tables, lorsque vous ne voulez pas que le pilote mette en cache toute la table.

2097152

Impose l'utilisation du curseur Forward-only. Dans le cas d'applications qui configurent le type par défaut des curseurs, et que vous souhaitez malgré tout ne pas mettre en cache les résultats, cette option imposera un comportement de curseur direct.

Pour sélectionner plusieurs options en même temps, additionnez leurs valeurs. Par exemple, l'option 12 (4+8) vous donne le débogage sans limite de paquets.

myodbc3.dll par défaut est compilé pour les meilleures performances. Si vous voulez déboguer MyODBC 3.51 (par exemple, pour activer les traces), vous devriez utiliser myodbc3d.dll. Pour installer ce fichier, copiez le fichier myodbc3d.dll à la place de myodbc3.dll. Assurez-vous de bien remettre la bonne bibliothèque une fois que vous avez fini, car la version de débogage peut vous ralentir considérablement.

Pour MyODBC 2.50, myodbc.dll et myodbcd.dll doivent être utilisés.

La table suivante affiche différentes valeurs recommandées pour option :

Configuration

Valeur

Microsoft Access

3

Microsoft Visual Basic

3

Grandes tables avec trop de lignes

2049

Génération de trace de débogage

4

Génération de log de requêtes

524288

Génération de logs de requêtes et de traces

524292

De grandes tables sans cache

3145731

25-A-9-e. Se connecter sans définir de DSN

C'est possible. Vous pouvez vous connecter à un serveur MySQL en utilisant SQLDriverConnect, et en spécifiant le champ DRIVER. Voici les chaînes de connexion à utiliser avec MyODBC pour une connexion sans DSN :

Pour MyODBC 2.50 :

 
Sélectionnez
ConnectionString = "DRIVER={MySQL};\
                    SERVER=localhost;\
                    DATABASE=test;\
                    USER=venu;\
                    PASSWORD=venu;\
                    OPTION=3;"

Pour MyODBC 3.51 :

 
Sélectionnez
ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};\
                    SERVER=localhost;\
                    DATABASE=test;\
                    USER=venu;\
                    PASSWORD=venu;\
                    OPTION=3;"

Si votre langage de programmation convertit les antislash suivis d'espaces en espace, il est préférable de spécifier la chaîne de connexion sous la forme d'une longue chaîne, ou d'utiliser la concaténation de plusieurs chaînes, sans ajouter d'espace entre :

 
Sélectionnez
ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};"
                    "SERVER=localhost;"
                    "DATABASE=test;"
                    "USER=venu;"
                    "PASSWORD=venu;"
                    "OPTION=3;"

Reportez-vous à la section Section 25.1.9.4, « Paramètres de connexion »25.1.9.4. Paramètres de connexion, pour la liste complète des paramètres de connexion à fournir.

25-A-9-f. Établir une connexion distante d'un système A à un système B

Si vous voulez connecter un système A à un système B, avec le nom d'utilisateur et le mot de passe myuser et mypassword, voici une procédure simple :

  1. Sur le système A, suivez les étapes suivantes :

    1. Lancez le serveur MySQL.
    2. Utilisez la commande GRANT pour configurer un compte avec le nom d'utilisateur de myuser qui peut se connecter depuis le système B, avec le mot de passe de myuser :

       
      Sélectionnez
      GRANT ALL ON *.* to 'myuser'@'B' IDENTIFIED BY 'mypassword';
    3. La commande GRANT donne tous les droits à l'utilisateur myuser pour se connecter depuis le système B, en utilisant le mot de passe mypassword. Pour exécuter cette commande, il faut les droits de root sur le système A, ou un utilisateur équivalent. Pour plus d'informations sur le système de droits de MySQL, voyez la section Section 5.6, « Gestion des comptes utilisateurs de MySQL »5.6. Gestion des comptes utilisateurs de MySQL.

  2. Sur le système B, suivez ces instructions :

    1. Configurez un DSN MyODBC en utilisant les informations de connexion suivantes :

       
      Sélectionnez
      DSN            = remote_test
      SERVER or HOST = A (ou l'adresse IP du système A)
      DATABASE       = test (La base de données par défaut)
      USER           = myuser
      PASSWORD       = mypassword

      Pour configurer une connexion sans DSN, voyez Section 25.1.9.5, « Se connecter sans définir de DSN »25.1.9.5. Se connecter sans définir de DSN.

    2. Vérifiez si vous êtes capables d'accéder au système A depuis le système B avec un ping ou un autre moyen. Si vous n'êtes pas capables d'atteindre B, vérifiez votre réseau, les connexions Internet ou alors contactez votre administrateur réseau.

    3. Maintenant, essayez de vous connecter en utilisant DSN=remote_test. Si vous échouez, lisez le log MyODBC, et suivez les instructions indiquées dans le message d'erreur du log. Si vous avez besoin d'autre support, envoyez un mail à <>.

Vous pouvez aussi lire un HOWTO sur http://www.phphelp.com/tutorial/using-myodbc-to-connect-to-a-remote-database.html.

25-A-9-g. Obtenir un fichier de trace ODBC

Si vous rencontrez des difficultés ou des problèmes avec MyODBC, vous devriez lancer le programme en créant un fichier de log à partir du ODBC Manager (le log que vous obteniez de ODBC ADMIN) et MyODBC.

Pour obtenir une trace ODBC via le gestionnaire de pilotes, faites ceci :

  • ouvrez l'administrateur de sources ODBC :

    1. cliquez sur Start, pointez sur Settings, et ensuite cliquez sur Control Panel,
    2. sur les machines Microsoft Windows 2000 ou XP, double-cliquez sur Administrative Tools, puis sur Data Sources (ODBC), comme montré ci-dessous.
      Image non disponible
      Sur les machines avec des versions de Microsoft plus anciennes, double-cliquez sur 32-bit ODBC ou ODBC dans le panneau de contrôle,
    3. le dialogue ODBC Data Source Administrator apparaît :
      Image non disponible
    4. cliquez sur Help pour des informations détaillées sur chaque onglet de la boîte de dialogue.
  • Activez l'option de trace. Cette procédure est différente sur Windows et sur Unix.
    Pour activer l'option de trace sur Windows :

    1. l'onglet Tracing de la boîte de dialogue de ODBC Data Source Administrator vous permet de configurer la trace des fonctions ODBC,
    2. lorsque vous activez la trace depuis l'onglet Tracing, le Driver Manager va enregistrer toutes les fonctions ODBC de toutes les futures applications,
    3. les fonctions ODBC des applications en fonctionnement ne sont pas enregistrées. Les fonctions ODBC sont enregistrées dans le fichier de log que vous spécifiez,
    4. la trace cesse après que vous ayez cliqué sur Stop Tracing Now. N'oubliez pas que tant que la trace est active, le fichier de log continue de croître en taille, et que la trace ralentit toutes vos applications ODBC.
      Image non disponible

    Pour activer la trace sous Unix :

    1. Sous Unix, vous devez explicitement configurer l'option Trace dans le fichier ODBC.INI.
      Spécifiez la valeur de ON ou OFF aux options TraceFile et Trace dans le fichier odbc.ini :
 
Sélectionnez
TraceFile  = /tmp/odbc.trace
Trace      = 1

TraceFile spécifie le nom et le chemin complet des fichiers de trace, et Trace vaut ON ou OFF. Vous pouvez aussi utiliser 1 ou YES pour ON et 0 ou NO pour OFF. Si vous utilisez ODBCConfig avec unixODBC, alors suivez les instructions de trace d'unixODBC sur HOWTO-ODBCConfig.

Pour générer un log MyODBC, faites ceci :

  1. Assurez-vous que vous utilisez la bibliothèque de débogage DLL, c'est-à-dire myodbc3d.dll et non pas myodbc3.dll de MyODBC 3.51, et myodbcd.dll pour MyODBC 2.50.
    La méthode la plus facile est de prendre myodbc3d.dll ou myodbcd.dll dans la distribution de MyODBC 3.51 et de copier le fichier myodbc3.dll ou myodbc.dll, qui est probablement dans votre dossier C:\windows\system32 ou C:\winnt\system32. Notez que vous souhaiterez sûrement remettre l'ancien fichier myodbc.dll lorsque vous aurez fini, car il est bien plus rapide que myodbc3d.dll et myodbcd.dll : alors gardez une copie de vos fichiers originaux.
  2. Activez l'option Trace MyODBC dans l'écran de connexion MyODBC. Le log sera écrit dans le fichier C:\myodbc.log. Si l'option de trace n'est pas conservée lorsque vous retournez dans l'écran ci-dessus, cela signifie que vous n'utilisez pas le pilote myodbcd.dll. Sur Linux ou si vous avec une connexion sans DSN, il faut fournir l'option OPTION=4 dans la chaîne de connexion.
  3. Lancez votre application et essayez de reproduire votre problème. Puis, vérifiez le fichier de trace ODBC.
    Si vous trouvez un problème, envoyez un message à <> ou à <> si vous avez un contrat de support, avec une brève description de votre problème, et les informations suivantes :

    • version de MyODBC,
    • type de pilote ODBC et sa version,
    • serveur MySQL et sa version,
    • la trace ODBC du gestionnaire de pilote,
    • le fichier de log MyODBC du pilote MyODBC,
    • un exemple reproductible aussi simple que possible.

Pensez que plus vous nous fournissez d'explication, plus nous pourrons résoudre votre problème rapidement.

De plus, après avoir envoyé le rapport de bogue, vérifiez les listes de discussion MyODBC sur http://lists.mysql.com/.

25-A-9-h. Applications testées avec MyODBC

MyODBC a été testé avec les applications suivantes :

Si vous connaissez d'autres applications fonctionnant avec MyODBC, s'il vous plaît, envoyez un courriel à <>.

25-A-9-i. Programmes fonctionnant avec MyODBC

La majorité des programmes doivent pouvoir fonctionner avec MyODBC, mais ceux qui sont listés ici ont été testés par nous-mêmes, ou bien par des utilisateurs de confiance. Les descriptions fournissent des palliatifs aux problèmes rencontrés.

  • Programme
    Commentaire
  • Access
    Pour faire fonctionner Access :

    • si vous utilisez Access 2000, il est recommandé d'installer la dernière version 2.6 ou plus récente, de Microsoft MDAC (Microsoft Data Access Components) depuis http://www.microsoft.com/data/. Cela va corriger un problème dans Access lors de l'exportation de données vers MySQL, lorsque le nom de la table et de ses colonnes ne sont pas spécifiés. Une autre solution à ce problème est de passer en MyODBC 2.50.33 et MySQL 3.23.x, qui, ensemble, fournissent un palliatif à ce problème.
      Nous vous recommandons aussi d'appliquer le Microsoft Jet 4.0 Service Pack 5 (SP5) qui est téléchargeable sur http://support.microsoft.com/default.aspx?scid=kb;EN-US;q239114. Cela corrigera des situations où les colonnes sont marquées comme #DELETED# dans Access.
      Note : si vous utilisez MySQL 3.22, vous devez appliquer le patch MDAC et utiliser MyODBC 2.50.32 ou 2.50.34 et plus récent pour corriger le problème,
    • pour toutes les versions d'Access, vous devez activer l'option MyODBC Return matching rows. Pour Access 2.0, il faut aussi activer l'option Simulate ODBC 1.0,
    • il faut avoir une colonne timestamp dans toutes les tables qui seront modifiées. Pour une portabilité maximale, n'utilisez pas de spécification de taille dans la déclaration de la colonne. C'est-à-dire, utilisez TIMESTAMP, et non TIMESTAMP(n), n < 14,
    • vous devez avoir une clé primaire dans la table. Sinon, les nouvelles lignes ou les lignes modifiées risquent d'apparaître comme #DELETED#,
    • utilisez uniquement des champs décimaux DOUBLE. Access ne sait pas comparer des décimaux simples. Le symptôme est généralement que les nouvelles lignes ou les lignes modifiées apparaissent comme #DELETED# ou que vous ne pouvez pas trouver ou modifier ces lignes,
    • si vous utilisez MyODBC pour relier une table qui a une colonne BIGINT, le résultat risque d'apparaître comme #DELETED. La solution est la suivante :

      • ajoutez une ou plusieurs colonnes TIMESTAMP,
      • sélectionnez l'option Change BIGINT columns to INT dans le dialogue de connexion ODBC DSN Administrator,
      • effacez le lien de la table depuis Access et recréez-le.

      Les anciennes lignes seront toujours affichées comme #DELETED#, mais les nouvelles lignes seront affichées correctement.

    • Si vous avez toujours des erreurs de type Another user has changed your data après avoir ajouté une colonne de type TIMESTAMP, le truc suivant pourra vous aider :
      N'utilisez pas les données de la table table en mode tableau. Au lieu de cela, créez un formulaire avec les champs que vous voulez, et utilisez le mode tableau de ce form. Activez l'option DefaultValue de la colonne TIMESTAMP, avec la valeur NOW(). C'est une bonne idée que de masquer la colonne TIMESTAMP pour que les utilisateurs ne soient pas perturbés.
    • Dans certains cas, Access génère des commandes SQL incorrectes que MySQL ne peut pas comprendre. Vous pouvez corriger cela en sélectionnant l'option "Query|SQLSpecific|Pass-Through" dans le menu d'Access.
    • Sous NT, Access indique que les colonnes BLOB sont des OLE OBJECTS. Si vous voulez avoir des colonnes MEMO à la place, changez les colonnes BLOB en TEXT avec ALTER TABLE.
    • Access ne peut pas toujours gérer les colonnes DATE correctement. Si vous avez des problèmes avec elles, utilisez DATETIME.
    • Si vous avez une colonne d'Access définie comme BYTE, Access va l'exporter comme TINYINT au lieu de TINYINT UNSIGNED. Cela vous posera des problèmes si vous avez des valeurs supérieures à 127.
  • ADO
    Lorsque vous codez avec l'API ADO et MyODBC, vous devez faire attention aux propriétés par défaut qui ne sont pas supportées par MySQL. Par exemple, en utilisant CursorLocation Property, adUseServer va retourner un résultat de -1 pour RecordCount Property. Pour avoir la bonne valeur, vous devez donner la valeur de adUseClient à cette propriété, tel que présenté ci-dessous :

     
    Sélectionnez
    Dim myconn As New ADODB.Connection
    Dim myrs As New Recordset
    Dim mySQL As String
    Dim myrows As Long
    
    myconn.Open "DSN=MyODBCsample"
    mySQL = "SELECT * from user"
    myrs.Source = mySQL
    Set myrs.ActiveConnection = myconn
    myrs.CursorLocation = adUseClient
    myrs.Open
    myrows = myrs.RecordCount
    
    myrs.Close
    myconn.Close

    Un autre palliatif est d'utiliser SELECT COUNT(*) pour connaître le nombre de lignes.

  • Active server pages (ASP)
    Il est recommandé de sélectionner l'option Return matching rows.

  • applications BDE
    Pour faire fonctionner ces applications, vous devez sélectionner les options Don't optimize column widths et Return matching rows.

  • Borland Builder 4
    Lorsque vous lancez une requête, vous pouvez utiliser la propriété Active ou la méthode Open. Notez que Active commencera par émettre automatiquement une requête SELECT * FROM .... Cela n'est pas forcément pratique si vos tables sont grandes.

  • ColdFusion (On Unix)
    Les informations suivantes sont tirées de la documentation ColdFusion :
    Utilisez les informations suivantes pour configurer le serveur ColdFusion pour Linux avec le pilote unixODBC et MyODBC pour MySQL. Allaire a vérifié que MyODBC 2.50.26 fonctionne avec MySQL 3.22.27 et ColdFusion pour Linux. Toutes les versions plus récentes devraient aussi fonctionner. Vous pouvez télécharger MyODBC sur http://dev.mysql.com/downloads/connector/odbc/.
    ColdFusion Version 4.5.1 vous permet d'utiliser l'administrateur ColdFusion pour ajouter des sources de données MySQL. Cependant, le pilote n'est pas inclus avec ColdFusion Version 4.5.1. Avant que le pilote MySQL n'apparaisse dans les listes de sources ODBC, vous devez compiler et copier le pilote MyODBC dans /opt/coldfusion/lib/libmyodbc.so.
    Le dossier Contrib contient le programme mydsn-xxx.zip qui vous permet de compiler et supprimer le fichier DSN pour les applications Coldfusion qui utilisent le pilote MyODBC.

  • DataJunction
    Vous devez changer pour exporter des VARCHAR au lieu des types ENUM, car l'export de ce dernier pose des problèmes à MySQL.

  • Excel
    Fonctionne. Quelques conseils :

    • Si vous avez des problèmes avec les dates, essayez de les transformer en chaîne, avec la fonction CONCAT() . Par exemple :

       
      Sélectionnez
      SELECT CONCAT(rise_time), CONCAT(set_time)
          FROM sunrise_sunset;

      Les valeurs lues comme des chaînes seront reconnues correctement par Excel97.

      Le but de CONCAT() dans cet exemple est de faire croire à ODBC que la colonne est de type « chaîne ». Sans CONCAT(), ODBC sait que la colonne est de type TIME, et Excel ne le comprendra pas.

      Notez que c'est un bogue dans Excel, car il convertit automatiquement une chaîne en heure. Cela serait bien si la source était un fichier de texte, mais malheureusement ici, la connexion ODBC indique le bon type pour chaque colonne.

  • Word
    Pour lire des données depuis MySQL vers des documents Word/Excel, vous devez utiliser le pilote MyODBC et le Add-in Microsoft Query.
    Par exemple, pour créer une base de données avec une table avec 2 colonnes de texte :

    • insérez deux lignes avec le client mysql ;
    • créez un fichier DSN file en utilisant le gestionnaire ODBC, par exemple, my, pour la base de données créée ;
    • lancez Word,
    • créez un document vide,
    • dans la barre d'outil Database, cliquez sur le bouton Insert Database,
    • cliquez sur le bouton Get Data,
    • dans la gauche de l'écran Get Data, cliquez sur Ms Query,
    • dans Ms Query, créez une nouvelle source de données en utilisant le DSN my,
    • sélectionnez la nouvelle requête,
    • sélectionnez les colonnes que vous voulez,
    • ajoutez le filtre que vous voulez,
    • ajoutez le tri que vous souhaitez,
    • sélectionnez Return Data to Microsoft Word,
    • cliquez sur Finish,
    • cliquez sur Insert Data et sélectionnez les lignes,
    • Cliquez sur OK et voyez les lignes dans votre document Word.

  • odbcadmin
    Programme de test pour ODBC.

  • Delphi
    Vous devez utiliser BDE Version 3.2 ou plus récent. Sélectionnez l'option Don't optimize column width lors de la connexion à MySQL.
    De plus, il y a des codes pratiques Delphi qui configurer une entrée ODBC et une source BDE pour MyODBC. La source BDE requiert BDE Alias Editor qui est gratuit sur Delphi Super Page. (Merci à Bryan Brunton <> pour cela) :

     
    Sélectionnez
    fReg:= TRegistry.Create;
      fReg.OpenKey('\Software\ODBC\ODBC.INI\DocumentsFab', True);
      fReg.WriteString('Database', 'Documents');
      fReg.WriteString('Description', ' ');
      fReg.WriteString('Driver', 'C:\WINNT\System32\myodbc.dll');
      fReg.WriteString('Flag', '1');
      fReg.WriteString('Password', '');
      fReg.WriteString('Port', ' ');
      fReg.WriteString('Server', 'xmark');
      fReg.WriteString('User', 'winuser');
      fReg.OpenKey('\Software\ODBC\ODBC.INI\ODBC Data Sources', True);
      fReg.WriteString('DocumentsFab', 'MySQL');
      fReg.CloseKey;
      fReg.Free;
    
      Memo1.Lines.Add('DATABASE NAME=');
      Memo1.Lines.Add('USER NAME=');
      Memo1.Lines.Add('ODBC DSN=DocumentsFab');
      Memo1.Lines.Add('OPEN MODE=READ/WRITE');
      Memo1.Lines.Add('BATCH COUNT=200');
      Memo1.Lines.Add('LANGDRIVER=');
      Memo1.Lines.Add('MAX ROWS=-1');
      Memo1.Lines.Add('SCHEMA CACHE DIR=');
      Memo1.Lines.Add('SCHEMA CACHE SIZE=8');
      Memo1.Lines.Add('SCHEMA CACHE TIME=-1');
      Memo1.Lines.Add('SQLPASSTHRU MODE=SHARED AUTOCOMMIT');
      Memo1.Lines.Add('SQLQRYMODE=');
      Memo1.Lines.Add('ENABLE SCHEMA CACHE=FALSE');
      Memo1.Lines.Add('ENABLE BCD=FALSE');
      Memo1.Lines.Add('ROWSET SIZE=20');
      Memo1.Lines.Add('BLOBS TO CACHE=64');
      Memo1.Lines.Add('BLOB SIZE=32');
    
      AliasEditor.Add('DocumentsFab','MySQL',Memo1.Lines);
  • C++ Builder
    Testé avec BDE Version 3.0. Le seul problème est que lorsque le schéma de tables change, les champs de requêtes ne sont pas mis à jour. BDE, de son côté, ne semble pas reconnaître les clés primaires, et seulement l'index appelé PRIMARY, mais ce n'est jamais un problème.

  • Vision
    Vous devez sélectionner l'option Return matching rows.

  • Visual Basic
    Pour être capable de modifier une table, vous devez définir une clé primaire dans la table.
    Visual Basic avec ADO ne peut pas gérer les grands entiers. Cela signifie que certaines requêtes comme SHOW PROCESSLIST ne fonctionneront pas comme attendu. Pour pallier ce problème, il faut utiliser l'option OPTION=16384 dans la chaîne de connexion ODBC ou sélectionnez l'option Change BIGINT columns to INT dans l'écran MyODBC. Vous pouvez aussi sélectionner l'option Return matching rows.

  • VisualInterDev
    Si vous avez un BIGINT dans votre résultat, vous pouvez aussi avoir l'erreur [Microsoft][ODBC Driver Manager] Driver does not support this parameter. Essayez de sélectionner Change BIGINT columns to INT dans la configuration MyODBC.

  • Visual Objects
    Vous devriez sélectionner l'option Don't optimize column widths.

  • MS Visio Enterprise 2000
    Nous avons créé un diagramme de base de données en connectant depuis MS Vision Enterprise 2000 vers MySQL via MyODBC (2.50.37 ou plus récent) et en utilisant les fonctions de rétro-ingénierie de Visio pour lire les informations sur la base (Visio montre toutes les définitions de colonnes, les clés primaires, les index, etc.). De plus, nous avons aussi testé la conception de nouvelles tables avec Visio, et avons réussi à les exporter de MySQL via MyODBC.

25-A-10. Problèmes avec les connexions MyODBC

Cette section répond aux questions des connexions MyODBC.

25-A-10-a. Durant la configuration d'un DSN MyODBC, une erreur Could Not Load Translator or Setup Library survient

Pour plus d'informations, reportez-vous à MS KnowledgeBase Article(Q260558). De plus, assurez-vous que vous avez la dernière version ctl3d32.dll dans votre système.

25-A-10-b. Lors de la connexion, une erreur Access denied survient

25-A-10-c. Informations  à propos des pools de connexions ODBC

Lisez ce document sur les pools de connexions : http://support.microsoft.com/default.aspx?scid=kb;EN-US;q169470.

25-A-11. MyODBC et Microsoft Access

Cette section répond aux questions reliées à MyODBC et Microsoft Access.

25-A-11-a. Comment configurer Microsoft Access pour travailler avec MySQL via MyODBC ?

Les instructions suivantes doivent être faites sur votre PC, pour que Microsoft Access fonctionne avec MyODBC.

  1. Si vous utilisez Access 2000, vous devez installer la dernière version (2.6 ou plus récent) de Microsoft MDAC (Microsoft Data Access Components) depuis http://www.microsoft.com/data/. Cela va corriger un bug d'Access qui survient lors de l'export vers MySQL, si les noms de table et de colonne ne sont pas spécifiés. Un autre moyen de contourner ce bug est de passer en MyODBC 2.50.33 et MySQL 3.23.x, qui pallie ce problème.
    Il est aussi recommandé d'obtenir et appliquer le Microsoft Jet 4.0 Service Pack 5 (SP5), qui est disponible sur http://support.microsoft.com/default.aspx?scid=kb;EN-US;q239114. Cela va corriger certains cas où les colonnes sont marquées comme #DELETED# par Access.
    Note : si vous utilisez MySQL 3.22, vous devez appliquer le patch MDAC et utiliser MyODBC 2.50.32 ou 2.50.34 et plus récent pour corriger ce problème.
  2. Installez la dernière version de MySQL depuis http://dev.mysql.com/downloads/.
  3. Installez la dernière version de MyODBC 3.51 ou 2.50 depuis http://dev.mysql.com/downloads/connector/odbc/.
  4. Pour toutes les versions d'Access, il faut activer les options Return matching rows.
  5. Utilisez Access comme Access interface pour MySQL via MyODBC.

25-A-11-b. Comment exporter une table ou une requête depuis Access vers MySQL ?

Vous ne pouvez pas exporter de table ou requête vers MySQL sans avoir installé MyODBC.

Pour exporter une table depuis Access vers MySQL, suivez ces instructions :

  1. Lorsque vous ouvrez une base de données Access ou un projet Access, une fenêtre de base de données apparaît. Elle affiche les raccourcis pour créer une nouvelle base de données, ou ouvrir une base existante.
    Image non disponible
  2. Cliquez sur le nom de la table ou de la requête query que vous souhaitez exporter, puis dans le menu File, sélectionnez Export.
  3. Dans la boite de dialogue Export Object Type Object name To, dans le champ Save As Type, sélectionnez ODBC Databases () comme ci-dessous :
    Image non disponible
  4. Dans la boîte de dialogue Export, entrez le nom d'un fichier ou bien utilisez le nom suggéré, et sélectionnez OK.
  5. Le dialogue de sélection de source de données est alors affiché : il affiche les sources de données ODBC disponibles sur votre machine. Cliquez sur l'onglet File Data Source ou sur Machine Data Source, puis double-cliquez sur la source MyODBC ou MyODBC 3.51 que vous souhaitez exporter. Pour définir une nouvelle source MyODBC, voyez Section 25.1.9.2, « Configuration du DSN MyODBC sur Windows »25.1.9.2. Configuration du DSN MyODBC sur Windows.

Microsoft Access se connecte alors au serveur via ODBC et exporte les données.

25-A-11-c. Comment importer ou relier des bases de données MySQL avec Access ?

Vous ne pouvez pas exporter une table ou une requête vers un serveur MySQL sans avoir installé le pilote MyODBC.

Pour importer ou relier des tables depuis MySQL vers Access, suivez les instructions suivantes :

  1. Ouvrez la base de données, ou passez à la fenêtre de bases de données de la base courante.
  2. Pour importer des tables, dans le menu File, pointer sur Get External Data, et cliquer sur Import. Pour lier des tables, dans le menu File, pointez sur Get External Data, et cliquez sur Link Tables.
  3. Dans le dialogue Import (ou Link), dans le champ Files Of Type, sélectionnez ODBC Databases (). Le dialogue Select Data Source liste les différentes sources de données : toutes les sources de tous les pilotes de votre machine sont listées ici. Cliquez sur l'onglet File Data Source ou Machine Data Source, puis double-cliquez sur une source MyODBC ou MyODBC 3.51, que vous voulez exporter. Pour définir une nouvelle source pour MyODBC ou MyODBC 3.51, voyez Section 25.1.9.2, « Configuration du DSN MyODBC sur Windows »25.1.9.2. Configuration du DSN MyODBC sur Windows.
  4. Si la source ODBC que vous avez sélectionnée requiert une identification, saisissez votre nom d'utilisateur et votre mot de passe (ainsi que les informations complémentaires éventuelles), puis cliquez sur OK.
  5. Microsoft Access se connecte au serveur MySQL via ODBC et affiche la liste des tables que vous pouvez importer ou lier.
  6. Cliquez sur chaque table que voulez importer ou lier, puis cliquez sur OK. Si vous liez une table et qu'elle n'a pas d'index unique, alors Microsoft Access affiche une liste de champs de la table. Cliquez sur un champ ou une combinaison de champs qui identifieront sans ambiguïté une ligne, puis OK.

25-A-11-d. La structure ou la localisation d'une table liée a changé. Est-ce que je peux voir ces changements localement ?

Oui. Utilisez la procédure suivante pour voir ou rafraîchir les liens lorsque la structure ou la localisation d'une table liée a changé. Le Linked Table Manager liste les chemins de toutes les tables liées courantes.

Pour voir ou rafraîchir des liens :

  1. Ouvrez la base de données qui contient les tables liées.
  2. Dans le menu Tools, pointez sur Add-ins, et cliquez sur Linked Table Manager.
  3. Sélectionnez la boîte à cocher des tables que vous voulez rafraîchir.
  4. Cliquez sur le bouton OK.

Microsoft Access confirme les rafraîchissements réussis, ou, si une table n'a pu être trouvée, affiche le dialogue Select New Location of <table name>, dans lequel vous pouvez indiquer les nouvelles informations de la table. Si plusieurs tables ont été déplacées, le Linked Table Manager va rechercher dans ce dossier toutes les autres tables sélectionnées : il va mettre à jour plusieurs liens d'un coup.

Pour changer le chemin vers un jeu de tables liées :

  1. Ouvrez la base de données qui contient les tables liées.
  2. Dans le menu Tools, pointer sur Add-ins, et cliquez dans Linked Table Manager.
  3. Sélectionnez la boîte Always Prompt For A New Location.
  4. Sélectionnez la boîte des tables dont vous voulez modifier les liens, et cliquez dans OK.
  5. Dans le dialogue Select New Location of <table name>, spécifiez la nouvelle localisation, cliquez dans Open, puis cliquez dans OK.

25-A-11-e. Lorsque j'insère ou modifie une ligne dans des tables liées, j'obtiens #DELETED#

Si la ligne insérée ou modifiée est présentée comme #DELETED#, alors :

  • si vous utilisez Access 2000, il est recommandé d'installer la dernière version (version 2.6 ou plus récent) Microsoft MDAC (Microsoft Data Access Components) depuis http://www.microsoft.com/data/. Cela va corriger un bogue d'Access qui ne spécifie pas les noms des colonnes et des tables lors de leur exportation vers MySQL. Un autre palliatif est de passer en MyODBC 2.50.33 et MySQL 3.23.x, qui compense ce problème.
    Il est aussi recommandé d'appliquer le paquet de service Microsoft Jet 4.0 Service Pack 5 (SP5) qui est disponible sur http://support.microsoft.com/default.aspx?scid=kb;EN-US;q239114. Cela corrigera certains cas où les colonnes sont marquées comme #DELETED# dans Access.
    Note : si vous utilisez MySQL 3.22, vous devez appliquer le patch MDAC et utiliser MyODBC 2.50.32 ou 2.50.34 puis corriger ce problème ;
  • pour toutes les versions d'Access, il est recommandé d'activer l'option MyODBC Return matching rows. Pour Access 2.0, il est recommandé d'ajouter l'option Simulate ODBC 1.0 ;
  • il est recommandé d'avoir un timestamp dans toutes les tables que vous voulez pouvoir modifier. Pour une portabilité maximale, n'utilisez pas de taille de colonne dans la déclaration. C'est-à-dire, utilisez TIMESTAMP et non pas TIMESTAMP(n), n < 14 ;
  • il est recommandé d'avoir toujours une clé primaire dans une table. Sinon, les nouvelles lignes ou les lignes modifiées peuvent être indiquées comme #DELETED# ;
  • utilisez uniquement des champs décimaux DOUBLE. Access échoue à comparer des décimaux simples. Le symptôme est alors que les nouvelles lignes sont indiquées comme #DELETED# ou que vous ne pouvez pas les trouver ;
  • si vous utilisez MyODBC pour relier une table qui a une colonne BIGINT, le résultat risque d'être affiché comme #DELETED. Le palliatif est :

    • ajoutez une colonne avec le type TIMESTAMP,
    • sélectionnez l'option Change BIGINT columns to INT dans le dialogue de connexion du gestionnaire ODBC,
    • effacez le lien de table depuis Access, puis recréez-le.

    Les anciennes lignes seront affichées comme #DELETED#, mais les nouvelles lignes seront affichées correctement.

25-A-11-f. Comment puis-je éviter les conflits d'écriture ou de localisation ?

Si vous rencontrez les erreurs suivantes, sélectionnez l'option Return Matching Rows dans la configuration du DSN, ou spécifiez OPTION=2, comme paramètre de connexion :

 
Sélectionnez
Write Conflict. Another user has changed your data.

Row cannot be located for updating. Some values may have been changed
since it was last read.

25-A-11-g. Lorsque j'exporte une table depuis Access 97, une erreur de syntaxe étrange survient

C'est une erreur étrange avec Access 97, qui n'apparaît plus avec Access 2000 ou 2002. Vous pouvez contourner ce problème en mettant à jour le pilote MyODBC en version MyODBC 3.51.02 ou plus récente.

25-A-11-h. Access retourne l'erreur Another user has modified the record that you have modified durant l'édition de lignes

Avec certains programmes, cette erreur survient : Another user has modified the record that you have modified. Dans la majorité des cas, ce problème peut être résolu avec l'une des techniques suivantes :

  • ajouter une clé primaire dans la table, s'il n'y en a pas ;
  • ajouter une colonne timestamp dans la table, s'il n'y en a pas ;
  • utiliser uniquement des nombres décimaux doubles. Certains programmes échouent lors de la comparaison avec des décimaux simples.

Si ces stratégies ne vous dépannent pas, essayez de faire un log depuis le gestionnaire ODBC (c'est le log que vous obtenez lorsque vous demandez des logs depuis ODBCADMIN), et un log MyODBC vous aidera à comprendre ce qui se passe. Pour des instructions, voyez Section 25.1.9.7, « Obtenir un fichier de trace ODBC »25.1.9.7. Obtenir un fichier de trace ODBC.

25-A-11-i. Comment intercepter les messages d'erreur d'identification ODBC ?

Lisez, en anglais, « How to Trap ODBC Login Error Messages in Access » sur http://support.microsoft.com/support/kb/articles/Q124/9/01.asp?LN=EN-US&SD=gn&FR=0%3CP%3E.

25-A-11-j. Comment optimiser les performances d'accès avec MyODBC ?

25-A-11-k. J'ai de très grandes tables. Quelle est la meilleure configuration pour que MyODBC accède à ces tables ?

Si vous avez de très grandes (longues) tables dans Access, elles peuvent prendre beaucoup de temps à s'ouvrir. Ou alors, vous allez consommer beaucoup de mémoire et finir avec une erreur bloquante de type ODBC Query Failed. Pour régler ce problème, sélectionnez une des options suivantes :

  • Return Matching Rows (2) ;
  • Allow BIG Results (8).

La somme de ces deux options fait alors 10 (OPTION=10).

25-A-11-l. Comment spécifier la valeur de QueryTimeout pour les connexions ODBC ?

Lisez, en anglais, « Set the QueryTimeout Value for ODBC Connections » sur http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B153756.

25-A-11-m. INFO : outils pour exporter/importer des données entre Access et MySQL

Voyez la section converters (http://www.mysql.com/portal/software/convertors/ lien mort) pour une liste d'outils disponibles.

25-A-12. MyODBC et Microsoft VBA et ASP

Cette section répond aux questions reliées à MyODBC utilisé avec Microsoft Visual Basic (ADO, DAO & RDO) et ASP.

25-A-12-a. Pourquoi est-ce que SELECT COUNT(*) FROM tbl_name retourne une erreur ?

L'expression COUNT(*) retourne un entier de type BIGINT, et ADO ne comprend pas les nombres aussi gros. Sélectionnez l'option Change BIGINT columns to INT (Valeur 16384).

25-A-12-b. Quand j'utilise les méthodes ADO AppendChunk() ou GetChunk(), j'ai une erreur Multiple-step operation generated errors. Check each status value ?

Les méthodes GetChunk() et AppendChunk() d'ADO ne fonctionnent pas comment on l'attend lorsque la position du curseur est spécifiée avec adUseServer. D'un autre côté, vous pouvez pallier cette erreur avec adUseClient.

Un exemple simple est disponible sur http://www.dwam.net/iishelp/ado/docs/adomth02_4.htm.

25-A-12-c. Comment connaître le nombre total de lignes affectées par une requête SQL, avec ADO ?

Vous pouvez utiliser la propriété RecordsAffected de la méthode ADO execute. Pour plus d'informations sur l'utilisation de cette méthode, voyez http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthcnnexecute.asp.

25-A-12-d. Comment puis-je gérer des données BLOB avec Visual Basic ?

Voici un excellent article de Mike Hillyer (<>) qui explique comment insérer et/ou lire des données dans des colonnes de type BOLD via MyODBC depuis ADO : MySQL BLOB columns and Visual Basic 6 (http://www.dynamergy.com/mike/articles/blobaccessvb.html lien mort).

25-A-12-e. Comment associer les types de données de Visual Basic avec ceux de MySQL ?

Voici un autre article brillant de Mike Hillyer (<>) : How to map Visual basic data type to MySQL types (http://www.dynamergy.com/mike/articles/vbmysqldatatypes.php lien mort).

25-A-12-f. Exemple VB avec ADO, DAO et RDO

Des exemples simples pour utiliser ADO, DAO et RDO avec VB sont disponibles sur ces sites :

Si vous trouvez d'autres bons exemples ou des tutoriels ADO/DAO/RDO, alors laissez-nous un message sur <>.

25-A-12-g. ASP et MySQL avec MyODBC

Pour plus d'informations sur comment accéder à MySQL via ASP avec MyODBC, reportez-vous aux articles suivants :

Une liste de questions fréquentes pour ASP est disponible sur http://support.microsoft.com/default.aspx?scid=/Support/ActiveServer/faq/data/adofaq.asp.

25-A-12-h. INFO : Question fréquemment posée sur les objets ActiveX Data Objects (ADO)

Pour plus d'informations, voyez ActiveX Data Objects(ADO) Freqently Asked Questions.

25-A-13. MyODBC et les outils tierce partie

Cette section répond aux questions relatives à MyODBC en conjonction avec des outils ODBC, tels que Microsoft Word et Excel, ainsi que ColdFusion.

25-A-13-a. Comment lire les données MySQL dans un document Word ou Excel ?

Pour lire les données de MySQL vers Word/Excel, vous devez installer le pilote MyODBC et le compagnon Microsoft Query (Add-in Office).

Par exemple, créez une base de données avec une table, contenant les deux colonnes suivantes :

  • insérez des lignes avec le client mysql ;
  • créez un fichier DSN avec le gestionnaire ODBC, par exemple my, pour la base de données que vous avez créée ;
  • lancez Word ;
  • créez un nouveau document vide ;
  • dans la barre d'outils Database, pressez le bouton Insert Database ;
  • pressez le bouton Get Data ;
  • sur la gauche de l'écran de Get Data, pressez le bouton Ms Query ;
  • dans Ms Query, créez une nouvelle source de données, en utilisant le fichier my ;
  • sélectionnez une requête ;
  • sélectionnez les colonnes que vous désirez ;
  • ajoutez un filtre si vous voulez ;
  • ajoutez un tri si vous voulez ;
  • sélectionnez Return Data to Microsoft Word ;
  • cliquez sur le bouton Finish ;
  • cliquez sur le bouton Insert Data et sélectionnez les lignes ;
  • cliquez sur le bouton OK et vous pouvez voir les lignes dans votre document Word.

25-A-13-b. L'export des tables depuis MS DTS vers MySQL avec MyODBC conduit à une erreur de syntaxe

Ce problème est similaire à celui de Access 97 lorsque votre table est constituée de données de type TEXT ou VARCHAR. Vous pouvez corriger ce problème en mettant à jour votre pilote MyODBC en version 3.51.02 ou plus récent.

25-A-13-c. HOWTO : configuration de MySQL, MyODBC, unixODBC et ColdFusion sur Solaris

25-A-14. Fonctionnalités générales de MyODBC

Cette section répond aux questions reliées à MyODBC.

25-A-14-a. Comment obtenir la valeur d'une colonne AUTO_INCREMENT avec ODBC ?

Un problème récurrent est d'obtenir la dernière valeur générée automatiquement par une commande INSERT. Avec ODBC, vous pouvez procéder de cette façon (en supposons que auto est un champ AUTO_INCREMENT) :

 
Sélectionnez
INSERT INTO foo (auto,text) VALUES(NULL,'text');
SELECT LAST_INSERT_ID();

Ou, si vous voulez juste insérer cette valeur dans une autre table :

 
Sélectionnez
INSERT INTO foo (auto,text) VALUES(NULL,'text');
INSERT INTO foo2 (id,text) VALUES(LAST_INSERT_ID(),'text');

Voir Section 24.2.13.3, « Comment lire l'identifiant unique de la dernière ligne insérée »24.2.13.3. Comment lire l'identifiant unique de la dernière ligne insérée.

Pour quelques applications utilisant ODBC (du moins Delphi et Access), la requête suivante peut être utilisée pour trouver une ligne insérée dernièrement :

 
Sélectionnez
SELECT * FROM nom_de_table WHERE auto IS NULL;

25-A-14-b. Est-ce que MyODBC accepte les curseurs dynamiques ?

Oui. MyODBC 3.51 supporte les curseurs dynamiques avec les modes Forward-only et static.

À cause des problèmes de performances, le pilote ne supporte pas cette fonctionnalité par défaut. Vous pouvez l'activer en spécifiant l'option de connexion OPTION=32 ou en cliquant dans l'option Enable Dynamic Cursor dans le panneau de configuration DSN.

25-A-14-c. Quelle est la cause de l'erreur Transactions are not enabled ?

Le pilote retourne cette erreur lorsque l'application émet un appel transactionnel, mais que le serveur MySQL sous-jacent ne supporte pas les transactions.

Pour éviter ce problème, vous devez utiliser un serveur qui dispose des moteurs InnoDB ou BDB et utilise les tables de ce type. Les serveurs MySQL depuis la version 4.0 supportent InnoDB par défaut. Les serveurs MySQL-Max supportent aussi BDB sur les plateformes où BDB est disponible.

De plus, si votre serveur supporte les tables transactionnelles InnoDB ou BDB, assurez-vous que l'option disable transactions n'est pas active dans la configuration du DSN.

25-A-14-d. Quelle est la cause de l'erreur Cursor not found ?

C'est à cause d'applications qui utilisent d'anciennes versions MyODBC 2.50, et qui ne donnent pas de nom explicite aux curseurs, via SQLSetCursorName. La solution est de passer à version MyODBC 3.51.

25-A-14-e. Puis-je utiliser des applications MyODBC 2.50 avec MyODBC 3.51 ?

Oui. Si vous trouvez une erreur avec MyODBC 3.51 qui n'apparaît pas avec MyODBC 2.50, envoyez un message mail à <>.

25-A-14-f. Puis-je accéder à MySQL depuis .NET avec MyODBC ?

Oui. Vous pouvez utiliser odbc.net pour vous connecter à MySQL via MyODBC. Voici quelques exemples simples pour vous connecter à MySQL depuis VC.NET et VB.NET.

Voici un autre excellent article : « Exploring MySQL on .NET environment » by Venu (MyODBC developer) qui couvre toutes les interfaces MySQL .NET.

Attention : en utilisant ODBC.NET avec MyODBC, lorsque vous lisez des lignes vides (taille nulle), vous obtiendrez une exception SQL_NO_DATA. Vous pouvez obtenir un patch pour cela sur http://support.microsoft.com/default.aspx?scid=kb;EN-US;q319243.

25-A-14-g. Pourquoi est-ce que MyODBC s'exécute lentement et fait beaucoup d'accès disques pour de petites requêtes ?

MyODBC est bien plus rapide que n'importe quel autre pilote ODBC. Des lenteurs peuvent être causées par la mauvaise utilisation des options suivantes.

  • L'option ODBC Tracing est active. Vous pouvez vérifier si cette option est active en suivant les instructions suivantes : here.
    Image non disponible
    Comme vous pouvez le voir dans l'image ci-dessus, l'option « When to trace » du gestionnaire de sources de données ODBC, onglet 'Tracing', doit toujours pointer sur « Start Tracing Now », au lieu de « Stop Tracing Now ».
  • La version Debug version du pilote est utilisée. Si vous utilisez la version de débogage de la bibliothèque DLL, vous serez ralenti par les traitements supplémentaires. Vous pouvez vérifier que vous utilisez la version de débogage ou non en lisant la section commentaire « Comments » des propriétés de la bibliothèque DLL (dans le dossier système, faites un clic droit sur le pilote DLL et choisissez les propriétés), tel que présenté ci-dessous :
    Image non disponible
  • L'option Driver trace and query logs est activée. Même si vous envisagez d'utiliser la version de débogage du pilote (il est recommandé de toujours utiliser la version de production), assurez-vous que les traces du pilote et que les logs de requêtes (options OPTION=4,524288 respectivement) ne sont pas activés :
    Image non disponible

25-A-15. Instructions de base pour utiliser MyODBC

Travailler avec un serveur MySQL depuis une application MyODBC se fait en plusieurs étapes :

  • configuration du DSN MyODBC ;
  • connexion au serveur MySQL ;
  • initialisation des opérations ;
  • exécution des requêtes SQL ;
  • lecture des résultats ;
  • calcul des transactions ;
  • déconnexion.

La plupart des applications utilisent certaines variations de ces étapes. Les étapes de bases sont présentées dans ce diagramme :

Image non disponible

25-A-16. Table de référence MyODBC

Cette section rassemble toutes les routines ODBC, classées par catégories.

Pour la référence complète, voyez celle du programmeur ODBC sur http://msdn.microsoft.com/library/en-us/odbc/htm/odbcabout_this_manual.asp.

Une application peut appeler la fonction SQLGetInfo pour obtenir les informations de conformité MyODBC. Pour savoir si une fonction spécifique est supportée, vous pouvez appeler SQLGetFunctions.

Note : pour assurer la compatibilité ascendante, le pilote MyODBC 3.51 supporte toutes les fonctions obsolètes.

Les tables suivantes listent toutes les fonctions MyODBC, rassemblées par tâche :

Connexion à une source de données :

Nom de la fonction

MyODBC

MyODBC

Conformité

Utilisation

 

2.50

3.51

   

SQLAllocHandle

Non

Oui

ISO 92

Obtenir un pointeur d'environnement, de connexion, de commande ou de curseur.

SQLConnect

Oui

Oui

ISO 92

Se connecter à une source de données spécifique, avec un pilote donné, avec le nom de source, le mot de passe et le nom d'utilisateur.

SQLDriverConnect

Oui

Oui

ODBC

Se connecter à une source de données avec un pilote spécifique et une chaîne de connexion ou une requête du gestionnaire de pilote pour afficher un dialogue.

SQLAllocEnv

Oui

Oui

Obsolète

Obtenir un pointeur d'environnement pour un pilote.

SQLAllocConnect

Oui

Oui

Obsolète

Obtenir un pointeur de connexion.

Obtenir des informations sur les pilotes et les sources de données :

Nom de la fonction

MyODBC

MyODBC

Conformité

Utilisation

 

2.50

3.51

   

SQLDataSources

Non

Non

ISO 92

Retourne la liste des sources de données disponibles, gérées par le gestionnaire de pilotes.

SQLDrivers

Non

Non

ODBC

Retourne la liste des pilotes installés, leurs attributs et les pointeurs.

SQLGetInfo

Oui

Oui

ISO 92

Retourne les informations sur un pilote spécifique et ses sources de données.

SQLGetFunctions

Oui

Oui

ISO 92

Retourne les fonctions supportées par le pilote.

SQLGetTypeInfo

Oui

Oui

ISO 92

Retourne les informations sur les types de données supportés.

Configurer et lire des valeurs d'attributs :

Nom de la fonction

MyODBC

MyODBC

Conformité

Utilisation

 

2.50

3.51

   

SQLSetConnectAttr

Non

Oui

ISO 92

Configure un attribut de connexion.

SQLGetConnectAttr

Non

Oui

ISO 92

Retourne un attribut de connexion.

SQLSetConnectOption

Oui

Oui

Obsolète

Configure une option de connexion.

SQLGetConnectOption

Oui

Oui

Obsolète

Retourne une option de connexion.

SQLSetEnvAttr

Non

Oui

ISO 92

Configure un attribut d'environnement.

SQLGetEnvAttr

Non

Oui

ISO 92

Retourne un attribut d'environnement.

SQLSetStmtAttr

Non

Oui

ISO 92

Configure un attribut de commande.

SQLGetStmtAttr

Non

Oui

ISO 92

Retourne un attribut de commande.

SQLSetStmtOption

Oui

Oui

Obsolète

Configure une option de commande.

SQLGetStmtOption

Oui

Oui

Obsolète

Retourne une option de commande.

Préparation des commandes SQL :

Nom de la fonction

MyODBC

MyODBC

Conformité

Utilisation

 

2.50

3.51

   

SQLAllocStmt

Oui

Oui

Obsolète

Alloue un pointeur de connexion.

SQLPrepare

Oui

Oui

ISO 92

Prépare une commande SQL pour exécution ultérieure.

SQLBindParameter

Oui

Oui

ODBC

Assigne un paramètre de commande SQL.

SQLGetCursorName

Oui

Oui

ISO 92

Retourne le nom du curseur associé à une commande.

SQLSetCursorName

Oui

Oui

ISO 92

Spécifie un nom de curseur.

SQLSetScrollOptions

Oui

Oui

ODBC

Configure les options qui contrôlent un curseur.

Envoi de requête :

Nom de la fonction

MyODBC

MyODBC

Conformité

Utilisation

 

2.50

3.51

   

SQLExecute

Oui

Oui

ISO 92

Exécute une commande préparée.

SQLExecDirect

Oui

Oui

ISO 92

Exécute une commande.

SQLNativeSql

Oui

Oui

ODBC

Retourne le texte d'une commande, tel que traduit par le pilote.

SQLDescribeParam

Oui

Oui

ODBC

Retourne la description d'un paramètre spécifique d'une commande.

SQLNumParams

Oui

Oui

ISO 92

Retourne le nombre de paramètres dans une commande.

SQLParamData

Oui

Oui

ISO 92

Utilisé en conjonction avec SQLPutData pour fournir des données supplémentaires au moment de l'exécution : pratique pour les données de grande taille.

SQLPutData

Oui

Oui

ISO 92

Envoie une partie ou toute une valeur de paramètre : pratique pour les données de grande taille.

Lecture de résultats et d'informations sur les résultats :

Nom de la fonction

MyODBC

MyODBC

Conformité

Utilisation

 

2.50

3.51

   

SQLRowCount

Oui

Oui

ISO 92

Retourne le nombre de lignes affectées par une insertion, une modification ou un effacement.

SQLNumResultCols

Oui

Oui

ISO 92

Retourne le nombre de colonnes dans un résultat.

SQLDescribeCol

Oui

Oui

ISO 92

Décrit une colonne dans un résultat.

SQLColAttribute

Non

Oui

ISO 92

Décrit un attribut d'une colonne de résultat.

SQLColAttributes

Oui

Oui

Obsolète

Décrit les attributs d'une colonne dans un résultat.

SQLFetch

Oui

Oui

ISO 92

Retourne les lignes d'un résultat multiple.

SQLFetchScroll

Non

Oui

ISO 92

Retourne un résultat scrollable.

SQLExtendedFetch

Oui

Oui

Obsolète

Retourne un résultat scrollable

SQLSetPos

Oui

Oui

ODBC

Place un curseur dans un bloc lu, et laisse l'application rafraîchir les données dans le résultat, pour modifier ou effacer des lignes dans le résultat.

SQLBulkOperations

Non

Oui

ODBC

Effectue des insertions de masse et des opérations de masse, y compris les modifications, effacements et lectures par signet.

Lecture des erreurs et diagnostics :

Nom de la fonction

MyODBC

MyODBC

Conformité

Utilisation

 

2.50

3.51

   

SQLError

Oui

Oui

Obsolète

Retourne des informations supplémentaires sur une erreur ou un statut.

SQLGetDiagField

Oui

Oui

ISO 92

Retourne des informations supplémentaires sur un diagnostic (un seul champ de la structure de diagnostic).

SQLGetDiagRec

Oui

Oui

ISO 92

Retourne des informations supplémentaires sur un diagnostic (champ multiple de la structure de diagnostic).

Obtention des informations sur la source de données (catalogue de fonctions) :

Nom de la fonction

MyODBC

MyODBC

Conformité

Utilisation

 

2.50

3.51

   

SQLColumnPrivileges

Oui

Oui

ODBC

Retourne la liste des colonnes et les droits associés pour une ou plusieurs tables.

SQLColumns

Oui

Oui

X/Open

Retourne la liste des noms de colonnes pour les tables spécifiées.

SQLForeignKeys

Oui

Oui

ODBC

Retourne la liste des noms de colonnes dans une clé étrangère, s'il en existe pour les tables mentionnées.

SQLPrimaryKeys

Oui

Oui

ODBC

Retourne la liste des noms de colonnes de la clé primaire pour la table.

SQLSpecialColumns

Oui

Oui

X/Open

Retourne des informations sur le jeu de colonnes optimal qui identifie de manière unique une ligne, ou les colonnes qui sont automatiquement modifiées si une ligne est modifiée par une transaction.

SQLStatistics

Oui

Oui

ISO 92

Retourne des statistiques sur une table, et la liste des index associés.

SQLTablePrivileges

Oui

Oui

ODBC

Retourne la liste des tables et les droits associés de chaque table.

SQLTables

Oui

Oui

X/Open

Retourne la liste des noms de tables stockés dans une source de données spécifique.

Exécution des transactions :

Nom de la fonction

MyODBC

MyODBC

Conformité

Utilisation

 

2.50

3.51

   

SQLTransact

Oui

Oui

Obsolète

Archive ou annule une transaction.

SQLEndTran

Non

Oui

ISO 92

Archive ou annule une transaction.

Terminaison d'une commande :

Nom de la fonction

MyODBC

MyODBC

Conformité

Utilisation

 

2.50

3.51

   

SQLFreeStmt

Oui

Oui

ISO 92

Termine le traitement d'une commande, détruit les résultats et libère toutes les ressources.

SQLCloseCursor

Oui

Oui

ISO 92

Détruit un curseur ouvert par une commande.

SQLCancel

Oui

Oui

ISO 92

Annule une commande SQL.

Fin d'une connexion :

Nom de la fonction

MyODBC

MyODBC

Conformité

Utilisation

 

2.50

3.51

   

SQLDisconnect

Oui

Oui

ISO 92

Ferme la connexion.

SQLFreeHandle

Non

Oui

ISO 92

Libère les ressources occupées par un environnement, une connexion, une commande ou un descripteur.

SQLFreeConnect

Oui

Oui

Obsolète

Libère les ressources d'une commande.

SQLFreeEnv

Oui

Oui

Obsolète

Libère les ressources d'un environnement.

25-A-17. Les types de données MyODBC

Le tableau suivant illustre comment le pilote mappe les types de données du serveur aux types de données SQL et C par défaut :

Native Value

SQL Type

C Type

bit

SQL_BIT

SQL_C_BIT

tinyint

SQL_TINYINT

SQL_C_STINYINT

tinyint unsigned

SQL_TINYINT

SQL_C_UTINYINT

bigint

SQL_BIGINT

SQL_C_SBIGINT

bigint unsigned

SQL_BIGINT

SQL_C_UBIGINT

long varbinary

SQL_LONGVARBINARY

SQL_C_BINARY

blob

SQL_VARBINARY

SQL_C_BINARY

longblob

SQL_VARBINARY

SQL_C_BINARY

tinyblob

SQL_BINARY

SQL_C_BINARY

mediumblob

SQL_LONGVARBINARY

SQL_C_BINARY

long varchar

SQL_LONGVARCHAR

SQL_C_CHAR

text

SQL_LONGVARCHAR

SQL_C_CHAR

mediumtext

SQL_LONGVARCHAR

SQL_C_CHAR

char

SQL_CHAR

SQL_C_CHAR

numeric

SQL_NUMERIC

SQL_C_CHAR

decimal

SQL_DECIMAL

SQL_C_CHAR

integer

SQL_INTEGER

SQL_C_SLONG

integer unsigned

SQL_INTEGER

SQL_C_ULONG

int

SQL_INTEGER

SQL_C_SLONG

int unsigned

SQL_INTEGER

SQL_C_ULONG

mediumint

SQL_INTEGER

SQL_C_SLONG

mediumint unsigned

SQL_INTEGER

SQL_C_ULONG

smallint

SQL_SMALLINT

SQL_C_SSHORT

smallint unsigned

SQL_SMALLINT

SQL_C_USHORT

real

SQL_FLOAT

SQL_C_DOUBLE

double

SQL_FLOAT

SQL_C_DOUBLE

float

SQL_REAL

SQL_C_FLOAT

double precision

SQL_DOUBLE

SQL_C_DOUBLE

date

SQL_DATE

SQL_C_DATE

time

SQL_TIME

SQL_C_TIME

year

SQL_SMALLINT

SQL_C_SHORT

datetime

SQL_TIMESTAMP

SQL_C_TIMESTAMP

timestamp

SQL_TIMESTAMP

SQL_C_TIMESTAMP

text

SQL_VARCHAR

SQL_C_CHAR

varchar

SQL_VARCHAR

SQL_C_CHAR

enum

SQL_VARCHAR

SQL_C_CHAR

set

SQL_VARCHAR

SQL_C_CHAR

bit

SQL_CHAR

SQL_C_CHAR

bool

SQL_CHAR

SQL_C_CHAR

25-A-18. Codes d'erreurs MyODBC

La table suivante liste les codes d'erreurs retournés par le pilote, en plus des erreurs fournies par le serveur.

Code natif

SQLSTATE 2

SQLSTATE 3

Message d'erreur

500

01000

01000

General warning

501

01004

01004

String data, right truncated

502

01S02

01S02

Option value changed

503

01S03

01S03

No rows updated/deleted

504

01S04

01S04

More than one row updated/deleted

505

01S06

01S06

Attempt to fetch before the result set returned the first row set

506

07001

07002

SQLBindParameter not used for all parameters

507

07005

07005

Prepared statement not a cursor-specification

508

07009

07009

Invalid descriptor index

509

08002

08002

Connection name in use

510

08003

08003

Connection does not exist

511

24000

24000

Invalid cursor state

512

25000

25000

Invalid transaction state

513

25S01

25S01

Transaction state unknown

514

34000

34000

Invalid cursor name

515

S1000

HY000

General driver defined error

516

S1001

HY001

Memory allocation error

517

S1002

HY002

Invalid column number

518

S1003

HY003

Invalid application buffer type

519

S1004

HY004

Invalid SQL data type

520

S1009

HY009

Invalid use of null pointer

521

S1010

HY010

Function sequence error

522

S1011

HY011

Attribute can not be set now

523

S1012

HY012

Invalid transaction operation code

524

S1013

HY013

Memory management error

525

S1015

HY015

No cursor name available

526

S1024

HY024

Invalid attribute value

527

S1090

HY090

Invalid string or buffer length

528

S1091

HY091

Invalid descriptor field identifier

529

S1092

HY092

Invalid attribute/option identifier

530

S1093

HY093

Invalid parameter number

531

S1095

HY095

Function type out of range

532

S1106

HY106

Fetch type out of range

533

S1117

HY117

Row value out of range

534

S1109

HY109

Invalid cursor position

535

S1C00

HYC00

Optional feature not implemented

0

21S01

21S01

Column count does not match value count

0

23000

23000

Integrity constraint violation

0

42000

42000

Syntax error or access violation

0

42S02

42S02

Base table or view not found

0

42S12

42S12

Index not found

0

42S21

42S21

Column already exists

0

42S22

42S22

Column not found

0

08S01

08S01

Communication link failure

25-A-19. MyODBC avec VB : ADO, DAO et RDO

Cette section contient des exemples simples qui illustrent l'utilisation de MySQL ODBC 3.51 avec ADO, DAO et RDO.

25-A-19-a. ADO: rs.addNew, rs.delete et rs.update

L'exemple ADO (ActiveX Data Objects) suivant crée une table my_ado et montre comment utiliser rs.addNew, rs.delete, et rs.update.

 
Sélectionnez
Private Sub myodbc_ado_Click()
   
  Dim conn As ADODB.Connection
  Dim rs As ADODB.Recordset
  Dim fld As ADODB.Field
  Dim sql As String

  'connect to MySQL server using MySQL ODBC 3.51 Driver
  Set conn = New ADODB.Connection
  conn.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};"_
                        & "SERVER=localhost;"_ 
                        & " DATABASE=test;"_
                        & "UID=venu;PWD=venu; OPTION=3"

  conn.Open

  'create table
  conn.Execute "DROP TABLE IF EXISTS my_ado"
  conn.Execute "CREATE TABLE my_ado(id int not null primary key, name varchar(20)," _
                                 & "txt text, dt date, tm time, ts timestamp)"

  'direct insert
  conn.Execute "INSERT INTO my_ado(id,name,txt) values(1,100,'venu')"
  conn.Execute "INSERT INTO my_ado(id,name,txt) values(2,200,'MySQL')"
  conn.Execute "INSERT INTO my_ado(id,name,txt) values(3,300,'Delete')"

  Set rs = New ADODB.Recordset
  rs.CursorLocation = adUseServer

  'fetch the initial table ..
  rs.Open "SELECT * FROM my_ado", conn
    Debug.Print rs.RecordCount
    rs.MoveFirst
    Debug.Print String(50, "-") & "Initial my_ado Result Set " & String(50, "-")
    For Each fld In rs.Fields
      Debug.Print fld.Name,
      Next
      Debug.Print

      Do Until rs.EOF
      For Each fld In rs.Fields
      Debug.Print fld.Value,
      Next
      rs.MoveNext
      Debug.Print
    Loop
  rs.Close

  'rs insert
  rs.Open "select * from my_ado", conn, adOpenDynamic, adLockOptimistic
  rs.AddNew
  rs!Name = "Monty"
  rs!txt = "Insert row"
  rs.Update
  rs.Close

  'rs update
  rs.Open "SELECT * FROM my_ado"
  rs!Name = "update"
  rs!txt = "updated-row"
  rs.Update
  rs.Close

  'rs update second time..
  rs.Open "SELECT * FROM my_ado"
  rs!Name = "update"
  rs!txt = "updated-second-time"
  rs.Update
  rs.Close

  'rs delete
  rs.Open "SELECT * FROM my_ado"
  rs.MoveNext
  rs.MoveNext
  rs.Delete
  rs.Close

  'fetch the updated table ..
  rs.Open "SELECT * FROM my_ado", conn
    Debug.Print rs.RecordCount
    rs.MoveFirst
    Debug.Print String(50, "-") & "Updated my_ado Result Set " & String(50, "-")
    For Each fld In rs.Fields
      Debug.Print fld.Name,
      Next
      Debug.Print

      Do Until rs.EOF
      For Each fld In rs.Fields
      Debug.Print fld.Value,
      Next
      rs.MoveNext
      Debug.Print
    Loop
  rs.Close
  conn.Close
End Sub

25-A-19-b. DAO : rs.addNew, rs.update et scrolls

L'exemple DAO (Data Access Objects) suivant crée la table my_dao et montre l'utilisation de rs.addNew, rs.update et le scroll dans les résultats.

 
Sélectionnez
Private Sub myodbc_dao_Click()

  Dim ws As Workspace
  Dim conn As Connection
  Dim queryDef As queryDef
  Dim str As String

  'connect to MySQL using MySQL ODBC 3.51 Driver
  Set ws = DBEngine.CreateWorkspace("", "venu", "venu", dbUseODBC)
  str = "odbc;DRIVER={MySQL ODBC 3.51 Driver};"_
                        & "SERVER=localhost;"_ 
                        & " DATABASE=test;"_
                        & "UID=venu;PWD=venu; OPTION=3"
  Set conn = ws.OpenConnection("test", dbDriverNoPrompt, False, str)

  'Create table my_dao
  Set queryDef = conn.CreateQueryDef("", "drop table if exists my_dao")
  queryDef.Execute

  Set queryDef = conn.CreateQueryDef("", "create table my_dao(Id INT AUTO_INCREMENT PRIMARY KEY, " _
                                                           & "Ts TIMESTAMP(14) NOT NULL, Name varchar(20), Id2 INT)")
  queryDef.Execute

  'Insert new records using rs.addNew
  Set rs = conn.OpenRecordset("my_dao")
  Dim i As Integer

    For i = 10 To 15
    rs.AddNew
    rs!Name = "insert record" & i
    rs!Id2 = i
    rs.Update
    Next i
             rs.Close

  'rs update..
  Set rs = conn.OpenRecordset("my_dao")
  rs.Edit
  rs!Name = "updated-string"
  rs.Update
  rs.Close

  'fetch the table back...
  Set rs = conn.OpenRecordset("my_dao", dbOpenDynamic)
  str = "Results:"
  rs.MoveFirst
  While Not rs.EOF
  str = " " & rs!Id & " , " & rs!Name & ", " & rs!Ts & ", " & rs!Id2
  Debug.Print "DATA:" & str
  rs.MoveNext
  Wend

  'rs Scrolling
  rs.MoveFirst
  str = " FIRST ROW: " & rs!Id & " , " & rs!Name & ", " & rs!Ts & ", " & rs!Id2
  Debug.Print str

  rs.MoveLast
  str = " LAST ROW: " & rs!Id & " , " & rs!Name & ", " & rs!Ts & ", " & rs!Id2
  Debug.Print str

  rs.MovePrevious
  str = " LAST-1 ROW: " & rs!Id & " , " & rs!Name & ", " & rs!Ts & ", " & rs!Id2
  Debug.Print str

  'free all resources
  rs.Close
  queryDef.Close
  conn.Close
  ws.Close
   
End Sub

25-A-19-c. RDO : rs.addNew et rs.update

L'exemple RDO (Remote Data Objects) crée une table my_rdo et illustre l'utilisation de rs.addNew et rs.update.

 
Sélectionnez
Dim rs As rdoResultset
    Dim cn As New rdoConnection
    Dim cl As rdoColumn
    Dim SQL As String

    'cn.Connect = "DSN=test;"
    cn.Connect = "DRIVER={MySQL ODBC 3.51 Driver};"_
                        & "SERVER=localhost;"_ 
                        & " DATABASE=test;"_
                        & "UID=venu;PWD=venu; OPTION=3"

    cn.CursorDriver = rdUseOdbc
    cn.EstablishConnection rdDriverPrompt


    'drop table my_rdo
    SQL = "drop table if exists my_rdo"
    cn.Execute SQL, rdExecDirect

    'create table my_rdo
    SQL = "create table my_rdo(id int, name varchar(20))"
    cn.Execute SQL, rdExecDirect

    'insert - direct
    SQL = "insert into my_rdo values (100,'venu')"
    cn.Execute SQL, rdExecDirect

    SQL = "insert into my_rdo values (200,'MySQL')"
    cn.Execute SQL, rdExecDirect

    'rs insert
    SQL = "select * from my_rdo"
    Set rs = cn.OpenResultset(SQL, rdOpenStatic, rdConcurRowVer, rdExecDirect)
    rs.AddNew
    rs!id = 300
    rs!Name = "Insert1"
    rs.Update
    rs.Close

    'rs insert
    SQL = "select * from my_rdo"
    Set rs = cn.OpenResultset(SQL, rdOpenStatic, rdConcurRowVer, rdExecDirect)
    rs.AddNew
    rs!id = 400
    rs!Name = "Insert 2"
    rs.Update
    rs.Close

    'rs update
    SQL = "select * from my_rdo"
    Set rs = cn.OpenResultset(SQL, rdOpenStatic, rdConcurRowVer, rdExecDirect)
    rs.Edit
    rs!id = 999
    rs!Name = "updated"
    rs.Update
    rs.Close 

    'fetch back...
    SQL = "select * from my_rdo"
    Set rs = cn.OpenResultset(SQL, rdOpenStatic, rdConcurRowVer, rdExecDirect)
    Do Until rs.EOF
    For Each cl In rs.rdoColumns
                Debug.Print cl.Value,
      Next
      rs.MoveNext
      Debug.Print
               Loop
    Debug.Print "Row count="; rs.RowCount

    'close
    rs.Close
    cn.Close
   
End Sub

25-A-20. MyODBC avec Microsoft .NET

Cette section contient des exemples simples qui illustrent l'utilisation de MyODBC avec ODBC.NET.

25-A-20-a. ODBC.NET : CSHARP(C#)

L'exemple suivant crée une table my_odbc_net et illustre l'utilisation de C#.

 
Sélectionnez
/**
 * @sample    : mycon.cs
 * @purpose   : Demo sample for ODBC.NET using MyODBC
 * @author    : Venu, <venu@mysql.com>
 *
 * (C) Copyright MySQL AB, 1995-2004
 *
 **/

 /* build command
  * 
  *  csc /t:exe 
  *      /out:mycon.exe mycon.cs 
  *      /r:Microsoft.Data.Odbc.dll 
  */ 

 using Console = System.Console;
 using Microsoft.Data.Odbc;

 namespace myodbc3
 {
  class mycon
  {
    static void Main(string[] args)
    {
      try
      { 
        //Connection string for MyODBC 2.50
        /*string MyConString = "DRIVER={MySQL};" + 
                             "SERVER=localhost;" +
                             "DATABASE=test;" +
                             "UID=venu;" +
                             "PASSWORD=venu;" +
                             "OPTION=3";
        */
        //Connection string for MyODBC 3.51
        string MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" + 
                             "SERVER=localhost;" +
                             "DATABASE=test;" +
                             "UID=venu;" +
                             "PASSWORD=venu;" +
                             "OPTION=3";
                    
        //Connect to MySQL using MyODBC
        OdbcConnection MyConnection = new OdbcConnection(MyConString);    
        MyConnection.Open();
  
        Console.WriteLine("\n !!! success, connected successfully !!!\n");    

        //Display connection information
        Console.WriteLine("Connection Information:");   
        Console.WriteLine("\tConnection String:" + MyConnection.ConnectionString);    
        Console.WriteLine("\tConnection Timeout:" + MyConnection.ConnectionTimeout);    
        Console.WriteLine("\tDatabase:" + MyConnection.Database);   
        Console.WriteLine("\tDataSource:" + MyConnection.DataSource);
        Console.WriteLine("\tDriver:" + MyConnection.Driver);
        Console.WriteLine("\tServerVersion:" + MyConnection.ServerVersion);

        //Create a sample table
        OdbcCommand MyCommand = new OdbcCommand("DROP TABLE IF EXISTS my_odbc_net",MyConnection);
        MyCommand.ExecuteNonQuery();
        MyCommand.CommandText = "CREATE TABLE my_odbc_net(id int, name varchar(20), idb bigint)";
        MyCommand.ExecuteNonQuery();

        //Insert
        MyCommand.CommandText = "INSERT INTO my_odbc_net VALUES(10,'venu', 300)";        
        Console.WriteLine("INSERT, Total rows affected:" + MyCommand.ExecuteNonQuery());;

        //Insert
        MyCommand.CommandText = "INSERT INTO my_odbc_net VALUES(20,'mysql',400)";        
        Console.WriteLine("INSERT, Total rows affected:" + MyCommand.ExecuteNonQuery());

        //Insert
        MyCommand.CommandText = "INSERT INTO my_odbc_net VALUES(20,'mysql',500)";        
        Console.WriteLine("INSERT, Total rows affected:" + MyCommand.ExecuteNonQuery());

        //Update
        MyCommand.CommandText = "UPDATE my_odbc_net SET id=999 WHERE id=20";        
        Console.WriteLine("Update, Total rows affected:" + MyCommand.ExecuteNonQuery());

        //COUNT(*)        
        MyCommand.CommandText = "SELECT COUNT(*) as TRows FROM my_odbc_net";        
        Console.WriteLine("Total Rows:" + MyCommand.ExecuteScalar());

        //Fetch
        MyCommand.CommandText = "SELECT * FROM my_odbc_net";                
        OdbcDataReader MyDataReader;
        MyDataReader =  MyCommand.ExecuteReader();
        while (MyDataReader.Read())
        {
         if(string.Compare(MyConnection.Driver,"myodbc3.dll") == 0) {
           Console.WriteLine("Data:" + MyDataReader.GetInt32(0) + " " +
                                       MyDataReader.GetString(1) + " " +
                                       MyDataReader.GetInt64(2)); //Supported only by MyODBC 3.51
         }
         else {            
           Console.WriteLine("Data:" + MyDataReader.GetInt32(0) + " " +
                                       MyDataReader.GetString(1) + " " +                                         
                                       MyDataReader.GetInt32(2)); //BIGINTs not supported by MyODBC
         }
        }

        //Close all resources
        MyDataReader.Close();
        MyConnection.Close();
      }
      catch (OdbcException MyOdbcException)//Catch any ODBC exception ..
      {
        for (int i=0; i < MyOdbcException.Errors.Count; i++)
        {
          Console.Write("ERROR #" + i + "\n" +
            "Message: " + MyOdbcException.Errors[i].Message + "\n" +
            "Native: " + MyOdbcException.Errors[i].NativeError.ToString() + "\n" +
            "Source: " + MyOdbcException.Errors[i].Source + "\n" +
            "SQL: " + MyOdbcException.Errors[i].SQLState + "\n");
        }
      }
    }
  }
 }

25-A-20-b. ODBC.NET: VB

L'exemple suivant crée une table my_vb_net et illustre l'utilisation de VB.

 
Sélectionnez
' @sample    : myvb.vb
' @purpose   : Demo sample for ODBC.NET using MyODBC
' @author    : Venu, <venu@mysql.com>
'
' (C) Copyright MySQL AB, 1995-2004
'
'

' 
' build command
'
' vbc /target:exe 
'     /out:myvb.exe 
'     /r:Microsoft.Data.Odbc.dll 
'     /r:System.dll 
'     /r:System.Data.dll 
'
 
Imports Microsoft.Data.Odbc
Imports System

Module myvb
    Sub Main()
        Try

            'MyODBC 3.51 connection string
            Dim MyConString As String = "DRIVER={MySQL ODBC 3.51 Driver};" & _
                           "SERVER=localhost;" & _
                           "DATABASE=test;" & _
                           "UID=venu;" & _
                           "PASSWORD=venu;" & _
                           "OPTION=3;"

            'Connection
            Dim MyConnection As New OdbcConnection(MyConString)
            MyConnection.Open()

            Console.WriteLine ("Connection State::" & MyConnection.State.ToString)
            
            'Drop
            Console.WriteLine ("Dropping table")
            Dim MyCommand As New OdbcCommand()
            MyCommand.Connection = MyConnection
            MyCommand.CommandText = "DROP TABLE IF EXISTS my_vb_net"
            MyCommand.ExecuteNonQuery()
            
            'Create
            Console.WriteLine ("Creating....")
            MyCommand.CommandText = "CREATE TABLE my_vb_net(id int, name varchar(30))"
            MyCommand.ExecuteNonQuery()
            
            'Insert
            MyCommand.CommandText = "INSERT INTO my_vb_net VALUES(10,'venu')"    
            Console.WriteLine("INSERT, Total rows affected:" & MyCommand.ExecuteNonQuery())

            'Insert
            MyCommand.CommandText = "INSERT INTO my_vb_net VALUES(20,'mysql')"
            Console.WriteLine("INSERT, Total rows affected:" & MyCommand.ExecuteNonQuery())

            'Insert
            MyCommand.CommandText = "INSERT INTO my_vb_net VALUES(20,'mysql')"
            Console.WriteLine("INSERT, Total rows affected:" & MyCommand.ExecuteNonQuery())

            'Insert
            MyCommand.CommandText = "INSERT INTO my_vb_net(id) VALUES(30)"
            Console.WriteLine("INSERT, Total rows affected:" & MyCommand.ExecuteNonQuery())

            'Update
            MyCommand.CommandText = "UPDATE my_vb_net SET id=999 WHERE id=20"
            Console.WriteLine("Update, Total rows affected:" & MyCommand.ExecuteNonQuery())

            'COUNT(*)        
            MyCommand.CommandText = "SELECT COUNT(*) as TRows FROM my_vb_net"
            Console.WriteLine("Total Rows:" & MyCommand.ExecuteScalar())

            'Select              
            Console.WriteLine ("Select * FROM my_vb_net")
            MyCommand.CommandText = "SELECT * FROM my_vb_net"
            Dim MyDataReader As OdbcDataReader
            MyDataReader = MyCommand.ExecuteReader
            While MyDataReader.Read
                If MyDataReader("name") Is DBNull.Value Then
                    Console.WriteLine ("id = " & CStr(MyDataReader("id")) & "  name = " & _
                      "NULL")
                Else
                    Console.WriteLine ("id = " & CStr(MyDataReader("id")) & "  name = " & _
                                          CStr(MyDataReader("name")))
                End If
            End While
        
        'Catch ODBC Exception
        Catch MyOdbcException As OdbcException 
            Dim i As Integer
            Console.WriteLine (MyOdbcException.ToString)

        'Catch program exception
        Catch MyException As Exception
            Console.WriteLine (MyException.ToString)
    End Try
    End Sub
End Module

25-A-21. Crédits

Voici la liste des développeurs qui ont travaillé sur les pilotes MyODBC et MyODBC 3.51 de MySQL AB.

  • Micheal (Monty) Widenius.
  • Venu Anuganti.
  • Peter Harvey.

25-B. MySQL et Java (JDBC)

Il y a deux pilotes JDBC supportés pour MySQL :

  • MySQL Connector/J de MySQL AB, implémenté 100 % Java natif. Ce produit était connu sous le nom de pilote mm.mysql. Vous pouvez télécharger MySQL Connector/J depuis l'URL http://www.mysql.com/products/connector-j/ ;
  • le pilote Resin JDBC, qui est disponible sur l'URL http://www.caucho.com/projects/jdbc-mysql/index.xtp.

Pour de la documentation, consultez celle de JDBC et des pilotes pour les fonctionnalités relatives à MySQL.

La documentation de MySQL Connector/J est disponible en ligne, sur le site de MySQL AB à http://dev.mysql.com/doc/.


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+