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 :

TADOConnection + Unresolved external


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 65
    Points : 41
    Points
    41
    Par défaut TADOConnection + Unresolved external
    Bonjour,

    Je travaille actuellement sous C++ Builder 5 et essaie d'implémenter une classe qui me permettra de me connecter à différentes bases de données pour les besoin de l'application que je réalise.
    J'ai fait le choix d'une classe statique, à savoir que l'ensemble des attributs et méthodes sont statiques.

    Mon premier problème est que j'obtiens les messages suivants à la compilation :
    [Lieur Erreur] Unresolved external 'Database::cnnSQLBIF' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER5\PROJECTS\DATABASE.OBJ
    [Lieur Erreur] Unresolved external 'Database::cnnSQLData' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER5\PROJECTS\DATABASE.OBJ
    J'ai vérifié plusieurs fois si je n'avais pas oublié un petit quelque chose et, à première vue, il me semble que non.

    Mon deuxième problème est le fait que lorsque je veux instancier mon objet TADOConnection, je suis censé faire :
    cnnMDB = new TADOConnection(this);
    J'obtiens alors le message suivant :
    [C++ Erreur] Database.cpp(23): E2297 'this' ne peut être utilisé que dans une fonction membre
    Je comprends pourquoi le compilateur me signale cette erreur (c'est logique, vu que c'est du statique, le pointeur this ne fait référence à rien), je ne peux donc pas faire ça.
    Mais alors, comment dois-je procéder ? Suis-je obligé de faire de cette façon ? Y a-t-il une alternative ?

    Voici le code pour mieux comprendre et visualiser :

    Database.h :
    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
     
    #ifndef DatabaseH
    #define DatabaseH
     
    #include <ADODB.hpp>
     
    class Database
    {
       private:
            static TADOConnection *cnnMDB;
            static TADOConnection *cnnSQLBIF;
            static TADOConnection *cnnSQLData;
       public:
            static bool __fastcall openMDBConnection(String dbName);
            static bool __fastcall openSQLConnection(bool bForBif, String userName, String pw, String serverNamedPipe, String serverAddress, String serverCustom, String dbName);
            static bool __fastcall openSQLConnections(String userName, String pw, String serverNamedPipe, String serverAddress, String serverCustom, String BIFDBName, String DataDBName);
     
    };
    #endif
    Database.cpp :
    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
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "Database.h"
     
    bool __fastcall Database::openMDBConnection(String dbName)
    {
       String cs = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbName;
       // voir message compilo quand commentaire retiré
       //cnnMDB = new TADOConnection(this);
       Database::cnnMDB->CursorLocation = clUseClient;
       Database::cnnMDB->ConnectionString = cs;
       Database::cnnMDB->LoginPrompt = false;
       try { Database::cnnMDB->Connected = true; }
       catch (EADOError *e) { return false; }
     
       return true;
    }
     
    bool __fastcall Database::openSQLConnection(bool bForBif, String userName, String pw, String serverNamedPipe, String serverAddress, String serverCustom, String dbName)
    {
       String cs = "Provider=SQLOLEDB.1;Password=" + pw + ";Persist Security Info=True;" + "User ID=" + userName + ";Initial Catalog=" + dbName;
     
       if(serverNamedPipe != "")
            cs += ";Data Source=" + serverNamedPipe;
       else
            cs += ";Network Address=" + serverAddress + ";Network Library=dbmssocn";
     
       if(serverCustom != "")
       {
            cs = serverCustom;
            cs = StringReplace(cs, "<PW>", pw, TReplaceFlags());
            cs = StringReplace(cs, "<ID>", userName, TReplaceFlags());
            cs = StringReplace(cs, "<DB>", dbName, TReplaceFlags());
       }
     
       if(bForBif)
       {
            // voir message compilo quand commentaire retiré
            //cnnSQLBIF = new TADOConnection(this);
            Database::cnnSQLBIF->CursorLocation = clUseClient;
            Database::cnnSQLBIF->ConnectionString = cs;
            Database::cnnSQLBIF->LoginPrompt = false;
            try { Database::cnnSQLBIF->Open(userName, pw); }
            catch (EADOError *e) { return false; }
     
            return true;
       }
       else
       {
            // voir message compilo quand commentaire retiré
            //cnnSQLData = new TADOConnection(this);
            Database::cnnSQLData->CursorLocation = clUseClient;
            Database::cnnSQLData->ConnectionString = cs;
            Database::cnnSQLData->LoginPrompt = false;
            try { Database::cnnSQLData->Open(userName, pw); }
            catch (EADOError *e) { return false; }
     
            return true;
       }
    }
     
    bool __fastcall Database::openSQLConnections(String userName, String pw, String serverNamedPipe, String serverAddress, String serverCustom, String BIFDBName, String DataDBName)
    {
       bool rc;
     
       rc = openSQLConnection(true, userName, pw, serverNamedPipe, serverAddress, serverCustom, BIFDBName);
       if(rc)
       {
            rc = openSQLConnection(false, userName, pw, serverNamedPipe, serverAddress, serverCustom, DataDBName);
            if(!rc)
                    Database::cnnSQLBIF->Close();
       }
     
       return rc;
    }
     
    #pragma package(smart_init)
    Merci d'avance.

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 65
    Points : 41
    Points
    41
    Par défaut
    J'ai également une autre question :

    Comment accéder à des composants de ma GUI depuis une autre classe, composants déclarés dans la partie __published du .h ?

Discussions similaires

  1. TADOConnection + Unresolved external
    Par Tenebrous dans le forum C++Builder
    Réponses: 7
    Dernier message: 16/02/2012, 13h58
  2. unresolved external symbol _IID_IDi
    Par PC23 dans le forum DirectX
    Réponses: 6
    Dernier message: 05/08/2005, 10h38
  3. PB de buil : unresolved external symbol
    Par dede92 dans le forum Windows
    Réponses: 8
    Dernier message: 13/12/2004, 11h21
  4. unresolved external symbol _IID_IDirectDraw7
    Par lvdnono dans le forum DirectX
    Réponses: 2
    Dernier message: 15/06/2004, 21h05
  5. Réponses: 4
    Dernier message: 23/04/2004, 16h06

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