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 :
Je suis obligé de déclarer une variable de retour de type pointeur (VARIANT*) dans mes procédures, d'où le type OLEVariant
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;
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 !
Partager