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

Windows Discussion :

Problème procedure stocké avec odbc32.lib


Sujet :

Windows

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Problème procedure stocké avec odbc32.lib
    Bonjour,

    J'ai créé une dll en c++ qui en utilisant la librairie Microsoft odbc32.lib me permet d'effectuer des traitements SQL. Ma base de donnée est SQLServer 2000.
    Je n'est aucun problème avec des requêtes SQL mais qu'en je lance certaines procédures stockés je me retrouve avec une erreur "[Microsoft][ODBC SQL Server Driver]État de curseur non valide" lors de l'exécution de "SQLColAttribute " et/ou aucunes lignes de retournées.
    Plus particulièrement ces problèmes apparaissent quand dans ma procédure stockée j'ai des déclarations de variables et/ou des requêtes non retournées (donc pour quasiment toutes^^).
    Voici un extrait de mon code :

    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
         // Handles ODBC
        SQLHENV     henv = NULL;
        SQLHDBC     hdbc = NULL;
        SQLHSTMT    hstmt = NULL;
    
        char szData[100];
        short l;
        //Vous devez adapter ce qui suit à votre DSN spécifique
        PTSTR       szDataSource = "****";
        PTSTR       szUID = "*****";
        PTSTR       szPWD = "*******";
    
        SQLTCHAR* szSQLSelect = (SQLTCHAR*) "execute getArticle '12267/1'";
    
        // Initialise l'environnement ODBC.
        if (SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv) == SQL_ERROR)
        {
            cout<<"Erreur Initialisation de l'environnement ODBC"<<endl;
            goto EXIT;
        }
    
        SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*) SQL_OV_ODBC3, SQL_IS_INTEGER);
    
        // Alloue un handle de connexion et se connecte à la source de données.
        if (SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc) == SQL_ERROR)
        {
            cout<<"Erreur Allouage Handle de Connexion"<<endl;
            goto EXIT;
        }
    
        if (SQLConnect(hdbc, (SQLTCHAR*) szDataSource, SQL_NTS, (SQLTCHAR*) szUID,
        SQL_NTS, (SQLTCHAR*) szPWD, SQL_NTS) == SQL_ERROR)
        {
            cout<<"Erreur Connexion"<<endl;
            goto EXIT;
        }
    
        // Récupère un handle d'instruction et exécute une instruction Transact-SQL SELECT.
        if (SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt) == SQL_ERROR)
        {
            cout<<"Erreur Allouage Handle d'Instruction"<<endl;
            goto EXIT;
        }
    
    	if(SQLPrepare(hstmt, szSQLSelect, SQL_NTS) == SQL_ERROR)
    	{
            cout<<"Erreur Préparation du Statement"<<endl;
            goto EXIT;
        }
    
    	if (SQLExecute(hstmt) == SQL_ERROR)
        {
            cout<<"Erreur Execution du Statement"<<endl;
            goto EXIT;
        }
    
        if (SQLColAttribute(hstmt, NULL, SQL_DESC_COUNT, NULL, 1, NULL, buf3) == SQL_ERROR)
        {
            cout<<"Erreur dans SQLColAttribute"<<endl;
            goto EXIT;
        }
    
        if (SQLFetchScroll(hstmt, SQL_FETCH_NEXT, NULL)== SQL_ERROR)
        {
            cout<<"Prochain Enregistrement Innexistant"<<endl;
            goto EXIT;
        }
    
    EXIT:
        if (hstmt != NULL)
            {
            SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
            }
        if (hdbc != NULL)
            {
            SQLDisconnect(hdbc);
            SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
            }
        if (henv != NULL)
            {
            SQLFreeHandle(SQL_HANDLE_ENV, henv);
            }
        return (0);
    }
    En vous remerciant d'avance pour votre aide

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 123
    Points
    12 123

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Oui ça ressemble à mon problème.
    Après vérification mon serveur sql est bien en sp3, mais j'ai une version personnel et je n'arrive pas à installer le sp4, soit j'obtiens une erreur au lancement si je prend le sp4 pour version MSDE, soit l'installation se fait mais ma version ne change pas si je prend un autre type de sp4.
    La version personnel est une version gratuite mais est elle considéré comme une version MSDE ?

    En tout cas merci pour le tuyau je continu mes recherches dans cette voie.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bon bilan impossible d'installer le sp4 sur n'importe quelle version de SQL Server et sur trois machines différentes dont une virtuelle. Je crois que je vais passer un petit coup de fil à Microsoft en espérant qu'ils seront capable d'installer leur propre mise à jours...
    Quelqun à déja réussi à installer un sp4 sur SQLSERVER 2000 ?!?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    J'ai l'impression que je touche deux problèmes différents. Ma procédure stocké fonctionne très bien si je la lance à partir d'Excel et vers le même serveur SQL (où je n'arrive pas à installer le sp4). J'ai regarder les dépendances d'Excel et il s'avère que se sont les mêmes que pour mon programme (odbc32.dll...).
    Si Excel le fait je doit pouvoir y arriver, enfin je sèche je sais pas comment y font...

Discussions similaires

  1. Comment linker avec odbc32.lib dans le code ? (avec gcc)
    Par _Audrey_ dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 06/11/2008, 17h40
  2. Procedure stockée avec result set
    Par cedric.mechler dans le forum Bases de données
    Réponses: 1
    Dernier message: 08/08/2006, 09h22
  3. probleme procedure stockée avec Mysql
    Par emna_bz dans le forum Installation
    Réponses: 2
    Dernier message: 01/02/2006, 16h26
  4. Procedure stockée avec un parametre en OUTPUT
    Par Nadaa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/09/2004, 20h06
  5. Procedure stockée avec ntext dans SQL server 2000
    Par nagababa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/11/2003, 20h46

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