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++Builder Discussion :

Service et TADOConnection


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Par défaut Service et TADOConnection
    Bonjour,

    J'ai réalisé sous BCB 6 une application qui se connecte à une bdd SQL Server grâce à TADOConnection et jusqu'à présent je n'ai rencontré aucun problème, je parvenais à me connecter à la bdd et à réaliser des requêtes.

    J'ai récemment dû modifier mon application pour qu'elle soit exécutée en tant que service. Je ne suis pas tout à fait reparti de zéro, j'ai repris le code principal, et j'ai créé un nouveau projet de type "Expert console", utilisant la VCL, dans lequel j'ai mis le code suivant pour qu'il tourne en tant que service :

    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
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #include "Windows.h"
    #include "Winsvc.h"
    #pragma hdrstop
     
    //---------------------------------------------------------------------------
    #pragma argsused
     
    SERVICE_STATUS ServiceStatus;
    SERVICE_STATUS_HANDLE hServiceStatus;
    BOOL ServiceStarted=TRUE;
    void WINAPI ServiceMain(DWORD argc, LPTSTR *argv);
    void WINAPI ServCtrlHandler(DWORD Opcode);
     
    int main()
    {
        SERVICE_TABLE_ENTRY Table[] = {{"Service1",ServiceMain},{NULL,NULL}};
        StartServiceCtrlDispatcher(Table);
        return 0;
    }
    /******************************************************************************/
     
    void WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv)
    { 
        ZeroMemory(&ServiceStatus, sizeof(SERVICE_STATUS));
        ServiceStatus.dwServiceType = SERVICE_WIN32;
        ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
        ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;
     
        hServiceStatus = RegisterServiceCtrlHandler("MonService", ServCtrlHandler);
     
        ServiceStatus.dwCurrentState = SERVICE_RUNNING;
        ServiceStatus.dwCheckPoint = 0;
        ServiceStatus.dwWaitHint = 0;
     
        SetServiceStatus (hServiceStatus, &ServiceStatus);
     
        ServiceStarted=TRUE;
        while(ServiceStarted)
        {
           // ..... le code principal de mon application.... qui contient notamment la connexion avec TADOConnection
        }
    }
    /******************************************************************************/
     
    void WINAPI ServCtrlHandler(DWORD SCCode)
    {
        switch(SCCode)
         {
          case SERVICE_CONTROL_CONTINUE:
              ServiceStatus.dwCurrentState = SERVICE_RUNNING;
              SetServiceStatus (hServiceStatus,&ServiceStatus);
              return;
          case SERVICE_CONTROL_PAUSE:
              ServiceStatus.dwCurrentState = SERVICE_PAUSED;
              SetServiceStatus (hServiceStatus,&ServiceStatus);
              return;
          case SERVICE_CONTROL_STOP:
              ServiceStatus.dwWin32ExitCode = 0;
              ServiceStatus.dwCurrentState = SERVICE_STOPPED;
              ServiceStatus.dwCheckPoint = 0;
              ServiceStatus.dwWaitHint = 0;
              SetServiceStatus (hServiceStatus,&ServiceStatus);
              ServiceStarted=FALSE;
              return;
         }
    }
    Le code principal de mon application fonctionne parfaitement, jusqu'à ce qu'il tombe sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TADOConnection *TADOConnection1 = new TADOConnection(NULL);
    Cela fait planter mon service et l'arrête.

    Est-ce le "(NULL)" qui ne lui plait pas ?
    J'ai tenté de faire executer le service en tant que administrateur, cela ne change rien...

    Merci pour votre aide.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 081
    Par défaut
    C'est la couche COM pour ADO qui n'est pas chargée

    ajoute un CoInitialize() au démarrage du TService
    Pense que ton alias ODBC doit être dans "source de données système"
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre éclairé Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Par défaut
    Excellent, merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quel est l'intérêt des Services Web ??
    Par silvermoon dans le forum Débats sur le développement - Le Best Of
    Réponses: 19
    Dernier message: 12/02/2003, 22h28
  2. naming service
    Par manuel dans le forum CORBA
    Réponses: 6
    Dernier message: 09/12/2002, 17h43
  3. [VB6] Lancer un service, par exemple Sql Server
    Par fea dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/10/2002, 14h07
  4. develloppement avec ORBit: service d'evenement
    Par belmontv dans le forum CORBA
    Réponses: 3
    Dernier message: 06/06/2002, 22h56
  5. Service de nommage java C++
    Par Anonymous dans le forum CORBA
    Réponses: 3
    Dernier message: 15/04/2002, 12h48

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