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

Bases de données Delphi Discussion :

SAPGui component could not be instantiated


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 74
    Points : 44
    Points
    44
    Par défaut SAPGui component could not be instantiated
    Dans Delphi7 j'utilise le composant TSQLConnection (DbExpress) pour une connexion avec une base Oracle10g d'un côté, et de l'autre un ActiveX de SAPGUI 640 (TGuiApplication) pour piloter des transactions SAP (système de gestion de production).
    Sous windows2000, pas de problème.
    Sous windowsXP pro, j'accède à SAP tant que la connexion Oracle n'a pas été initialisée. Dès la première connexion à Oracle10g, et même après déconnexion, toutes tentatives d'accéder à SAP se soldent par le message "SAPGui component could not be instantiated".
    D'ou vient cette erreur ?, s'agit-il d'un problème de configuration de windowsXP (sécurité) ?. Merci de toutes réponses

    Code test:
    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
    procedure TFormMain.Button1Click(Sender: TObject);
    var  AString : String;
    begin
      if FormStdSAP.SAPLogonDone = False  then begin
        FormStdSAP.SAPGuiApplication := TGuiApplication.Create(Self);
        FormStdSAP.SAPScriptingLogon(ApplicationPath,AString);
      end else begin
        FormStdSAP.SAPGuiApplication.Free;
        FormStdSAP.SAPLogonDone := false;
      end;
    end;
     
    procedure TFormMain.Button2Click(Sender: TObject);
    begin
      if ASQLConnection = nil  then  begin
        try
          ASQLConnection := TSQLConnection.Create(Self);
          ASQLConnection.ConnectionName := 'OracleConnection';
          ASQLConnection.DriverName := 'Oracle';
          ASQLConnection.GetDriverFunc := 'getSQLDriverORACLE';
          ASQLConnection.LibraryName := 'dbexpora.dll';
          ASQLConnection.LoginPrompt := false;
          ASQLConnection.VendorLib := 'oci.dll';
          ASQLConnection.Name := 'SQLConnection1';
          ASQLConnection.TableScope := [tsTable,tsView];
          ASQLConnection.LoadParamsOnConnect := false;
          ASQLConnection.Params.Loadfromfile('c:\Tests\Inifiles\dbxconnections.ini');
          ASQLConnection.Connected := True;
        except
        end;
      end else begin
        ASQLConnection.Connected := False;
        ASQLConnection.Free;
        ASQLConnection := nil;
      end;
    end;
    [Modération]
    Merci d'utiliser les balises code ou quote,Laurent Dardenne
    [/Modération]

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut Re: SAPGui component could not be instantiated
    Citation Envoyé par BaldeckJ
    D'ou vient cette erreur ?, s'agit-il d'un problème de configuration de windowsXP (sécurité) ?. Merci de toutes réponses
    Pour le tester utilise un compte administrateur local.
    Que donne l'inverse ? connexion Oracle puis SAP ?
    Quel version du client Oracle ?
    Comment s'effectue la connexion avec SAP ?
    Dans quel état se trouve ton composant après l'appel à Oracle ?

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 74
    Points : 44
    Points
    44
    Par défaut SAPGui component could not be instantiated
    Merci pour votre réponse!

    Pour le tester utilise un compte administrateur local. => connecté compte Administrateur local

    Que donne l'inverse ? connexion Oracle puis SAP ? => Les connections/déconnections Oracle fonctionnent dans tous les cas. Mais dès qu'une connection Oracle a été effectuée, la connection SAP génère un erreur alors qu'elle fonctionne tant qu'aucune connection Oracle n'a été effectuée. L'arrêt du programme réinitialise tout.

    Quelle version du client Oracle ? => Oracle 10.2 SQLNET 10.2.0.1.0

    Comment s'effectue la connexion avec SAP ? => via un ActiveX
    voici le code simplifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //types définis en SAPFEWSELib_TLB lors installation AxtiveX (SAP scripting Control) fourni avec SAPGui640
    var en global 
      SAPWorkConnection : GuiConnection;
      SAPGuiApplication : TGuiApplication; 
    procedure TForm1.Button1Click(Sender: TObject);
    begin
        SAPGuiApplication := TGuiApplication.Create(Self);
      try
        SAPWorkConnection := SAPPGuiApplication.OpenConnectionByConnectionString(connection string,True,True); //connection string = SAP IP adresse + system number
      except
      end;
    end;
    Dans quel état se trouve ton composant après l'appel à Oracle ? => pour bien séparer les Pbs, une instance est crée à la connection et détruite à la déconnection (voir code envoi précédent).

    Merci encore pour interêt.

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Avant de te répondre tous les membres utilisent les balises code ou quote cela facilite la lecture des postes, en haut de la fenêtre d'edition d'un msg tu trouveras le bouton code ou Quote.

    Afin de retrouver facilement qui dit quoi, le mieux est d'utiliser le bouton citer dans le message de la personne te répondant ou de préfixer les réponses citées, du type >> ....

    Pour ton pb, à moins d'un usage en commun d'une ressource entre l'activeX et le composant Oracle (OCI.dll) je ne vois pas, tu peux essayer de tracer avec l'outil FileMonitor ...
    Sur quel couche réseaux s'appui l'ActiveX ?
    En face SAP est-il sur une base Oracle ?

    SAP doit proposer des forums de support, les as-tu consultés ?
    Ton composant a-t-il un event disconnect ou qq chose comme ça ?

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 74
    Points : 44
    Points
    44
    Par défaut
    Merci pour la rapidité de la réponse!

    Je ne sais pas sur quelle couche réseaux s'appuie l'ActiveX.
    SAP est bien aussi sur une base Oracle.

    J'ai soumis ma demande sur les forums de SAP et Microsoft mais j'ai peur de ne pas recevoir de réponse.
    Ce composant SAP dispose d'un évent disconnect et j'ai tout essayé mais sans résultat.
    Ce même programme très dépouillé fonctionne parfaitement sous Windows 2000/NT et sort en erreur sous Windows XP Profesional .

    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
     
    unit FMain;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, OleCtrls, SAPFEWSELib_TLB, DBXpress, DB, SqlExpr,
      ExtCtrls;
     
    type
      TFormMain = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Panel1: TPanel;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Déclarations privées }
        ASQLConnection: TSQLConnection;
        SAPGuiApplication : TGuiApplication;
        SAPWorkConnection : GuiConnection;
        SAPWorkSession : GuiSession;
        SAPLogonDone : Boolean;
      public
        { Déclarations publiques }
      end;
     
    var
      FormMain: TFormMain;
     
    implementation
     
    {$R *.dfm}
     
    procedure TFormMain.Button1Click(Sender: TObject);
    var
      I : Integer;
    begin
      if SAPLogonDone = False
      then
      begin
        SAPGuiApplication := TGuiApplication.Create(Self);
        try
          SAPWorkConnection := SAPGuiApplication.OpenConnectionByConnectionString('xxx.xxx.xxx.xxx 00',True,True);
          SAPLogonDone := True;
          SAPWorkSession := SAPWorkConnection.Children.Item(0) As ISapSessionTarget;
          (SAPWorkSession.FindById('wnd[0]/usr/txtRSYST-MANDT', GuiTextField_) As GuiTextField).Text := '500';
          (SAPWorkSession.FindById('wnd[0]/usr/txtRSYST-BNAME', GuiTextField_) As GuiTextField).Text := '*****';
          (SAPWorkSession.FindById('wnd[0]/usr/pwdRSYST-BCODE', GuiTextField_) As GuiTextField).Text := '*****';
          (SAPWorkSession.FindById('wnd[0]/usr/txtRSYST-LANGU', GuiTextField_) As GuiTextField).Text := 'EN';
          SAPWorkSession.SendCommand('/0');
        except
        end;
      end
      else
      begin
        for I := 0 to SAPWorkConnection.Sessions.Count -1 do
          SAPWorkConnection.CloseSession(SAPWorkConnection.Sessions.ElementAt(I).Id);
        SAPGuiApplication.Free;
        SAPLogonDone := False;
      end;
    end;
     
    procedure TFormMain.Button2Click(Sender: TObject);
    begin
      Panel1.Color := clRed;
      if ASQLConnection = nil
      then
      begin
        try
          ASQLConnection := TSQLConnection.Create(Self);
          ASQLConnection.ConnectionName := 'OracleConnection';
          ASQLConnection.DriverName := 'Oracle';
          ASQLConnection.GetDriverFunc := 'getSQLDriverORACLE';
          ASQLConnection.LibraryName := 'dbexpora.dll';
          ASQLConnection.LoginPrompt := false;
          ASQLConnection.VendorLib := 'oci.dll';
          ASQLConnection.Name := 'SQLConnection1';
          ASQLConnection.TableScope := [tsTable,tsView];
          ASQLConnection.LoadParamsOnConnect := false;
          ASQLConnection.Params.Loadfromfile('c:\Tests\Inifiles\dbxconnections.ini');
          ASQLConnection.Connected := True;
          Panel1.Color := clGreen;
        except
        end;
      end
      else
      begin
        ASQLConnection.Connected := False;
        ASQLConnection.Free;
        ASQLConnection := nil;
      end;
    end;
     
    end.

  6. #6
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par BaldeckJ
    SAP est bien aussi sur une base Oracle.
    ok
    Citation Envoyé par BaldeckJ
    Ce composant SAP dispose d'un évent disconnect et j'ai tout essayé mais sans résultat.
    Est-il déclenché lors de libération de la connexion associé à TSQLConnection ?
    Citation Envoyé par BaldeckJ
    Ce même programme très dépouillé fonctionne parfaitement sous Windows 2000/NT et sort en erreur sous Windows XP Profesional .
    Essaie de tracer les connexions Oracle/SqlNet via le fichier de configuration :
    ...product\10.2.0\db_1\network\admin\sqlnet.ora
    Il existe un fichier d'exemple dans le réperoire sample, je ne me souviens plus du nom de l'entrée à configurer, au cas où pose la question sur le forum Oracle.

    As-tu essayé un autre mode de connexion sous Delphi, par ex ODBC ?
    Tu peux aussi rechercher sur le site Oracle Ask Tom et sur leur forums dédiés.

    De ce que je connais des OCI, on ouvre un handle par connexion et ils sont indépendants les uns des autres mais à prioris dans ton cas il semblerais (prudence, prudence) que les handles soient tous impactés par une opération de déconnexion. J'ai du mal à le croire...

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 74
    Points : 44
    Points
    44
    Par défaut suite "SAPGui component could not be intantiated"
    Avec le programme de test que j’ai donné, voici ce que l’on constate :

    Etapes :
    1- Lancement programme
    2- Appui sur Button1 -> connexion SAP OK ; l’écran SAP s’affiche
    3- Appui sur Buton1 -> déconnexion SAP OK
    4- Si Retour étape 2 -> pas de problème ça fonctionne
    5- Sinon appui Button2 -> connexion Oracle OK (Panel devient vert)
    6- appui Button1 -> connexion SAP en erreur <SAPGui component could not be intantiated>
    7- appui Button2 -> déconnexion Oracle OK (Panel devient rouge)
    8- appui Button1 -> connexion SAP en erreur <SAPGui component could not be intantiated>

    En fait, dès qu’il y a eu une connexion Oracle via DBExpress, la connexion SAP via ActiveX (is implemented as a COM Interface) ne fonctionne plus ; ou dit autrement, tant qu’il n’a pas eu de connexion Oracle, les connexions/déconnexions SAP fonctionnent !

    A l’inverse, suite à de multiples connexions/déconnexions SAP, la connexion Oracle fonctionne bien (mais bloque alors les connexions SAP)

    J’ai testé deux connexions oracle simultanées (sans SAP), ça marche.

    L’événement SAPGuiApplication.OnDestroySession := SAPGuiApplicationDestroySession est appelé lors de la libération de l’instance SAPGuiApplication.

    Comme vous me l’avez proposé, je vais poser la question sur le site « Oracle Ask Tom ».

    Je crois savoir que la différence majeure entre windows2000(service pack4) et windowsXPpro(service pack2) et la gestion de la sécurité (firewall intégré) ; ne serai-ce pas un problème de configuration du firewall ? D’autant plus que je trouve ce type d’erreur dans le site Microsoft technet :
    http://<br /> http://72.14.203.104/...lnk&cd=3<br />
    Mais je n’y comprends pas grand chose.

    Merci pour vos réponses

  8. #8
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut Re: suite "SAPGui component could not be intantiated&am
    Citation Envoyé par BaldeckJ
    ne serai-ce pas un problème de configuration du firewall ?
    Je ne pense pas, dans ce cas la connexion ne serait pas activée.
    Que donne l'exécution de 2 prg un SAP et un autre Delphi ?
    As-tu essayé un autre mode d'accés sosu Delphi, ODBC par exemple ?
    Que donne la trace de sqlnet.ora ?

  9. #9
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 74
    Points : 44
    Points
    44
    Par défaut
    Suite à vos directives, j'ai testé le même programme avec une connexion ODBC et une connexion ADO et cela fonctionne correctement. (Même avec les deux connexions ODBC et ADO actives)

    J'ai fais aussi le test de 2 programmes indépendants lancés en même temps, l'un avec la connexion SAP, l'autre avec la connexion Oracle DBExpress. Cela fonctionne.

    Il y a donc bien un conflit entre connexion DBExpress et ActiveX SAP

    Je n'ai pas encore trouvé le paramètre pour tracer les connexions/déconnexions

    Slts

  10. #10
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par BaldeckJ
    Il y a donc bien un conflit entre connexion DBExpress et ActiveX SAP
    Tu peux déjà remonter l'info sur QualityCentral et reposter ton pb dans les newsgroups Borland.

    Sinon regarde ce soft http://www.easymatica.com/flextracer/
    Il permet de tracer les appels OCI (Oracle Call Interface) mais je ne sais pas si cela te seras d'un grande utilité, a tester.

    Il existait une version free :
    OCI Debugger 1.0.0.115
    Copyright (c) codeXPloit Team, 2002
    codexploit@codexploit.com
    http://www.codexploit.com
    Latest version is always available at
    http://www.codexploit.com/ocidebugger/
    ==================================================
    OCI Debugger is aimed to trace OCI-calls to get
    information about executed SQL-queries on Oracle
    databases. It can trace different OCI calls
    such as "prepare", "execute", "fetch", estimate
    their execution times and save this data as a
    report.
    ==================================================
    OCI Debugger is a free software, so you can freely
    distribute it without any limitation. Since it
    is a free software, it is provided "as is" without
    any warranty for any damage it can cause.

  11. #11
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 74
    Points : 44
    Points
    44
    Par défaut
    Merci pour vos réponses

    Afin de mieux cerner le probleme, j'ai testé le programme toujours avec le composant DBExpress mais connecté à une base MySQL. Et ça fonctionne! C'est donc bien le couple DbExpress/Oracle qui est incompatible avec SAPGuiApplication.

    J'ai installé et lancé FexTracer
    ci-dessous les traces visualisées
    On remarque que :
    - SAPGuiApplication utilise la technoloigie ADO
    - il n'y a pas de trace de fin de connexion OCI (est-ce normal ?)

    Questions :
    1- J'utilise le patch1 de Delphi7; est-ce le dernier disponible ?
    2- Que veux dire pratiquement
    remonter l'info sur QualityCentral et reposter ton pb dans les newsgroups Borland
    • FlexTracer Report
      Thread Id Call Time (ms) Result Parameters

      <<< SAPGUIApplication Component>>>
      860 Connection::Open 7 0 ConnectionString="Provider='Microsoft.JET.OLEDB.4.0';Data Source=C:\Documents and Settings\Administrator.TTE-AOE-IIS2\SapWorkDir\SAPHistoryADMINISTRATOR.mdb;Jet OLEDBatabase Password=NRBYEALNMWQMQ"UserID=""Password=""Options=0
      860 Connection::Close 41 0

      <<<DBExpress Oracle>>
      1612 OCILogon 68 0 userid="owner"dbid="ntp.IISAN"

      <<<ODBC Oracle>>>
      1612 SQLConnect 53 0 ServerName="TEST"UserName="owner"
      1612 SQLDisconnect 3 0 ConnectionHandle=16847968

      <<<ADO Oracle>>>
      1612 Connection::Open 51 0 ConnectionString="Provider=MSDAORA.1;Password=***;User ID=owner;Data Source=NTP.IISAN;Persist Security Info=True"UserID=NULLPassword=NULLOptions=4294967295
      1612 Connection::Close 0

  12. #12
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par BaldeckJ
    C'est donc bien le couple DbExpress/Oracle qui est incompatible avec SAPGuiApplication.
    La couche ADO est à jour sur le poste ?
    Citation Envoyé par BaldeckJ
    - il n'y a pas de trace de fin de connexion OCI (est-ce normal ?)
    là je ne sais pas
    Citation Envoyé par BaldeckJ
    1- J'utilise le patch1 de Delphi7; est-ce le dernier disponible ?
    Certain développeur déconseille le patch 1 sous D7 et je ne pense pas qu'il y en ai d'autre, regarde sur le site Borland.
    Citation Envoyé par BaldeckJ
    2- Que veux dire pratiquement "remonter l'info sur QualityCentral et reposter ton pb dans les newsgroups Borland"
    QualityCentral : site de rapport de bug online
    newsgroups Borland : Forum US dédié au produit Borland

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/03/2012, 16h39
  2. Réponses: 7
    Dernier message: 05/07/2010, 13h45
  3. Could not instantiate Seam component:
    Par gl0be dans le forum Seam
    Réponses: 2
    Dernier message: 13/01/2009, 17h09

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