Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1132 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Problème du connexion à BD Mysql dans un programme C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème du connexion à BD Mysql dans un programme C

n°1905066
dimadima
Posté le 14-07-2009 à 12:31:39  profilanswer
 

Salut,  
 
- J'ai décidé de travailler avec easyphp puisque plus facile à créer des bases des données par rapport au Mysql server via lignes des commandes.
je ne sais pas c'est ceci est bon ou non ?
 
- Je ne sais pas pourquoi  je trouve seulement le dossier bin sous  
C:\Program Files\EasyPHP1-7\mysql
 
Je voudrais connecter à une base de données Mysql via ODBC à partir d'un programme C sous Visual Studio 2008 Windows.
J'ai Mysql version 4.0.15 (esayphp 1.7)
et mysql-connector-odbc-3.51.19-win32
 
je trouve seulement le dossier bin sous :C:\Program Files\EasyPHP1-7\mysql
J'ai copié ma base des données sous: C:\Program Files\EasyPHP1-7\mysql\data
 
j'ai testé la source de données (ODBC) qui j'ai ajouté  avec la base de données. Ceci se passe bien.
 
le nom de DSN est : toto
le serveur: localhost
le nom d'utilisateur : root
le mot de passe est vide
 
 
 
Mysql est bien démarré. J'ai testé la connexion entre le driver ODBC et ma base des données  alors ceci se passe bien.
 
J'ai testé le code suivant pour vérifier la connexion au base des données. Le serveur est déjà démarré. La compilation se passe bien.
 Après l'exécution, j'ai l'affichage suivant:
 
retcode= -1  
Erreur sur l'instruction SQLConnect

le code est :

Code :
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include<stdlib.h>
  5. #include<string.h>
  6. #include <sql.h>
  7. #include <sqlext.h>
  8. #include <sqltypes.h>
  9. #include <sqlucode.h>
  10. #include <odbcinst.h>
  11. #include <Msdasql.h>
  12. #include <Msdadc.h>
  13. void main()
  14. {
  15. SQLRETURN retcode;
  16. //char design[20];
  17. //int A,B,C,D;
  18. //char request[100];
  19. //char dsn[20]="toto";
  20. //char uid[20]="root";
  21. //char pwd[20]="";
  22. SQLINTEGER lon,la,lb,lc,ld,taille=SQL_NTS;
  23. SQLCHAR design[20];
  24. SQLHDBC hdbc;
  25. SQLHENV henv;
  26. SQLHSTMT hstmt;
  27. /*Allocate environment handle */
  28. retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
  29. if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) //{
  30.    /* Set the ODBC version environment attribute */
  31.    retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
  32.    if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) //{
  33.       /* Allocate connection handle */
  34.       retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
  35.      // if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  36.     //printf("%s","vrai" );
  37.     //else
  38.         //printf("erreur\n" );
  39. //   }
  40.  
  41. //}
  42.            
  43.           // retcode = SQLConnect(hdbc,(SQLCHAR*)dsn, SQL_NTS,(SQLCHAR*)uid, SQL_NTS,(SQLCHAR*)pwd, SQL_NTS);
  44.     retcode=SQLConnect(hdbc,(SQLCHAR *)"toto",SQL_NTS,(SQLCHAR *)"root",SQL_NTS,(SQLCHAR *)"",SQL_NTS);
  45.     printf("%d",retcode);
  46. if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  47. printf("\n%s","vrai" );
  48. else
  49. printf("Erreur sur l'instruction SQLConnect !\\n" );
  50. }


Je dois travailler dans cet environnement: Windows, Visual Studio, C, Mysql et ODBC.
 
Je serais très content pour vos aides
 
Merci.
 

mood
Publicité
Posté le 14-07-2009 à 12:31:39  profilanswer
 

n°1905652
Sve@r
Posté le 16-07-2009 à 08:08:08  profilanswer
 

dimadima a écrit :

Salut,  
 
- J'ai décidé de travailler avec easyphp puisque plus facile à créer des bases des données par rapport au Mysql server via lignes des commandes.
je ne sais pas c'est ceci est bon ou non ?
 
- Je ne sais pas pourquoi  je trouve seulement le dossier bin sous  
C:\Program Files\EasyPHP1-7\mysql
 
Je voudrais connecter à une base de données Mysql via ODBC à partir d'un programme C sous Visual Studio 2008 Windows.
J'ai Mysql version 4.0.15 (esayphp 1.7)
et mysql-connector-odbc-3.51.19-win32
 
je trouve seulement le dossier bin sous :C:\Program Files\EasyPHP1-7\mysql
J'ai copié ma base des données sous: C:\Program Files\EasyPHP1-7\mysql\data
 
j'ai testé la source de données (ODBC) qui j'ai ajouté  avec la base de données. Ceci se passe bien.
 
le nom de DSN est : toto
le serveur: localhost
le nom d'utilisateur : root
le mot de passe est vide
 
 
 
Mysql est bien démarré. J'ai testé la connexion entre le driver ODBC et ma base des données  alors ceci se passe bien.
 
J'ai testé le code suivant pour vérifier la connexion au base des données. Le serveur est déjà démarré. La compilation se passe bien.
 Après l'exécution, j'ai l'affichage suivant:
 
retcode= -1  
Erreur sur l'instruction SQLConnect

le code est :

Code :
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include<stdlib.h>
  5. #include<string.h>
  6. #include <sql.h>
  7. #include <sqlext.h>
  8. #include <sqltypes.h>
  9. #include <sqlucode.h>
  10. #include <odbcinst.h>
  11. #include <Msdasql.h>
  12. #include <Msdadc.h>
  13. void main()
  14. {
  15. SQLRETURN retcode;
  16. //char design[20];
  17. //int A,B,C,D;
  18. //char request[100];
  19. //char dsn[20]="toto";
  20. //char uid[20]="root";
  21. //char pwd[20]="";
  22. SQLINTEGER lon,la,lb,lc,ld,taille=SQL_NTS;
  23. SQLCHAR design[20];
  24. SQLHDBC hdbc;
  25. SQLHENV henv;
  26. SQLHSTMT hstmt;
  27. /*Allocate environment handle */
  28. retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
  29. if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) //{
  30.    /* Set the ODBC version environment attribute */
  31.    retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
  32.    if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) //{
  33.       /* Allocate connection handle */
  34.       retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
  35.      // if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  36.     //printf("%s","vrai" );
  37.     //else
  38.         //printf("erreur\n" );
  39. //   }
  40.  
  41. //}
  42.            
  43.           // retcode = SQLConnect(hdbc,(SQLCHAR*)dsn, SQL_NTS,(SQLCHAR*)uid, SQL_NTS,(SQLCHAR*)pwd, SQL_NTS);
  44.     retcode=SQLConnect(hdbc,(SQLCHAR *)"toto",SQL_NTS,(SQLCHAR *)"root",SQL_NTS,(SQLCHAR *)"",SQL_NTS);
  45.     printf("%d",retcode);
  46. if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  47. printf("\n%s","vrai" );
  48. else
  49. printf("Erreur sur l'instruction SQLConnect !\\n" );
  50. }


Je dois travailler dans cet environnement: Windows, Visual Studio, C, Mysql et ODBC.
 
Je serais très content pour vos aides
 
Merci.
 


 
Pourquoi t'as mis en commentaire les printf issus de SQLAllocHandle ??? Ils permettent de vérifier que l'allocation a bien réussie.
Il n'y a pas un endroit où on défini le serveur sur lequel se connecter ???
Tu pourrais afficher aussi strerror(errno) histoire de voir le message système. De toute façon, il manque forcément un paramètre si t'arrives à te connecter à la main. Par exemple tu pourrais essayer de configurer un mot de passe pour root et mettre ce mot de passe dans SQLConnect. Hier j'arrivais pas à me connecter sur une base Postgres via phpPgAdmin parce que mes users n'avaient pas de mot de passe et que phpPgAdmin demande un mot de passe impératif. Ca peut être pareil ici...
 
PS: Ce n'est pas la peine de changer de pseudo pour poster un nouveau sujet. T'aurais pu continuer sur le précédent... http://forum.hardware.fr/hfr/Progr [...] 4258_1.htm


Message édité par Sve@r le 16-07-2009 à 08:10:41

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1905779
dimadima
Posté le 16-07-2009 à 13:18:22  profilanswer
 

Salut,
Voici mon code:

