begin process at 2012 02 13 06:04:52
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de données

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

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


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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é :16 481 / 3 174

Auteur : Any_Problem_Have_Solution

Ecrire un message privé
Commentaire sur cette source (14)
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

Les Membres Club peuvent 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 ;-)

 Sources de la même categorie

GESTION DE FICHIER ET DOSSIER + AUTRES par shinji63
Source avec une capture CONVERTISSEUR par smartties
Source avec Zip CREATION D'UN FICHIER DBF (EN C) par Stanel
Source avec Zip STRUCTURE DES FICHIERS DBF par Stanel
Source avec Zip Source avec une capture GESTION DES ENTREES/ SORTIES AVEC CODEBARRE par YvaddavY

 Sources en rapport avec celle ci

Source avec Zip [WMI][C++][DEV-C++] LECTURES D'INFORMATIONS AVEC WMI SOUS DE... par omnia
Source avec Zip LIAISON SERIE RS-232 par yovotsa
Source avec Zip Source avec une capture [DEV-C++] FENETRE TRANSPARENTE ET NON RECTANGULAIRE par victorcoasne
Source avec Zip BASES DE DONNÉES ET LES PHOTOS par sofinf2006
Source avec Zip CODE DE HUFFMAN par Ricky_MacElroy

Commentaires et avis

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)) {
  ...
}

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 ++

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

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!!

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...

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

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

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

Commentaire de omnia le 18/04/2007 10:21:42

C'est simple et pas mal :p

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.

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

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é?

Commentaire de 17wydad le 25/08/2010 14:20:45

bonjour,
je vous prie de me donner un exemple illustrant la madification/suppression des données en c++ sur une base de données acess

Commentaire de Gaston0510 le 10/12/2010 16:01:38

Bonjour,
j'ai utilisé le code avec dev-C++ et depuis 3 jours j'essaye de creer une nouvelle table :
// IMPORTANT : Pour les requetes du style DROP/CREATE/UPDATE...
// Vous pouvez utiliser : rc = SQLExecDirectA(hStmt,(unsigned char*)szSql,SQL_NTS);
j'ai pas pu le faire ..
j'ai essayer avec :
const char *red="CREATE TABLE liste_proprietaire (numero INT(5) NOT NULL AUTO_INCREMENT,nom VARCHAR(20) NOT NULL,telephone VARCHAR(14) NOT NULL,PRIMARY KEY (numero));";
SQLExecDirectA(hStmt, (UCHAR FAR *)red, SQL_NTS);
mais sa marche pas !
quelqu'un peu m'aider svp ?

Commentaire de mohamed2two le 22/06/2011 19:33:48

Bonjours,
Je vien d'apprendre le langage MySql et je veux le connecter a mes application en C++ (en utilisant la Biblotèque Qt) y'a il kelk1 qui pe m'aider et m'expliquer cmt est ce que je doit faire.
je vous serai trés reconnaissant

 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 [Pilote ODBC Microsoft Access] Trop peu de paramètres. 8 attendu [ par sniperinternet ] salut je developpe un pogramme qui traite une liste d'etudiant avec QT. j'utilse QT creator 1.2 sur windows XP. le programme est simple il charge la 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 supprimer une ligne d'un datagridview et d'une bdd access [ par pam006 ] Bonjour, Je suis développe une application .net avec visual studio 2008 et access 2010. Cette application consiste a gérer une médiathèque. J'utilise Configuration DevCpp sous windows et SFML [ par tiouil ] Bonjour, suite à un gros plantage de windows, j'ai du tout réinstaller y compris DevCpp. Le problème est que j'ai un projet C++/SFML que je doit rendr


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,118 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales