[vc++ 6][api] connecteur a une base mysql

Soyez le premier à donner votre avis sur cette source.

Vue 10 055 fois - Téléchargée 1 111 fois

Description

voila, ce code vous montre comment cous connecter et inserer quelque-chose dans une base de données MySQL.

Attention : ce code suppose, pour la compilation, que vous ayez téléchargé la librairie MySQL++ et que vous l'ayez bien installée :

MySQL++ : installations :
---------------------------------
  • .h => repertoire "include" de VC++
  • .lib => repertoir "Lib" de VC++
  • .dll => repertoir de l'executable ou de Windows\System

Source / Exemple :


#include <windows.h>
#include <commctrl.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <sys/stat.h> 
#include <mysql++> 
#include <sqlplus.hh> 

#include "resource.h"

using namespace std;

char pass[255];

class Memoire
{
public:
	char *chp1;
	char *chp2;
	char *user;
	char *host;	
	
	char buffer[1024];

	char* GetThenAllocate(HWND hWnd, int hControl, char *vName);
	//FreeAllocatedOne(char *vName);

};

char* Memoire::GetThenAllocate(HWND hWnd, int hControl, char *vName)
{
	GetDlgItemText(hWnd,hControl,buffer,sizeof(buffer));

	if (strcmp(vName,"host")==0  || strcmp(vName,"Host")==0 )
	{
	host = (char*)malloc(strlen(buffer)+1);
	strcpy(host,buffer);
	return host;
	}
	else if (strcmp(vName,"user")==0  || strcmp(vName,"User")==0 )
	{
	user = (char*)malloc(strlen(buffer)+1);
	strcpy(user,buffer);
	return user;
	}
	else if (strcmp(vName,"Champs1")==0  || strcmp(vName,"Body")==0 )
	{
	chp1 = (char*)malloc(strlen(buffer)+1);
	strcpy(chp1,buffer);
	return chp1;
	}
	else if (strcmp(vName,"Champs2")==0  || strcmp(vName,"Auteur")==0 )
	{
	chp2 = (char*)malloc(strlen(buffer)+1);
	strcpy(chp2,buffer);
	return chp2;
	}
	
return 0;
}

Memoire Mem;

LRESULT CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CLOSE:
DestroyWindow(hDlg);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
switch(HIWORD(wParam))
{
case BN_CLICKED:
switch(LOWORD(wParam))
{
case IDCANCEL:
DestroyWindow(hDlg);
break;
case IDC_SEND:
	{

Mem.GetThenAllocate(hDlg,IDC_ADRESS,"host");
Mem.GetThenAllocate(hDlg,IDC_USER,"user");
Mem.GetThenAllocate(hDlg,IDC_CH1,"Champs1");
Mem.GetThenAllocate(hDlg,IDC_CH2,"Champs2");

GetDlgItemText(hDlg,IDC_PASS,pass,sizeof(pass)); 
/*
pour le pass, je suis obliger de faire comme ceci : si le pass est "", il y aurais une erreur

  • /
try { Connection con(use_exceptions); try { con.real_connect("ESSAI",Mem.host,Mem.user,pass,3306,(int)0,60,NULL); } catch(...) { MessageBox(NULL,"Impossible de se connecter à la base de données","Erreur !",0+MB_ICONHAND); } Query query = con.query(); query <<"INSERT INTO mytable (Champs1,Champs2) VALUES ('"<<Mem.chp1<<"','"<<Mem.chp2<<"');"; Result res = query.store(); MessageBox(hDlg,"La modification de la table a bien été éffectuée !","Bravo !",0+MB_ICONINFORMATION); } catch(BadQuery er) { MessageBox(NULL,"Il y a une erreur de syntaxe !","Erreur !",0); } } break; } break; } break; default: return FALSE; } return FALSE; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hdlg; MSG Msg; hdlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC) DlgProc); if(hdlg == NULL) { MessageBox(NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK); return 0; } ShowWindow(hdlg, nCmdShow); UpdateWindow(hdlg); while(GetMessage(&Msg, NULL, 0, 0) > 0) { TranslateMessage(&Msg); DispatchMessage(&Msg); } return Msg.wParam; }

Conclusion :


ben, donnez une note et des commentaires

PS :

JE VOUS CONSEIL FORTEMENT D'INSTALLE EASYPHP (www.easyphp.org) AFIN DE POUVOIR SE SERVIR CORRECTEMENT LOCALEMENT DE L'EXAMPLE.

POUR UNE CONNECTION LOCAL :
----------------------------------------
adresse => 127.0.0.1
User => root
Pass => "" //rien

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
1
Date d'inscription
vendredi 14 avril 2006
Statut
Membre
Dernière intervention
8 mai 2006

Moi j'ai une question.. Je veux recopier tout ce qui est écrit dans un champ Edit ou Memo, et insérer ça dans une BDD.. le truc c'est que j'utilise Borland C++ Builder..

Dans ton code, tu as la ligne suivante :
query <<"INSERT INTO mytable (Champs1,Champs2) VALUES ('"<<Mem.chp1<<"','"<<Mem.chp2<<"');";

...et en borland ça donne
!mysql_query(myBD, "INSERT INTO mytable (Champs1,Champs2) VALUES(******);");

Ma question est donc la suivante.. que dois-je mettre à la place des ****** ??

Merci d'avance
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
standard du catch:

#define TRAITE_EXCEPTION_B \
catch(BException& e)\
{\
BString plomp;\
plomp="Exception interne Bruno";\
plomp+=(BString)"\nerr "+(BString)e.which()+" :\n \t"; plomp+=e.what() ;\
plomp+="\n FIN Exception interne";\
saveToErrorLog(plomp); /*puts(plomp);*/ \
BVisuel::alerte(plomp);\
}\
catch(exception e)\
{\
BString plomp="Exception C++ : "; plomp+=e.what();\
saveToErrorLog(plomp); /*puts(plomp);*/ \
BVisuel::alerte(plomp);\
}\
catch(...)\
{\
printf("\n\n\t\t");\
printf("Exception Inconnue \n\n");\
saveToErrorLog(" FIN Exception Inconnue");\
BVisuel::alerte("Exception Inconnue ");\
}
Messages postés
338
Date d'inscription
jeudi 22 août 2002
Statut
Membre
Dernière intervention
14 juin 2005

catch(BadQuery er)
{
MessageBox(NULL,"Il y a une erreur de syntaxe !","Erreur !",0);
}

=> tu crées une copie de l'objet de type BadQuery au catch, il est très vivement conseillé d'attraper ses exceptions par référence :

catch(BadQuery &er)

(en effet, imagine que tu veuilles attraper une std::exception par valeur, et que c'est un bad_alloc, tu as de fortes chances pour que la copie foire)

de plus, tu n'est pas obligé de nommer ta variable d'exception si tu ne l'utilises pas, ca permet d'alléger le champ lexical courant :

catch(BadQuery &)
{
MessageBox(NULL,"Il y a une erreur de syntaxe !","Erreur !",0);
}
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
try & catch permettent de récupérer les exceptions et erreurs levées

J'étudie cette lib et mettrai bientot un com + complet
++
Nono.
Messages postés
338
Date d'inscription
jeudi 22 août 2002
Statut
Membre
Dernière intervention
14 juin 2005

qq1 arrive a utiliser mysql++ avec vc++7 ? si oui merci de m'expliquer comment il a fait :)
Afficher les 10 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.