Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MANIPULER UNE BASE DE DONNÉE ACCESS EN C (DEV-C++)


Information sur la source

Catégorie :Base de données Classé sous : microsoft, access, devcpp, bdd, c Niveau : Initié Date de création : 14/04/2007 Date de mise à jour : 14/04/2007 19:22:12 Vu / téléchargé: 11 236 / 1 245

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

Description

Bonjour,

Après avoir parcouru quelques sites je viens de trouver une solution
simple mais efficace d'ouvrir et d'exécuter des requêtes
sur une base de donnée Microsoft Access en C !!!

Le code a été compiler avec Dev-C++ ;-)

IMPORTANT : il faut le compiler avec la librairie "libodbc32.a"
(Dans Dev-C++ allez dans le menu : Projet->Options du projet->Paramètre->Editeur de liens, et mettre le chemin de la librairie "C:/Dev-Cpp/lib/libodbc32.a
")

Bon courage a tous ++

 

Source

  • // Connexion et execution de requete sur un base de donnees Microsoft Access
  • #include <stdio.h>
  • #include <stdlib.h>
  • #include <windows.h>
  • #include <sql.h>
  • #include <sqlext.h>
  • #pragma comment(lib, "odbc32.lib")
  • int main(int argc, char *argv[])
  • {
  • HENV hEnv;
  • HDBC hDbc;
  • RETCODE rc;
  • int iOut;
  • char strOut[256];
  • char szDSN[256] = "driver={Microsoft Access Driver (*.mdb)};dbq=[test.mdb];";
  • char szSql[256] = "SELECT * FROM One";
  • int ret1;
  • int ret2;
  • int ret3;
  • int ID;
  • char Name[128];
  • char Login[128];
  • // 1 - Connexion a la BDD Access
  • rc = SQLAllocEnv(&hEnv);
  • rc = SQLAllocConnect(hEnv, &hDbc);
  • rc = SQLDriverConnect(hDbc, NULL, (unsigned char*)szDSN, SQL_NTS, (unsigned char*)strOut, 255, (SQLSMALLINT*)&iOut, SQL_DRIVER_NOPROMPT);
  • // 2 - Preparation de la requete
  • HSTMT hStmt;
  • rc = SQLAllocStmt(hDbc,&hStmt);
  • rc = SQLPrepare(hStmt,(unsigned char*)szSql, SQL_NTS);
  • // 3 - Execution de la requete (Apres avoir binder les champs de resultats)
  • //rc = SQLBindCol(hStmt, tab_column, tr_type, tr_value, tr_len, len_or_ind);
  • rc = SQLBindCol(hStmt, 1, SQL_C_ULONG, &ID, 4, (SQLINTEGER*)&ret1);
  • rc = SQLBindCol(hStmt, 2, SQL_C_CHAR, Name, 128, (SQLINTEGER*)&ret2);
  • rc = SQLBindCol(hStmt, 3, SQL_C_CHAR, Login, 128, (SQLINTEGER*)&ret3);
  • rc = SQLExecute(hStmt);
  • // IMPORTANT : Pour les requetes du style DROP/CREATE/UPDATE...
  • // Vous pouvez utiliser : rc = SQLExecDirectA(hStmt,(unsigned char*)szSql,SQL_NTS);
  • // 4 - Boucle pour afficher les resultats
  • while(!(SQLFetch(hStmt) & 0xFFFE))
  • {
  • printf("{%i}{%s}{%s}\n", ID, Name, Login);
  • }
  • // 5 - Liberations et fermeture de la connection a la BDD
  • rc = SQLFreeStmt(hStmt, SQL_DROP);
  • rc = SQLDisconnect(hDbc);
  • rc = SQLFreeEnv(hEnv);
  • getch();
  • return 0;
  • }
// Connexion et execution de requete sur un base de donnees Microsoft Access
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <sql.h>
#include <sqlext.h>

#pragma comment(lib, "odbc32.lib")

int main(int argc, char *argv[])
{
    HENV hEnv;
    HDBC hDbc;
    RETCODE rc;
    
    int iOut;
    char strOut[256];
    char szDSN[256] = "driver={Microsoft Access Driver (*.mdb)};dbq=[test.mdb];";
    char szSql[256] = "SELECT * FROM One";
    
    int ret1;
    int ret2;
    int ret3;
    int ID;
    char Name[128];
    char Login[128];
    
    // 1 - Connexion a la BDD Access
    rc = SQLAllocEnv(&hEnv);
    rc = SQLAllocConnect(hEnv, &hDbc);
    rc = SQLDriverConnect(hDbc, NULL, (unsigned char*)szDSN, SQL_NTS, (unsigned char*)strOut, 255, (SQLSMALLINT*)&iOut, SQL_DRIVER_NOPROMPT);
    
    // 2 - Preparation de la requete
    HSTMT hStmt;
    rc = SQLAllocStmt(hDbc,&hStmt);
    rc = SQLPrepare(hStmt,(unsigned char*)szSql, SQL_NTS);
    
    // 3 - Execution de la requete (Apres avoir binder les champs de resultats)
    //rc = SQLBindCol(hStmt, tab_column, tr_type, tr_value, tr_len, len_or_ind);
    rc = SQLBindCol(hStmt, 1, SQL_C_ULONG, &ID, 4, (SQLINTEGER*)&ret1);
    rc = SQLBindCol(hStmt, 2, SQL_C_CHAR, Name, 128, (SQLINTEGER*)&ret2);
    rc = SQLBindCol(hStmt, 3, SQL_C_CHAR, Login, 128, (SQLINTEGER*)&ret3);
    rc = SQLExecute(hStmt);
    
    // IMPORTANT : Pour les requetes du style DROP/CREATE/UPDATE...
    // Vous pouvez utiliser : rc = SQLExecDirectA(hStmt,(unsigned char*)szSql,SQL_NTS);
    
    // 4 - Boucle pour afficher les resultats
    while(!(SQLFetch(hStmt) & 0xFFFE))
    {
        printf("{%i}{%s}{%s}\n", ID, Name, Login);
    }
    
    // 5 - Liberations et fermeture de la connection a la BDD
    rc = SQLFreeStmt(hStmt, SQL_DROP);
    rc = SQLDisconnect(hDbc);
    rc = SQLFreeEnv(hEnv);
    
    getch();

    return 0;
}

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • access.devTélécharger ce fichier [Réservé aux membres club]888 octets
  • main.cTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 953 octets
  • test.mdbTélécharger ce fichier [Réservé aux membres club]151 552 octets

Télécharger le zip

Historique

14 avril 2007 19:22:12 :
Merci encore BruNews pour l'optimisation de la boucle ;-)

Commentaires et avis

signaler à un administrateur
Commentaire de BruNews le 14/04/2007 17:24:40 administrateur CS

SQLAllocEnv() ainsi que toutes les autres, faut vérifier le retour avant d'aller plus loin.

if(rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO)
peut se réduire en: if(!(rc  & 0xFFFE))

ainsi la boucle deviendrait:
while(!(SQLFetch(hStmt) & 0xFFFE)) {
  ...
}

signaler à un administrateur
Commentaire de Any_Problem_Have_Solution le 14/04/2007 18:56:38

Oui je sais je test pas les retours pour alléger le code et aller a l'essentiel (apres ceux qui veulent utiliser le code font comme ils le sentent ;-), sinon merci BruNews du conseil pour le test de sortie de boucle ++

signaler à un administrateur
Commentaire de Cyberboy2054 le 15/04/2007 01:44:55

Mouais enfin si tu veux aller a l'essentiel (récuperer les infos stoquées dans la base de données) mais que t'as pas de connexion, t'as l'air malin.
Après c'est sur que de toutes facons, quelqu'un qui veut utiliser Access aura du mal à se servir de la librairie sans se documenter, mais quand on veut donner des exemples, c'est mieux de bien coder les siens :D

signaler à un administrateur
Commentaire de franck31400 le 16/04/2007 16:05:09

Perso je trouve ca pas mal !!

Juste une petite question: est ce que ya moyen de changer:  "driver={Microsoft Access Driver (*.mdb)};dbq=[test.mdb];";  pour se connecter a d'autre bases de donnée ( Mysql ou SqlServeur ....)

Si c'est possible ,cette librairie est assez pratique!!

signaler à un administrateur
Commentaire de Renfield le 16/04/2007 16:07:53 administrateur CS

effectivement, Franck31400, et c'est d'ailleurs tout l'interet des chaines de connections...

signaler à un administrateur
Commentaire de BruNews le 16/04/2007 19:29:18 administrateur CS

Ici pour les différentes chaines de connexion:
http://www.connectionstrings.com/

signaler à un administrateur
Commentaire de franck31400 le 16/04/2007 21:04:08

oui en effet ya pas mal de choix : SQL Server Oracle  et Mysql pour les plus connus!!

Je vais essayer ca pour voir
Merci

signaler à un administrateur
Commentaire de omnia le 18/04/2007 10:21:42

C'est simple et pas mal :p

signaler à un administrateur
Commentaire de blouw le 13/07/2007 15:08:32

Bonjour à tous.
S'il y a encore du monde j'aimerais vous poser une question. J'ai tenté de compiler ce code avec code::blocks et minGW mais il me balance des erreurs. Le compilo ne connait pas SQLRETURN. J'aimerais savoir pourquoi ca ne marche pas et aussi comment le faire marcher.
Merci d'avance.

signaler à un administrateur
Commentaire de kanue le 21/09/2007 20:28:38

Bomjour,
j'ai installé et essayer de compiler ce code. J'ai installer Dev-C++ et quand je compile le code, il me dit que le fichier n'a pas été retrouvé.
Merci pour l'aide

signaler à un administrateur
Commentaire de dguilloteau le 03/06/2008 16:50:18

Bonjour,
J'ai utiliser ce code avec code::blocks sous vista pour ouvrir une connexion avec un fichier Access. Il compile parfaitement sauf que j'ai des "undefined reference" pour chaque fonctions concernant le SQL. Est ce que quelqu'un pourrai m'éclairé?

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

builder+ bdd ACCESS [ par makandja ] Salut à tous,Je dois réaliser un programme qui lit les données d'un fichier texte pour les enregistrer dans une bdd ACCESS. Le programme doit lire les Accéder à une BDD access en VC++.NET [ par baptistemazet ] Comment faire ? Ce serait la base de d&#233;veloppement d'un programme pour moi ! Merci de me dire les ressources &#233;ventuelles &#224; prendre en c bdd Access depuis C++ Builder6 [ par kich ] je suis étudiante et je réalise mon PFE pour un problème d'ordonnancement. je dois accéder à une base de donnée Access depuis c++ Builder 6 et je vien nombre de colonne bdd access [ par ouamtax ] Bonjour,existe t'il un moyen de connaitre le nombre de colonnes d'une table soit par requete SQL soit par une instruction C.En C, pour l'exécution d'u bdd access [ par myann ] slut a tous!au fait, je viens creer une application sur c++ builder contenant une DBGrid et je voudrais connecter celle ci a une base de donnees sur a parcourir une bdd access [ par azamharir ] salutcomment je peut en parcourant les dossiers avec mfc parcourir aussi une bdd access pour voir ses tables et leurs champs?si quelqu'un peut m'orien Appli C++ console et bdd Access [ par boninou ] Bonjour,Je travaille sur une application en mode console et je souhaiterais me connecter le plus simplement possible à une base de données access afin C++ : connection base de données access [ par raimais7 ] Bonjour tout le monde, Je suis actuellement en stage et j'aurai besoin de votre aide. Je dois faire un code qui se connecte à une base de donnée acc Access aux donnes [ par collysamin1983 ] Bon voila, je suis membre d'une association et je vaudrais bien crée un base de donnes afin de mot de passe pour une base access [ par micou26 ] bonjour,je suis débutant dans le domaine informatique et surtout le domaine access.je suis en stage dans une entreprise pour laquelle je crée une base


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,421 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.