Forum Clubic

Mysql dans la console de commandes Windows en c++

Bonjour,

mon objectif est d’exécuter des requêtes à partir d’un fichier en c++ dans la console d’exécution sous Windows.

Le problème est que lorsque je fais dans mon main() les commandes :
system(“cd …/; dir;”);
par exemple, ça marche bien.

Mais une fois que j’ai tapé la commande
system(“mysql --user=”…" --password="…");
je me connecte bien à mysql, mais je ne peux plus ecrire dans la console pour exécuter les requêtes de la même façon:
system(“show databases;”); //ne fonctionne pas et system(“mysql> show databases;”); non plus, et printf(“mysql> show databases;”); aussi.

Quelqu’un aurait-il une solution à ce problème ? Dois-je programmer dans un autre langage que c++ ?

Merci d’avance.

Pour chaque appel à system c’est un peu comme si tu ouvrais une nouvelle invite de commande (une pour “cd”, une nouvelle pour “mysql”, une autre pour “show”, etc.)
Pour ton problème je pense que tu peux regarder du côté des flux ou bien directement d’une librairie (My)SQL C++.

Heu pourquoi te faire chier à passer par la commande system(), alors que tu as la librairie mysql (genre libmysql.dll) fournie avec, ainsi que l’entête qui va bien, et qui permet normalement de faire tout ce que fait mysql, mais sans passer par mysql?

Tu y gagnerais en temps, et en plus c’est assez proche de mysql en php (si tu en as fait).

Et pour résoudre ton problème, en continuant avec system, ce n’est pas comme ça que tu dois t’y prendre.

  1. Soit tu crées un fichier texte, genre toto.txt, qui contient tes instructions SQL, et que tu passe à mysql (mysql … < toto.txt) : sympa, mais si on touche au fichier, ton programme déconnera.
  2. Soit tu passes par la solution fork() + exec() + pipe() qui fonctionne un peu pareil que system(), sauf que c’est à toi de mapper ta sortie standard (ou autre) sur l’entrée standard de mysql.

Perso, je ferais la solution 0 : utiliser libmysql.dll :wink:

[edit] sans compter la doc, etc:

dev.mysql.com…

Tu as normalement tout ce qui faut dedans pour analyser la base :wink:
Edité le 29/04/2009 à 10:17

comment dois-je utiliser cette librairie? j’ai mysql qui tourne en local mais je vois pas trop comment je peux inclure un .dll dans un fichier en c++ . Y a-t-il des sites qui proposent qui proposent des exemples ?

En fait, tu vas faire un #include <mysql.h>, et dans ta commande de compilation tu feras :

“-IC:\program\server\MySQL\MySQL Server 5.1\include”

(à remplacer bien sûr parce qui est en vigueur sur ton poste).

Ensuite, tu as les librairies dans C:\program\server\MySQL\MySQL Server 5.1\lib

Y a plus qu’à compiler et préciser ça lors de l’édition de liens. Je te laisse consulter google, car je ne l’ai pas fait depuis 2 ans :slight_smile:

Néanmoins, si tu as un compilateur genre Visual C++ ça devrait être plus simple.
Edité le 30/04/2009 à 00:49