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

Signaler
Messages postés
393
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
23 décembre 2011
-
houdanor
Messages postés
1
Date d'inscription
mardi 22 février 2011
Statut
Membre
Dernière intervention
27 février 2011
-
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 :

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include<stdlib.h>
#include<string.h>

#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>

#include <sqlucode.h>
#include <odbcinst.h>
#include <Msdasql.h>
#include <Msdadc.h>

void main()
{
SQLRETURN retcode;
//char design[20];
//int A,B,C,D;
//char request[100];
//char dsn[20]="toto";
//char uid[20]="root";
//char pwd[20]="";
SQLINTEGER lon,la,lb,lc,ld,taille=SQL_NTS;
SQLCHAR design[20];
SQLHDBC hdbc;
SQLHENV henv;
SQLHSTMT hstmt;

/*Allocate environment handle */
retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
if (retcode SQL_SUCCESS || retcode SQL_SUCCESS_WITH_INFO) //{
   /* Set the ODBC version environment attribute */
   retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
   if (retcode SQL_SUCCESS || retcode SQL_SUCCESS_WITH_INFO) //{
      /* Allocate connection handle */
      retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
     // if (retcode SQL_SUCCESS || retcode SQL_SUCCESS_WITH_INFO)

    //printf("%s","vrai");
    //else
        //printf("erreur\n");
//   }
 
//}

             
          // retcode = SQLConnect(hdbc,(SQLCHAR*)dsn, SQL_NTS,(SQLCHAR*)uid, SQL_NTS,(SQLCHAR*)pwd, SQL_NTS);
    retcode=SQLConnect(hdbc,(SQLCHAR *)"toto",SQL_NTS,(SQLCHAR *)"root",SQL_NTS,(SQLCHAR *)"",SQL_NTS);
    printf("%d",retcode);    if(retcode SQL_SUCCESS || retcode SQL_SUCCESS_WITH_INFO)
printf("\n%s","vrai");
else
printf("Erreur sur l'instruction SQLConnect !\\n");

}

Je dois travailler dans cet environnement: Windows, Visual Studio, C, Mysql et ODBC.

Je serais très content pour vos aides

Merci.

3 réponses

Messages postés
393
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
23 décembre 2011
5
Salut,
Après l'exécution j'obtiens:
retcode=-1  c'est la valeur de retour de SQLConnect
Erreur sur l'instruction SQLConnect Impossible de se connecter a la source de donnees:
1. [

- Qu'est ce que signifie ce message d'erreur ?:  1. [  
- Comment je trace ODBC ?
Messages postés
193
Date d'inscription
mercredi 24 août 2005
Statut
Membre
Dernière intervention
3 juin 2016

salut,

A premiere vue:
pas de SQLDriverConnect mais tu peux
utiliser une proc du genre pour tracer des messages
avec
#define MAWBUFLEN 256
void ProcessLogMessages(SQLSMALLINT plm_handle_type,
SQLHANDLE plm_handle,
char *logstring, int ConnInd)
{
RETCODE plm_retcode = SQL_SUCCESS;
UCHAR plm_szSqlState[MAXBUFLEN] = "",
plm_szErrorMsg[MAXBUFLEN] = "";
SDWORD plm_pfNativeError = 0L;
SWORD plm_pcbErrorMsg = 0;
SQLSMALLINT plm_cRecNmbr = 1;
SDWORD plm_SS_MsgState 0, plm_SS_Severity 0;
SQLINTEGER plm_Rownumber = 0;
USHORT plm_SS_Line;
SQLSMALLINT plm_cbSS_Procname, plm_cbSS_Srvname;
SQLCHAR plm_SS_Procname[256], plm_SS_Srvname[256];
cerr<<logstring<<endl;

while (plm_retcode != SQL_NO_DATA_FOUND) {
plm_retcode = SQLGetDiagRec(plm_handle_type, plm_handle,
plm_cRecNmbr, plm_szSqlState, &plm_pfNativeError,
plm_szErrorMsg, MAXBUFLEN - 1, &plm_pcbErrorMsg);

if (plm_retcode != SQL_NO_DATA_FOUND) {
if (ConnInd) {
plm_retcode = SQLGetDiagField(
plm_handle_type, plm_handle, plm_cRecNmbr,
SQL_DIAG_ROW_NUMBER, &plm_Rownumber,
SQL_IS_INTEGER,
NULL);
}
cerr<<"szSqlState = "<<plm_szSqlState<<endl;
cerr<<"pfNativeError = "<<plm_pfNativeError<<endl;
cerr<<"szErrorMsg = "<<plm_szErrorMsg<<endl;
cerr<<"pcbErrorMsg = "<<plm_pcbErrorMsg<<endl;

if (ConnInd) {
cerr<<"ODBCRowNumber = "<< plm_Rownumber<<endl;
cerr<<"SSrvrLine = "<< plm_Rownumber<<endl;
cerr<<"SSrvrMsgState = "<<plm_SS_MsgState<<endl;
cerr<<"SSrvrSeverity = "<<plm_SS_Severity<<endl;
cerr<<"SSrvrProcname = "<<plm_SS_Procname<<endl;
cerr<<"SSrvrSrvname = "<<plm_SS_Srvname<<endl;
}
}
plm_cRecNmbr++; //Increment to next diagnostic record.
} // End while.
}
Messages postés
1
Date d'inscription
mardi 22 février 2011
Statut
Membre
Dernière intervention
27 février 2011

j'ai etablie la connexion avec la bd et je veus la requete de l'ecoute listen request