Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
FORUMS C FAQs C TUTORIELS C LIVRES C COMPILATEURS C SOURCES GTK+

Utilisation de l'API mySQL avec Borland C++ Builder

08/11/2002

Par LFE (autres articles)
 

Ce document a pour but de montrer comment exploiter une connection à une base de données mySQL, en utilisant uniquement l'API fournie avec mySQL


Avant-Propos
1. Préparer le projet
1.1. Création d'un nouveau projet
1.2. Création de la libraire d'importation
1.3. Mise à jour des fichiers d'en-tête
1.4. Mise à jour du projet
2. Initialiser la connection à mySQL
3. Fermer la connection
4. Se connecter à la base de données
5. Lister les tables de la base de données
6. Accéder aux données de la table
7. Lister la structure d'une table
8. Gestion des erreurs
8.1. Obtenir le code d'erreur
8.2. Obtenir un message décrivant l'erreur
9. Utiliser la version embedded du serveur mySQL
9.1. Modification du fichier de configuration de mySQL
9.2. Modification du projet
9.3. Démarrage du serveur
9.4. Arrêt du serveur


Avant-Propos


Ce document a pour but de montrer comment exploiter une connection à une base de données mySQL, en utilisant uniquement l'API fournie avec mySQL.
Le code a été écrit et testé avec Borland C++ Builder 6.0 Enterprise anglais et mySQL version 4.0.4 beta.

Pour une description des fonctions de l'API, je vous renvoie a la documentaiton fournie avec mySQL sur http://www.mySQL.com


1. Préparer le projet



1.1. Création d'un nouveau projet


La première chose est de créer un nouveau projet et de l'enregistrer dans un répértoire.
Il faut ensuite recopier la DLL libmySQL.dll dans ce répertoire.
Ensuite, il faut encore recopier le contenu du répértoire <mySQLHome>\Include


1.2. Création de la libraire d'importation


Il faut ensuite créer la librairie libmySQL.lib par la commande suivante, exécutée dans une console : implib libmySQL.lib libmySQL.dll
La libraire ainsi créée doit être ajoutée au projet


1.3. Mise à jour des fichiers d'en-tête


Dans le fichier d'en-tête mySQL.h, j'ai du effectuer la modification suivante au niveau de la ligne 34:

#ifdef __LCC__ #include <winsock.h> /* For windows */ #endif
devient

#if ( defined(__LCC__) || defined(__WIN__) ) #include <winsock.h> /* For windows */ #endif

1.4. Mise à jour du projet


Dans les unités utilisant les fonctions de l'API mySQL, Ajouter les 2 lignes de code suivantes :

#define __WIN__ #include "mysql.h"
Le projet est maintenant prêt.


2. Initialiser la connection à mySQL


Avant tout chose il est nécessaire d'initialiser l'accès à la DLL.

MYSQL *mySQL; mySQL = mysql_init(NULL);
Au retour, mySQL contient l'adresse de la structure permettant l'intefacage avec mySQL, ou NULL en cas d'erreur.
Il est tout à fait possible d'avoir plusieurs connections dans le même programme.


3. Fermer la connection


MYSQL *mySQL; mysql_close(mySQL);
mysql_close ferme la connection à la base de données et libère les ressources allouées lors de la création de la connection.


4. Se connecter à la base de données


MYSQL *mySQL; if (!mysql_real_connect(mySQL, "127.0.0.1", "root", "root", "test", 0, NULL, 0)) { // la connection a échoué } else { // la connection a réussi }
mysql_real_connect ouvre la connection à la base données, et met à jour la structure mySQL en fonction de cette connection.
Les paramètres sont

  • Le handle de Connection
  • l'adresse du serveur où mySQL est installé
  • le nom d'utilsiateur
  • le mot de passe
  • le nom de la base de données
  • le n° de port (0 indique que l'on utilise le port par défaut)
  • le nom du pipe ou le socket qui sera utilisé (habituellement NULL)
  • des status permettant de configurer la connection (habituellement 0)

Une valeur de retour de 0 indique qu'une erreur s'est produite.
Une valeur autre indique que la conenction est ouverte


5. Lister les tables de la base de données


MYSQL *mySQL; MYSQL_ROW myROW; MYSQL_RES *myRES; AnsiString aStr; myRES = mysql_list_tables(mySQL, NULL); if (myRES) { for(unsigned int i = 0; i < myRES->row_count; i++) { myROW = mysql_fetch_row(myRES); for(unsigned int j = 0; j < mysql_num_fields(myRES); j++) { aStr.sprintf("%s", myROW[j]); ListBox1->Items->Add(aStr); } } mysql_free_result(myRES); }
mysql_list_tables permet de lire le noms de toutes les tables de la base de données associée à mySQL.
Ses paramètres sont :

  • le handle de connection
  • un masque permettant de filtrer les noms de tables à lire

La valeur de retour est une structre de type MYSQL_RES qui est un handle vers le résultat de la requête. Si la requête échoue, la valeur de retour est NULL.

La propriété row_count de myRES contient le nombre d'enregistrements contenus dans le résultat.

mysql_fetch_row renvoie l'enregistrement suivant du résultat de la requête, dans une structure de type MYSQL_ROW.

La fonction mysql_num_fields permet quant à elle de connaître le nombre de champs renvoyés par la requête.

Une fois que l'on n'a plus beosin du résultat de la requête, il ne faut pas oublier de libérer les ressources en appelant la fonction mysql_free_results.


6. Accéder aux données de la table


MYSQL *mySQL; MYSQL_RES *myRES; MYSQL_ROW myROW; AnsiString aStr; if (!mysql_query(mySQL, "select * from testbcb")) { myRES = mysql_store_result(mySQL); if (myRES) { for(unsigned int i = 0; i < myRES->row_count; i++) { myROW = mysql_fetch_row(myRES); for(unsigned int j = 0; j < mysql_num_fields(myRES); j++) { aStr = myROW[j]; ListBox1->Items->Add(aStr); } } mysql_free_result(myRES); } }
La fonction mysql_query éxécute une requête.
Une valeur de retour à 0 indique que la requête a abouti. une valeur autre indique une erreur.

Pour accéder au résultat de la requête, il est nécessaire d'appeler la fonction mysql_store_results qui renvoie un pointeur de type MYSQL_RES.

mysql_fetch_row renvoie l'enregistrement suivant du résultat de la requête, dans une structure de type MYSQL_ROW


7. Lister la structure d'une table


MYSQL *mySQL; MYSQL_RES *myRES; MYSQL_FIELD *myFields; AnsiString aStr; int CountFields; if (!mysql_query(mySQL, "select * from testbcb")) { myRES = mysql_store_result(mySQL); if (myRES) { CountFields = mysql_num_fields(myRES); myFields = mysql_fetch_fields(myRES); for(unsigned int i = 0; i < CountFields; i++) { aStr.sprintf("Field %s is type %d",myFields[i].name, myFields[i].type); ListBox1->Items->Add(aStr); } } mysql_free_result(myRES); }
La fonction mysql_fetch_fields remplit une structure de type MYSQL_FIELDS qui contient alors un tableau contenant toutes les informations des champs renvoyés par la requête.


8. Gestion des erreurs



8.1. Obtenir le code d'erreur


unsigned int myErrorCode; myErrorCode = mysql_errno(mySQL);
mySQL_errno renvoie un n° d'erreur indiquant l'erreur survenue lors du dernier appel à l'API, pour la connection mySQL donnée.
Une valeur de 0 indique qu'il n'y a pas eu d'erreur.


8.2. Obtenir un message décrivant l'erreur


AnsiString myErrorMsg; myErrorMsg = mysql_error(mySQL);
mySQL_error renvoie un message décrivant l'erreur survenue lors du dernier appel à l'API, pour la connection mySQL donnée.
Une message vide indique qu'il n'y a pas eu d'erreur.


9. Utiliser la version embedded du serveur mySQL


Dans la version 4, il y a la possibilité d'embarquer le serveur mySQL dans l'application. L'utilisation de cette version implique quelques modifications au projet et au fichier de configuration de mySQL.


9.1. Modification du fichier de configuration de mySQL


Dans le fichier de configuration de mySQL, il faut ajouter au minimum:

[embedded] basedir=e:/mysql datadir=e:/mysql/data
Il s'agit en fait de la configuration du serveur, mais dans sa version embarquée.


9.2. Modification du projet


Lors de la création du projet, il faut remplacer la DLL libmySQL.dll par la DLL libmySQLD.dll et ce, à toutes les étapes de la création du projet.


9.3. Démarrage du serveur


if (!mysql_server_init(0, NULL, NULL) { // le serveur est démarré } else { // le serveur n'est pas démarré }
La fonction mysql_server_init permet de démarrer la version embarquée de mySQL.

Les paramètres sont ceux de la ligne de commande éventuelle.

Une valeur de retour à 0 indique que le démarrage s'est bien déroulé. Une valeur autre indique une erreur.


9.4. Arrêt du serveur


mysql_server_end();
La fonction mysql_server_end arrête le serveur embarqué.


Voir également mes autres articles :
Piloter Word sous C++ Builder et Delphi
Piloter Excel sous C++ Builder et Delphi
Utiliser l'API mySQL sous C++ Builder et Delphi
Utiliser un WebService sous C++ Builder et Delphi
Utiliser FMOD sous C++ Builder
Créer et utiliser une DLL sous C++ Builder
Signer des données avec C++ Builder
Comment déployer une application SWT via WebStart
Créer et déployer un premier servlet avec TomCat
Sans oublier :
la FAQ C++ Builder par Geronimo
la FAQ C
la FAQ C++


Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur.
La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.

Responsable bénévole de la rubrique C : Arnaud Feltz (buchs) - Contacter par EMail :
Vos questions techniques : forum d'entraide C - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.