Stockage d'objet dans l'objet Application

Stockage d'objet dans l'objet Application - ASP - Programmation

Marsh Posté le 22-11-2002 à 20:50:20    

Salut,  
 
Voilà mon problème :  
1) Je fais une requète SQL  
2) Je stocke les résultats de cette requète dans des tableaux  
3) Je veux stockker ces tableaux dans l'objet Application  
 
C'est sur le 3 que j'ai un gros pb :  
- J'ai essayé en utilisant des objets Scripting.Dictionary définis dans le global.asa juste au dessus de mon code : ca marche pas (erreur inconnue). Et dans un bouquin que j'ai, ils semblent sous-entendre que l'objet Dictionary n'est pas fait pour marcher avec l'objet Application, mais ils n'entrent pas dans les détails.  
 
- J'ai essayé en créant un objet Array (en JS) et en faisant un Application ("X" ) = maVariableArray;. Ca marche pas non plus (l'objet Application n'accepte que les objets ayant le comportement apartment).  
 
 
Je cherche donc un moyen de stocker soit des tableaux simples, soit des tableaux associatifs, dans l'objet Application pour pouvoir les récupérer dans toutes mes pages.  
 
Pliz help


---------------
Dans le monde, il n'y a que 10 sortes de personnes : ceux qui savent compter en binaire et ceux qui ne savent pas
Reply

Marsh Posté le 22-11-2002 à 20:50:20   

Reply

Marsh Posté le 25-11-2002 à 11:22:19    

Voici mon code :
 
Comme promis, voici le code :
 

Citation :


<OBJECT RUNAT="SERVER" SCOPE="APPLICATION" ID="objTabMarque" PROGID="Scripting.Dictionary">
</OBJECT>
<OBJECT RUNAT="SERVER" SCOPE="APPLICATION" ID="objTabMoCidMarque" PROGID="Scripting.Dictionary">
</OBJECT>
<OBJECT RUNAT="SERVER" SCOPE="APPLICATION" ID="objTabMoCLibelleMoC" PROGID="Scripting.Dictionary">
</OBJECT>
 
<script language="JScript"  runat="Server">
function Application_OnStart ()
{
 // Ouvrir une connexion à la base
 var DBConn;
 DBConn = Server.CreateObject("ADODB.Connection" );
 DBConn.ConnectionTimeout = 15;
 DBConn.CommandTimeout = 30;
 DBConn.CursorLocation = 3;
 DBConn.Open("DSN=MonDSN;UID=MonUID;PASSWORD=MonPass" );
 
 // Requètes
 var sqlMarque, sqlMoC;
 sqlMarque = "SELECT Ma.idMarque, Ma.LibelleMarque ";
 sqlMarque+= "FROM Marque Ma, ModeleCourt MoC, Modele Mo, Type Ty, Vehicule Ve ";
 sqlMarque+= "WHERE Ve.CapID = Ty.CapID AND Ty.idModele = Mo.idModele ";
 sqlMarque+= "AND Mo.idModeleCourt = MoC.idModeleCourt AND MoC.idMarque = Ma.idMarque ";
 sqlMarque+= "ORDER BY LibelleMarque";
 
 sqlMoC = "SELECT MoC.idModeleCourt, MoC.LibelleModeleCourt, MoC.idMarque ";
 sqlMoC+= "FROM ModeleCourt MoC, Modele Mo, Type Ty, Vehicule Ve ";
 sqlMoC+= "WHERE Ve.CapID = Ty.CapID AND Ty.idModele = Mo.idModele AND Mo.idModeleCourt = MoC.idModeleCourt";
 
 // RecordSet
 var idMarque, idModeleCourt, libelleMarque, libelleModeleCourt;
 rsMarque = Server.CreateObject("ADODB.Recordset" );
 rsMarque.Open (sqlMarque, DBConn, 3, 3);
 while (!rsMarque.eof)
 {
  idMarque = parseInt (rsMarque ("idMarque" ));
  libelleMarque = new String (rsMarque ("libelleMarque" ));
  objTabMarque.Add (idMarque, libelleMarque);
  rsMarque.moveNext ();
 }
 rsMarque.close ();
 
 rsModeleCourt = Server.CreateObject("ADODB.Recordset" );
 rsModeleCourt.Open (sqlMoC, DBConn, 3, 3);
 while (!rsModeleCourt.eof)
 {
  idModeleCourt = parseInt (rsModeleCourt ("idModeleCourt" ));
  idMarque = parseInt (rsModeleCourt ("idMarque" ));
  libelleModeleCourt = new String (rsModeleCourt ("libelleModeleCourt" ));
  objTabMoCidMarque.Add (idModeleCourt, idMarque);  
  objTabMoCLibelleMoC.Add (idModeleCourt, libelleModeleCourt);  
  rsModeleCourt.moveNext ();
 }
 rsModeleCourt.close ();
}
</script>


---------------
Dans le monde, il n'y a que 10 sortes de personnes : ceux qui savent compter en binaire et ceux qui ne savent pas
Reply

Marsh Posté le 25-11-2002 à 11:38:06    

et il est ou ton set session("blabla" )=tonobjet ?

Reply

Marsh Posté le 25-11-2002 à 14:09:33    

Ce n'est pas un objet Session mais un objet Application.
 
Les 3 objets (de même type) sont définis dans les balises <object> au début du code.


---------------
Dans le monde, il n'y a que 10 sortes de personnes : ceux qui savent compter en binaire et ceux qui ne savent pas
Reply

Marsh Posté le 25-11-2002 à 15:28:10    

Salut,
 
J'ai fait quelques tests supplémentaires :
 
1) J'ai essayé en convertissant les clés en String
Si on fait :
  idMarque = parseInt (rsMarque ("idMarque" ));
  libelleMarque = new String (rsMarque ("libelleMarque" ));
  objTabMarque.Add (idMarque, libelleMarque);
Ca provoque une "Erreur d'exécution inconnue" alors que si on fait:
  idMarque = new String (rsMarque ("idMarque" ));
  libelleMarque = new String (rsMarque ("libelleMarque" ));
  objTabMarque.Add (idMarque, libelleMarque);
Ca marche, donc apparemment, il faut bien des clés String.
 
2) Apparemment, ca remplit bien un objet Dictionary, mais il ne semble pas exister dans le contexte Application. Si on essaye d'accéder à Application ("objTabMarque" ), l'objet n'est pas défini.
  var test = objTabMarque.Keys ();
  var test2 = Application ("objTabMarque" ).Keys ();
 
La première ligne marche, pas la deuxième.


---------------
Dans le monde, il n'y a que 10 sortes de personnes : ceux qui savent compter en binaire et ceux qui ne savent pas
Reply

Marsh Posté le 25-11-2002 à 17:55:45    

Salut,
 
J'ai eu une partie de la réponse sur un forum Microsoft : les objets ainsi définis sont des variables globales de portée Application, mais qui ne sont pas dans l'objet Application. Maintenant je peine pour afficher çà à partir d'un tableau dans le quel je récupère :
 
monTableau = objTabMarque.Keys().toArray();
 
Quand on affiche le contenu du tableau, la longueur est bonne, mais l'affichage donne vide.


---------------
Dans le monde, il n'y a que 10 sortes de personnes : ceux qui savent compter en binaire et ceux qui ne savent pas
Reply

Marsh Posté le 26-11-2002 à 09:03:56    

Ca y est ca marche !!!  :D  
En fait il suffisait de faire un toString sur la clé et l'item avant l'ajout. Sinon il n'interprète plus l'objet String. :whistle:


---------------
Dans le monde, il n'y a que 10 sortes de personnes : ceux qui savent compter en binaire et ceux qui ne savent pas
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed