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 :

[3 tiers][EOleException]


Sujet :

Bases de données Delphi

  1. #1
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut [RESOLU][3 tiers][EOleException]
    Bonjour à tous,
    Je vais essayer d'être clair !!! Je m'excuse si le post est un peu long

    Je développe en ce moment une application en architecture 3 tiers avec les composants DataSnap
    1/ tiers client qui accéde par DCOM au serveur d'application en implémentant l'interface IAppServer (accès aux procédures métiers)
    2/ tiers serveur COM (Module de donnèes distant) qui accéde par les composants dbExpress (SQLQuery, SQLProcStored) au SGBD
    3/ serveur Oracle

    J'ai plusieurs procédures sur le serveur d'appli qui vont rechercher des infos sur le SGBD et qui concaténe celles-ci pour les retourner au client :

    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
     
    //exemple : 
    procedure TTApitre.PEIL_SENDAC_LISTE_MATRICES(out MATRICES: OleVariant); 
    var 
    Liste_Matrices:WideString; 
    begin 
    SQLQuery1.SQL.Clear; 
    try 
    SQLQuery1.SQL.Add('SELECT MATR_ID FROM MATRICE'); 
      try 
      SQLQuery1.Open; 
      SQLQuery1.First; 
        While not SQLQuery1.EOF do 
          begin 
          Liste_Matrices:=Liste_Matrices+SQLQuery1.Fields.Fields[0].AsString+'|'; 
          SQLQuery1.Next; 
          end; 
      Form1.Memo1.lines.Add(MATRICES); 
      // on libére l'objet query ouvert 
      finally 
      SQLQuery1.Close; 
      SQLQuery1.Free; 
      end; 
      except 
      // ALARME A FAIRE 
      SQLQuery1.Close; 
      SQLQuery1.Free; 
    end; 
    MATRICES:=Liste_Matrices; 
    end;
    Je suis obligé de déclarer une variable de retour de type pointeur (VARIANT*) dans mes procédures, d'où le type OLEVariant

    sur le client, j'appelle cette procèdure comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    //-------------------------------------------------------------------------------- 
    procedure TFPrincipal.PEIL_SENDAC_LISTE_MATRICES; 
    var 
    Liste_Matrices:OleVariant; 
    MATRICES:WideString; 
    begin 
    //Appel DCOM 
    DM.DCOMConnection1.AppServer.PEIL_SENDAC_LISTE_MATRICES(Liste_Matrices); 
    MATRICES:=Liste_Matrices; 
    end;

    J'ai ainsi plusieurs procédures qui font à peu près la même chose (chaque procédure a été testée et fonctionne lorsqu'elles ne sont pas appelées successivement
    Le problème est que :
    dés que j'appelle par exemple dans un événément OnCreate du form principal SUCCESSIVEMENT mes procédures :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //-------------------------------------------------------------------------------- 
    procedure TFPrincipal.FormCreate(Sender: TObject); 
    begin 
    //Appels DCOM par exemple 
    PEIL_SENDAC_LISTE_MATRICES; 
    PEIL_SENDAC_LISTE_GP; 
    end;

    J'ai systèmatiquement une erreur DES LE 2nd APPEL A UNE PROCEDURE de type :

    Cpitre.exe a provoqué une classe d'exception EOLEException avec le message Panne Inatendue

    J'ai retourné le pb dans tous les sens, je ne vois pas.
    Pb d'instance du serveur COM?
    nota : l'expert de module de données distant a été paramétré comme suit
    Instancie : INSTANCE MULTIPLE
    Modèle de Thread : APARTMENT

    merci bcq de votre aide, car cela devient VERY URGENT !
    PpPool

  2. #2
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut
    j'ai récrit mes procédures métiers en intégrant des pointeurs
    j'ai retesté chaque procédure à partir de mon client : tout fonctionne

    DES QUE J'APPELLE successivement 2 procédures avec 2 appels DCOM : j'ai perpétuellement ce message qui provoque le plantage de l'appli

    PB OS : je suis sous W98 OS/2 ??
    j'ai tenté d'ouvrir et de fermer la connexion DCOMConnection à chaque appel d'une procédure : même problème
    j'ai tenté de libérer l'interface IAppServer : rien à faire

    c'est la la la très très grossssssssssse MERDE !
    AU SECOURS

    PpPool

  3. #3
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut
    Bonjour à tous,

    j'ai modifié certains paramétres d'instanciation du serveur COM en faisant passer le modèle de thread à Both

    Toujours le même problème : pourtant, je cherche simplement avec un client à accéder à 2 objets (rien d'extraordinaire)

    2nd : j'ai testé l'appel de 2 procédures qui ont une signature différente :

    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
     
    //-----------------------------------------------------------------------------------------
    procedure TFPrincipal.FormCreate(Sender: TObject);
    var
    resultat:OleVariant;
    liste_matrices:OleVariant;
    liste_GP:OleVariant;
    begin
     
    //1ere procédure : en entrée demande 2 paramètres de type String (BSTR)
    //paramétre de sortie : OleVariant
    DM.DCOMConnection1.AppServer.CpteInsCampMod('2003',resultat,'M1A');
    I:=resultat;
    //------------- 1er appel : çà marche
     
    //--2nde procedure : paramètre de sortie de type OleVariant : pas de paramètres d'entrées
    DM.DCOMConnection1.AppServer.PEIL_SENDAC_LISTE_MATRICES(liste_matrices);
    MATRICES:=liste_matrices;
    //------------- 2nd appel : çà marche
     
    //--3ème procedure : paramètre de sortie de type OleVariant : pas de paramètres d'entrées (SIGNATURE IDENTIQUE A LA SECONDE)
    DM.DCOMConnection1.AppServer.PEIL_SENDAC_LISTE_GP(liste_GP);
    GROUPE_PARAMETRES:=liste_GP;
    //------------- CA PLANTE : OLEException : pb inattendue !!!!!!!!!!!!!!
    end;
    donc le pb ne vient pas du tout du paramètrage du serveur.

    QUE ME CONSEILLEZ VOUS, car là franchement, je tourne en rond !!!
    :o
    PpPool

  4. #4
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut
    j'ai refait proprement ma partie serveur en applicant un composant query et/ou proc stored pour chaque appel au SGBD

    ET CELA FONCTIONNE.

    Ce qui est tout de même bizarre c'est qu'en environnement 2 tiers les mêmes appels fonctionnaient très bien (la reconstruction dynamiquement des propriètes des composants dbExpress était donc correcte, mais en 3 tiers, plus rien ne marche, mystère !!!!)

    enfin, une histoire qui finit bien
    PpPool

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

Discussions similaires

  1. opengl et librairie tiers
    Par viddak dans le forum OpenGL
    Réponses: 2
    Dernier message: 06/12/2004, 10h18
  2. Gestion des exception (EOleException)
    Par shurized dans le forum Bases de données
    Réponses: 5
    Dernier message: 30/06/2004, 17h25
  3. Architecture en 4 tier?
    Par Raideman dans le forum Windows
    Réponses: 2
    Dernier message: 06/10/2003, 14h50
  4. [Design Patterns] Architecture 3 tiers
    Par HPJ dans le forum Design Patterns
    Réponses: 1
    Dernier message: 29/07/2003, 11h49
  5. Comment mettre en place une structure 3 tiers.
    Par WOLO Laurent dans le forum Débats sur le développement - Le Best Of
    Réponses: 13
    Dernier message: 27/07/2003, 22h01

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