Manipuler une base de donnée access en c (dev-c++)

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 / Exemple :


// 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;
}

Codes Sources

A voir également

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.

Du même auteur (Any_Problem_Have_Solution)