INSERT dans une base de données access

Signaler
Messages postés
6
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
13 juin 2007
-
Messages postés
6
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
13 juin 2007
-
Salut,

Je suis actuellement en train de réaliser une application intranet. Pour ce projet j'ai besoin de faire des INSERT dans une base de données de type Access.

Grâce à ce script trouvé sur ce même site j'ai réussi à établir une connexion et ensuite pouvoir lire les données présentes dans la base.

J'ai donc voulu modifier ce script pour ensuite effectuer un INSERT dans la base. Maleresement je n'ais pas réussi à effectuer cette tâche malgrès beaucoup de recherche et d'essais. Sans compter que l'on trouve peu d'aide sur internet en ce qui concerne ce point.

Voici le code que j'ai effectué :

// 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=[formation_test3.mdb];";
    //char szSql[256] = "SELECT * FROM formation";
    char szSql[256] = "INSERT INTO formation VALUES('', 10, 'inti stage', 20, '12/06/2007', '', 'max dep', 30, 'libelle serv', 40, 'libelle niv7', 50, 'libelle depart', 60, 'libelle salle', '15:00:00', '12/06/2007')";
    //char szSql[256] = "UPDATE formation SET Numero_de_session='10' WHERE Code_stage='3115'";
    //char szSql[256] = "INSET INTO formation VALUES


    // 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);
    if(rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) printf("NOK1\n");
    else printf("OK1\n");


    rc = SQLExecDirectA(hStmt,(unsigned char*)szSql,SQL_NTS);
    if(rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) printf("NOK2\n");
    else printf("OK2\n");


    // 5 - Liberations et fermeture de la connection a la BDD
    rc = SQLFreeStmt(hStmt, SQL_DROP);
    rc = SQLDisconnect(hDbc);
    rc = SQLFreeEnv(hEnv);


    printf("\nfin\n");
    getch();


    return 0;
}

Merci par avance pour vos réponses car là je désespère !

4 réponses

Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
2
salut,

as tu essayé d'utiliser la fonction INSERT dans une base de données plus simple et courte, pour vérifier que c'est possible, sans notamment heure ni date car c'est source d'erreurs lorsque la syntaxe n'est pas parfaitement respectée.

par exemple une table toto avec juste deux champs, un integer et un varchar

Loki
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
La voix du bon sens ce que dit Loki6, on teste en plusieurs étapes des procédures simple et ensuite seulement on peut y aller.

ciao...
BruNews, MVP VC++
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
2
merci pour ce compliment BruNews , par ce temps pourri ça réchauffe le coeur

Loki
Messages postés
6
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
13 juin 2007

SAlut'


J'ai effectuer ce test et ca fonctionne à merveille. Le problème sur ma requette initiale ne provenée que d'une petite erreur de type :s


Merci