IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Requête SQL avec champs variable


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 14
    Par défaut Requête SQL avec champs variable
    Bonjour à tous,

    Voila, je me connecte à une base access avec la langage C++. J'effectue ensuite une requete SQL don voici le code:

    rc=SQLselect(hStmt,"select from*base CODNIV values ("00684")");

    Je souhaiterai personnaliser ma requête en rendant le champs 00684 variable, c'est a dire saisi par l'utilisateur, et ensuite executer ma requête en fonction de ce champs.

    Merci d'avance

    YDU

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour et bienvenu,
    Ne peux-tu pas simplement concaténer ta chaîne de requête avec l'entrée utilisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    std::string user_req(???);
    std::string requete("SELECT * FROM base WHERE CODNIV =");
    requete += "\"" + user_req + "\""
    rc=SQLselect(hStmt,requete.c_str());

  3. #3
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 14
    Par défaut
    Salut Archi, merci pour ton hospitalité.

    J'ai de toute petite notion de C et j'ai du mal à saisir ton petit bout de code.

    En effet j'aurai souhaité passé par un printf. voici ce que je pensais faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf("merci de renseigné le CODNIV que vous souhaitez analyser:\n");
    scanf("%s",ma_var);
    merci d'avance

    YDU

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    - En C++, tu te faciliteras la vie à utiliser les flux en lieu et place des printf/scanf.
    Commence par jeter un coup d'oeil à la FAQ consacrée au sujet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    std::string user_req;
    std::cout<<"merci de renseigné le CODNIV que vous souhaitez analyser:"<<std::endl;
    if(std::cin>>user_req){
     
       std::string requete("SELECT * FROM base WHERE CODNIV =");
       requete += "\"" + user_req + "\"";
     
       rc=SQLselect(hStmt,requete.c_str());
    }
    else{
       std::cout<<"erreur"<<std::endl;
    }

  5. #5
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 14
    Par défaut
    Euh .... je pense que je mélange C et C++. En effet le compilateur ne semble pas comprende std::

    En attendant je vais consulter la FAQ que tu m'as conseillé


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    /* 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>
    #include <string.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=[ydu.mdb];";
     
        /* char szSql[256] = "SELECT * FROM base"; */
        /* char szSql[256] = "SELECT * FROM base WHERE CODNIV='00684'"; */
     
        std::string user_req;
        std::cout<<"Merci de renseigner sur 5 caractères le groupe que vous souhaitez analyser:"<<std::endl;
     
        if (std::cin>>user_req)
           {
                               std::string requete("SELECT * FROM base WHERE CODNIV =");
                               requete += "\"" + user_req + "\"";
     
                               rc=SQLselect(hSmt,requete.c_str());
                               }
        else
            {
                               std::count<<"Erreur"<<std::endl;
                               }
     
     
     
        /* char szSql[256] = "SELECT * FROM base WHERE CODNIV='00684' and CODPRD='01.006'"; */
     
        int ret1;
        int ret2;
        int ret3;
        int ret4;
        int ret5;
     
        char CODNIV[128];
        char TYPNIV[128];
        char CODPRD[128];
        int PRODC;
        int OBJANNEE;
     
        /* 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_CHAR, CODNIV, 128, (SQLINTEGER*)&ret1);
        rc = SQLBindCol(hStmt, 2, SQL_C_CHAR, TYPNIV, 128, (SQLINTEGER*)&ret2);
        rc = SQLBindCol(hStmt, 3, SQL_C_CHAR, CODPRD, 128, (SQLINTEGER*)&ret3);
        rc = SQLBindCol(hStmt, 4, SQL_C_ULONG, &PRODC, 4, (SQLINTEGER*)&ret4);
        rc = SQLBindCol(hStmt, 5, SQL_C_ULONG, &OBJANNEE, 4, (SQLINTEGER*)&ret5);
        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("{%s}{%s}{%s}{%i}{%i}\n",CODNIV, TYPNIV, CODPRD, PRODC, OBJANNEE);
        }
     
        /* 5 - Liberations et fermeture de la connection a la BDD */
        rc = SQLFreeStmt(hStmt, SQL_DROP);
        rc = SQLDisconnect(hDbc);
        rc = SQLFreeEnv(hEnv);
     
        getch();
     
        return 0;
    }

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Il te manque les en-têtes :
    pour les chaines de caractère (std::string)
    et
    pour les flux (std::cin, std::cout).

    Un conseil : remplace tes char toto[256] par des std::string toto. std::string est faite pour gérer les chaînes de caractères.

Discussions similaires

  1. [MySQL] Requête sql avec champs inexistants
    Par nolookpass8 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/11/2013, 11h15
  2. [MySQL] Erreur requête SQL avec simple variable.
    Par Mck698 dans le forum PHP & Base de données
    Réponses: 21
    Dernier message: 31/05/2012, 14h33
  3. Requête SQL avec une variable
    Par tony_95 dans le forum SGBD
    Réponses: 4
    Dernier message: 11/05/2011, 13h55
  4. [WD7.5] Requête SQL avec champ de saisie
    Par paupiau dans le forum WinDev
    Réponses: 4
    Dernier message: 24/04/2008, 12h44
  5. [SQL] Requête SQL avec champ identique
    Par morgan47 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 09/10/2007, 20h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo