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 :

Cr�er un service windows avec C++Builder10 [D�butant]


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre actif Avatar de KISEKI
    Homme Profil pro
    �tudiant
    Inscrit en
    Mars 2011
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 23
    Par d�faut Cr�er un service windows avec C++Builder10
    Bonjour,

    Donc j'utilise l'outil de builder pour cr�er un service "Service Application".

    Le but de mon service est de transf�rer les donn�es d'une table vers une autre, j'ai ainsi du rajouter un TDatabase et TQuery dans mon Service Application.

    Voici le code du transfert il marche correctement dans une fiche vcl avec un TTimer.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     Query1->SQL->Clear();
     Query1->SQL->Add( "INSERT INTO Tab2(Nom1) SELECT Nom from Tab where validation_t = 1");
     Query1->ExecSQL();
     
    //supprime
     
     Query1->SQL->Clear();
     Query1->SQL->Add("Delete FROM Tab where validation_t = 1");
     Query1->ExecSQL() ;
    Mon probl�me je n'arrive pas � ex�cuter mon service apr�s son l'installation.

    Test effectuer:

    -Si ma Database est directement connect� dans les propri�t�s, le service ne veut pas s'ex�cuter (Message d'erreur le programme � prit trop temps � s'ex�cuter).

    -Si ma Database n'est pas directement connect� mais je veux la connecter lors du d�marrage du service exemple:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    void __fastcall TService1::ServiceStart(TService *Sender, bool &Started)
    {
    Database1->Connected=true;
    }
    Probl�me (Message d'erreur le service � besoin d'autre service ou programme pour fonctionner.

    -Autre Test mais toujours les m�mes probl�me:
    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
    void __fastcall TService1::ServiceExecute(TService *Sender)
    {
     
    while(!Terminated)
    {
     
    Service1->Database1->Connected=true;
    Service1->Query1->SQL->Clear();
    Service1->Query1->SQL->Add( "INSERT INTO Tab2(Nom1) SELECT Nom from Tab where validation_t = 1");
    Service1->Query1->ExecSQL();
     
    //supprime
     
    Service1->Query1->SQL->Clear();
    Service1->Query1->SQL->Add("Delete FROM Tab where validation_t = 1");
    Service1->Query1->ExecSQL() ;
    Service1->Database1->Connected=false;
    }
    }
    J'ai essay� d'utiliser un Thread en ajoutant un ObjetThread � mon projet mais non :

    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
    void __fastcall MyThread::Execute()
    {
     
    while(!Terminated)
    {
     
    Service1->Database1->Connected=true;
    Service1->Query1->SQL->Clear();
    Service1->Query1->SQL->Add( "INSERT INTO Tab2(Nom1) SELECT Nom from Tab where validation_t = 1");
    Service1->Query1->ExecSQL();
     
    //supprime
     
    Service1->Query1->SQL->Clear();
    Service1->Query1->SQL->Add("Delete FROM Tab where validation_t = 1");
    Service1->Query1->ExecSQL() ;
    Service1->Database1->Connected=false;
    }
    }
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    void __fastcall TService1::ServiceExecute(TService *Sender)
    {
    while(!Terminated)
    {
    ServiceThread->ProcessRequests(true);
    MyThread1->Resume();
    }
    }
    Donc � ce jour je suis un peu perdu j'ai regard� sur internet mais en vain, j'ai utilis� un tutoriel voici le lien http://www.kbcafe.com/articles/TService.pdf j'ai du rater quelque chose mais je n'y arrive pas donc si quelqu'un peu me mettre sur la voie je vous en remercie.

    Cordialement KISEKI.

  2. #2
    Expert �minent
    Avatar de ShaiLeTroll
    Homme Profil pro
    D�veloppeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    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 089
    Par d�faut
    Je n'ai jamais utilis� le BDE dans un service mais les composants MyDAC, v�rifie ton objet Session (unit� DBTable)

    As-tu attribu� un utilisateur � ton service (voir sc.exe pour le faire en ligne de commande)
    Tu as peut-�tre besoin d'activer l'interactivit� avec le bureau pour acc�der au BDE ?
    Quelle version de Delphi ? de Windows ?
    Le niveau de s�curit� d'un service W2K est minimal
    XP c'est facile � g�rer, affecter un compte utilisateur ouvre plus de possibilit�
    Vista\Seven cela peut-�tre nettement plus capricieux, en 64Bits, je ne sais m�me si tu peux installer du Service 32 Bits

    Tu n'es pas oblig� de mettre ce code ta boucle dans OnExecute !
    Je dirais m�me que cela doit occuper le processeur inutilement, le tutoriel que tu as indiqu� n'indique absolument pas cela !

    D'ailleurs pourquoi une boucle ? tu �limines des lignes d'une table vers une autre table, tu ne risque pas d'avoir de conflit avec d'autres applications ?
    Vu le code, tu lance ta requ�te SELECT + DELETE en boucle, tu vas d�passer le million de requ�te par heure, le BDE ne le supportera pas plus de 24h non-stop !
    Un sleep pour lancer la requ�te toute les minutes serait utile !

    Rien n'emp�che de mettre un TTimer dans ton Module Service, celui-ci lancement le traitement 5s apr�s le d�marrage du Service, c'est que j'ai fait pour un service qui devait tourner en permanence avec un d�clenchement p�riodique !

    Sinon pourquoi faire un service ? ton programme ne fait qu'une fois la tache ou il doit la faire en permanence !
    Tu peux tr�s bien faire un Exe normal lanc� par le planificateur de tache !
    J'ai vu cette pratique tr�s souvent !
    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 actif Avatar de KISEKI
    Homme Profil pro
    �tudiant
    Inscrit en
    Mars 2011
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 23
    Par d�faut
    Donc mon service devra tourner sur un WinServ2003 o� est ma base donn�e(SQL-Server2008), je travail sur mon poste (Seven64bitSP1) avec Embarcadero Rad Studio 2010.

    J'ai d�j� essay� d'activer l'interactivit� avec le bureau toujours un probl�me.
    Je vais essay� avec le TTimer dans le service avec un sleep.

    Cordialement KISEKI,

    PS:ShaiLeTroll ton avatar me dis quelque chose c'est qui(quoi) exactement.

  4. #4
    Expert �minent
    Avatar de ShaiLeTroll
    Homme Profil pro
    D�veloppeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    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 089
    Par d�faut
    SQL-Server2008 - n'utilise pas le BDE !
    Pr�f�re ADO ou DBExpress (ce dernier en utilisation batch est plus performant)

    �a te fera surement un soucis en moins, vu que le BDE utilise le Driver ODBC, ce qu'ADO fera plus efficacement !

    Ensuite, ton service n'aura pas de requ�tes de service, oublie le thread pour le moment
    utilise un TTimer qui d�clenche la requ�te toutes les minutes par exemple
    Sauf, la premi�re fois au boit de 100ms par exemple !
    Tu d�fini l'interval � 100 et Enabled � true dans le OnStart, tu le repasse � 60000 dans le OnTimer !

    le SELECT \ DELETE, tu appeles ces SQL depuis le OnTimer !



    HS : mon Avatar, montage sur costume de G'Kar un narn de la s�rie Babylon 5 avec la t�te de Chaka, un Unas de Stargate SG-1, montage fait sous MSPaint en jouant juste sur le Fuchsia et la transparence , j'avais du temps � perdre en 2004 chez un employeur qui me sous-alimentait en taf !
    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

  5. #5
    Membre actif Avatar de KISEKI
    Homme Profil pro
    �tudiant
    Inscrit en
    Mars 2011
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 23
    Par d�faut
    Bonjour,

    Merci ShaiLeTroll tu me sauve la vie .

    Le faite de travailler avec les objets ADO et la technique du TTimer marche beaucoup mieux.

    Voici le code finale:

    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
     
    void __fastcall TService1::ServiceStart(TService *Sender, bool &Started)
    {
    Timer1->Interval=100;
    Timer1->Enabled=true;
     
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TService1::Timer1Timer(TObject *Sender)
    {
     //ADOConnection1->Connected=true;
     
     ADOQuery1->SQL->Clear();
     ADOQuery1->SQL->Add( "INSERT INTO Tab2(Nom1) SELECT Nom from Tab where validation_t = 1");
     ADOQuery1->ExecSQL();
     
    //supprime
     
     ADOQuery1->SQL->Clear();
     ADOQuery1->SQL->Add("Delete FROM Tab where validation_t = 1");
     ADOQuery1->ExecSQL() ;
     
    // ADOConnection1->Connected=false;
     
     Timer1->Interval=5000;
    }
    //---------------------------------------------------------------------------
    Cordialment KISEKI.

  6. #6
    Expert �minent
    Avatar de ShaiLeTroll
    Homme Profil pro
    D�veloppeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    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 089
    Par d�faut
    un petit ?
    Ravi de t'avoir aid�, c'est interressant sur l'utilisation du BDE en service, faudrait se renseigner � ce sujet !

    Sinon, faudrait voir si avec un Trigger dans la Base Oracle, si tu ne pourrais pas avoir se comportement d�s la modification du validation_t sans devoir lancer ce traitement en boucle !
    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

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 7
    Dernier message: 12/06/2015, 12h34
  2. Comment cr�er un service Windows en c# avec Delphi2005
    Par fplanglois dans le forum Delphi .NET
    R�ponses: 2
    Dernier message: 14/11/2006, 20h30
  3. cr�er un service windows avec TService
    Par youcef81 dans le forum C++Builder
    R�ponses: 4
    Dernier message: 02/10/2006, 20h20
  4. [Système]Service windows avec java
    Par stephpr44 dans le forum G�n�ral Java
    R�ponses: 4
    Dernier message: 24/11/2005, 20h50
  5. [Eclipse] cr�er un service Windows avec Eclipse
    Par tck-lt dans le forum Eclipse Java
    R�ponses: 2
    Dernier message: 19/09/2005, 17h28

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