Code :
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <sql.h>
  4. #include <sqlext.h>
  5. void sql_perror(SQLSMALLINT HandleType, SQLHANDLE Handle, const char * title);
  6. int main()
  7. {
  8.     SQLHENV env;
  9.    
  10.     if ( !SQL_SUCCEEDED(SQLAllocHandle(SQL_HANDLE_ENV, NULL, &env)) )
  11.         fprintf(stderr, "SQLAllocHandle (SQL_HANDLE_ENV) : la fonction a echoue.\n" );
  12.     else
  13.     {
  14.         if ( !SQL_SUCCEEDED(SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0)) )
  15.             sql_perror(SQL_HANDLE_ENV, env, "SQLSetEnvAttr" );
  16.         else
  17.         {
  18.             SQLHDBC con;
  19.            
  20.             if ( !SQL_SUCCEEDED(SQLAllocHandle(SQL_HANDLE_DBC, env, &con)) )
  21.                sql_perror(SQL_HANDLE_ENV, env, "SQLAllocHandle (SQL_HANDLE_DBC)" );
  22.             else
  23.             {
  24.                 SQLCHAR in[] = "DRIVER=MySQL ODBC 3.51 Driver;UID=root";
  25.                
  26.                 if ( !SQL_SUCCEEDED(SQLDriverConnect(con, NULL, in, SQL_NTS, NULL, 0, NULL,
  27.                 SQL_DRIVER_NOPROMPT)) )
  28.                     sql_perror(SQL_HANDLE_DBC, con, "SQLDriverConnect" );
  29.                 else
  30.                 {
  31.                     printf("Connexion reussie !!!\n" );
  32.                    
  33.                     SQLDisconnect(con);
  34.                 }
  35.                
  36.                 SQLFreeHandle(SQL_HANDLE_DBC, con);
  37.             }
  38.         }
  39.            
  40.         SQLFreeHandle(SQL_HANDLE_ENV, env);
  41.     }
  42.    
  43.     return 0;
  44. }
  45. void sql_perror(SQLSMALLINT HandleType, SQLHANDLE Handle, const char * title)
  46. {
  47.     SQLCHAR s[SQL_MAX_MESSAGE_LENGTH];
  48.     SQLSMALLINT ligne = 1;
  49.    
  50.     fprintf(stderr, "%s :\n", title);
  51.    
  52.     while (SQLGetDiagField(HandleType, Handle, ligne, SQL_DIAG_MESSAGE_TEXT, s, sizeof(s), NULL) != SQL_NO_DATA)
  53.     {
  54.         fprintf(stderr, "%d. %s\n", ligne, s);
  55.         ligne++;
  56.     }
  57. }


 
le même problème de connexion demeure.
J'ai le message suivant après exécution:
retcode = - 1 // la valeur de retour de SQLConnect
 
SQLDriverConnect:
1. [
2. [
 
Mes informations sont:
1) J'ai remarqué que lorsque je creé une nouvelle source des données DSN avec ma base des données en utilisant ODBC
il ne me donne pas la permission d'entrer un mot de passe non vide ceci signifie qu'on doit avoir un mot de passe vide.
C'est logique ?
 
voici l'imprime d'écran:
http://rapidshare.com/files/256421933/dsn.bmp.html
 
2) Après la compilation de code, j'ai des "warrings":
 
1>------ Début de la génération : Projet : version1, Configuration : Debug Win32 ------
1>Compilation en cours...
1>main.c
1>c:\version1\version1\main.c(29) : warning C4133: 'fonction' : types incompatibles - de 'SQLCHAR [39]' à 'SQLWCHAR *'
1>Compilation du manifeste en ressources en cours...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>Édition des liens en cours...
1>Incorporation du manifeste en cours...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>Le journal de génération a été enregistré à l'emplacement "file://c:\version1\version1\Debug\BuildLog.htm"
1>version1 - 0 erreur(s), 1 avertissement(s)
========== Génération : 1 a réussi, 0 a échoué, 0 mis à jour, 0 a été ignoré ==========
 
 
 
3) Pour la configuration de Character Set, j'ai fait:
 
projet ==> propriétés de projet ==> propriétés de configuration ==> général
 
Alors je ne trouve pas la valeur de Character Set pour la changer à Not Set.
 
Voici l'imprime d'écran:
 
http://rapidshare.com/files/256423287/config.bmp.html
 
Merci.


Message édité par dimadima le 16-07-2009 à 13:19:12

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Problème du connexion à BD Mysql dans un programme C

 

Sujets relatifs
Problème Template matching matlab[C#] Créer des cookie
jdbc avec mysqlPetites images et grandes images...
VB 2008: problème de POOproblème de centrage
Problème de height 100% et de position...probleme de drop de table sur oracle
serveur Mysql s'arrêteProblème avec le rafraichissement d'une page
Plus de sujets relatifs à : Problème du connexion à BD Mysql dans un programme C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR