begin process at 2012 05 27 17:02:28
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive ASP & ASP.NET

 > 

Archives ASP & ASP.NET

 > 

ASP.net

 > 

Class partagée


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Class partagée

vendredi 30 septembre 2005 à 22:43:03 | Class partagée

coulis

Bonjour à tous,

Voilà le problème

J'ai une class du genre:

Imports System.Web
Imports System.Data.SqlClient
Namespace NamesStatistique
Public Class Stats1

Private Shared Sub Stats(toto)
Sub1(toto)
Sub2()
End Sub

Cette class appel des procédures "Sub1, 2..."
Pour ces procédures j'ai besoin d'un tableau dont je ne connais pas la longueur exacte.
J'ai donc ceci (en rouge les commentaires)

Shared id_StatPage() As Integer  (mon tableau : le Dim ne fonctionne pas avec un procédure Shared)
Shared j As Integer = 0
Shared m As Integer

Public Shared Sub Sub1() (obligé de mettre une procédure shared sinon pas reconnu lors de l'appel de ma class)

Dim dr As SqlDataReader
Dim requete As String
requete = "SELECT StatPage.* FROM StatPage WHERE (id_StatSite = " & id_StatSite & ")"
dr = LibData.AccesBD.GetReader(requete)

Do Until Not dr.Read
id_StatPage(j) = dr("id_StatPage") (ici ça plante car mon tableau est déclaré en shared )
PageAnnee(j) = dr("PageAnnee")
PageMois(j) = dr("PageMois")
PageSemaine(j) = dr("PageSemaine")
j += 1
Loop

End
Sub

J'appelle cette procédure depuis mon global.asax.vb

Imports LibStats.NamesStatistique
....
stats1.Stats(toto)
....
(Si je supprime les shared dans ma class) j'ai l'erreur suivante lors de l'appel de ma class :
"Une référence à un membre non partagé requiert une référence d'objet."

Pouvez vous m'éclairer et m'indiquer une solution ?
Thierry

vendredi 30 septembre 2005 à 22:57:24 | Re : Class partagée

tikrimi

Membre Club
Bonsoir,

As tu essayé de déclarer ta fonction statique Stats comme étant publique ?

TiK
[ Lien ]
[ Lien ]
vendredi 30 septembre 2005 à 23:06:36 | Re : Class partagée

coulis

Oui en fait elle est public (privé c'etait une erreur) et cela ne fonctionne pas non plus ?

Thierry
vendredi 30 septembre 2005 à 23:10:50 | Re : Class partagée

tikrimi

Membre Club
Dans ce cas, essaye tout simplement de remplacer stats1.Stats(toto) lorsque tu enlèves les Shared  (toto je sais pas bien ce que c mais bon...) par :

Dim voObj as new stats1()
voObj.Stats(toto)

TiK
[ Lien ]
[ Lien ]
vendredi 30 septembre 2005 à 23:29:31 | Re : Class partagée

coulis

Ok ça évolue mais j'ai encore une erreur

Dim voObj As New stats1
        voObj.Stats(toto) (arguments trops nombreux pour public sub stats()) ?
     

Thierry
samedi 1 octobre 2005 à 07:48:06 | Re : Class partagée

tikrimi

Membre Club
Peux-tu nous renvoyer ton code tel qu'il est actuellement (vu l'erreur c'est surement que ta méthode stats() n'accepte pas de paramètres)

TiK
[ Lien ]
[ Lien ]

samedi 1 octobre 2005 à 08:21:50 | Re : Class partagée

coulis

Ok voici le code

le fichier stats1.vb

Imports System.Web
Imports System.Data.SqlClient
Namespace NamesStatistique
    Public Class Stats1
     
        Public Shared Sub Stats(ByVal RefConc As String, ByVal NomStat As String, ByVal infocookie As Int16, ByVal CodeLang As String, ByVal navigt As String)
            'Public Sub Stats(ByVal RefConc As String)
            RecupDecalHor(RefConc)
            IdClient(RefConc, NomStat)
            Majdate()
            Pays(CodeLang)
            Semaine()
            StatPage()
            'StatPays()
            'TableStats()
            'STATSModif(infocookie, navigt)
        End Sub


le sub qui pose un problème

        '*** TRAITEMENTS TABLE "StatPage"
        'Récupération des données de la semaine passée
        Shared id_StatPage(), PageAnnee(), PageMois(), PageSemaine() As Integer
        Shared j As Integer = 0
        Shared m As Integer
        Public Shared Sub StatPage()
            Dim dr As SqlDataReader
            Dim requete As String
            requete = "SELECT StatPage.* FROM StatPage WHERE (id_StatSite = " & id_StatSite & ")"
            dr = LibData.AccesBD.GetReader(requete)
            Do Until Not dr.Read
                id_StatPage(j) = dr("id_StatPage")
(ici ça plante car mon tableau est déclaré en shared )
                PageAnnee(j) = dr("PageAnnee")
                PageMois(j) = dr("PageMois")
                PageSemaine(j) = dr("PageSemaine")
                j += 1
            Loop
            dr.Close()
            If j <> 0 Then
                'TraitementSemaine1()
                'TraitementMois1()
                'TraitementAnnee1()
            Else
            End If
        End Sub


Le global.asax

Imports System.Web
Imports System.Web.SessionState
Imports System.Data.SqlClient
Imports LibStats.NamesStatistique
Public Class Global
    Inherits System.Web.HttpApplication
....
Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
        'Récupération du lieux de la concession par le renvois de domaine
        'ex : http://www.auto-dole.fr@IDConcession=dole
        Session("IDConcession") = Request.Params("IDConcession")
        'Response.Write("IDConcession= " & Session("IDConcession"))

        'Paramètres statistiques
        Session("RefConc") = "a724"
        Session("Site") = "auto-besancon.fr"
        Session("NomStat") = "auto-besancon"
        Session("EmailStat") = "contact@auto-besancon.fr"

        Dim CodeLang, navigt As String
        CodeLang = Request.ServerVariables("HTTP_ACCEPT_LANGUAGE")
        navigt = Request.ServerVariables("HTTP_USER_AGENT")

        'Récupération du cookie "dernieracces"
        Dim infocookie As Int16 = 0
        Dim Cook As HttpCookie
        Cook = Request.Cookies("dernieracces")
        If Not Cook Is Nothing Then 'cookies existe
            'Verification du passage dans la journée par la date
            If DateValue(Cook.Value) = DateTime.Now Then
                'le client est déja passé dans la journée
                infocookie = 1
            Else
            End If
        Else
            infocookie = 0
        End If

        'traitement des statistisques Class LibStats.CStats1.Stats
        Dim voObj As New stats1
        'voObj.Stats(Session("RefConc"))

        voObj.Stats(Session("RefConc"), Session("NomStat"), infocookie, CodeLang, navigt)
        'stats1.Stats(Session("RefConc"), Session("NomStat"), infocookie, CodeLang, navigt)

        'Mise à jour du cookie
        Dim MC As New HttpCookie("dernieracces", DateTime.Now)
        MC.Expires = DateTime.Now.AddDays(1)
        Response.Cookies.Add(MC)
    End Sub

.....
Voici donc le code ...

Thierry
samedi 1 octobre 2005 à 09:54:43 | Re : Class partagée

Nurgle

Membre Club Administrateur CodeS-SourceS
Salut,

Une petite question :
Quand tu dis "ici ça plante car mon tableau est déclaré en Shared", quel est le message d'erreur envoyé
Et puis il y a un truc pas normal :
Je ne te vois nullepart dimensionner ton tableau (tu le déclare et tu y ajoute tout de suite des valeurs : normalement ce genre de choses déclenche une erreur ).

tu devrais, juste avant le Do Until Not dr.Read, faire un :
Redim id_StatPage(un_nombre)
En mettant à la place de "un_nombre" le nombre d'enregistrements dans ton SqlDataReader. Honte à moi, je ne me souviens plus quelle est la propriété du SqlDataReader qui renvoi le nombre d'enregistrements...
(je vais chercher...)

A+++

Nurgle

samedi 1 octobre 2005 à 11:04:59 | Re : Class partagée

tikrimi

Membre Club
J'arrête de regarder le code en détail, la logique même de ta classe me pose problème.
Je ne comprends pas pourquoi tu tiens absolument à déclarer tes membres de classe comme statique (id_StatPage(), PageAnnee(), PageMois(), PageSemaine(),j,m) alors que tu passes ton temps à les modifier et qu'ils ne sont en fait jamais partagés.
Dans ta classe telle qu'elle est actuellement, tu peux supprimer les shared de partout (et pense à réinitialiser tes tableau à chaque passage dans ta methode), logiquement ça doit marcher.
Par contre, l'utilisation de membres statique peut être envisagé, mais pas comme tu le fais là. Commence par charger tes tableaux au démarrage de l'application, et ensuite ajoute les informations supplémentaires au démarrage de la nouvelle session (je dis bien ajoute et non écrase tout).
Par contre ton idée m'intéresse, et je vais surement faire quelque chose dessus ce soir, donc si tu peux patienter un peu…


TiK
[ Lien ]
[ Lien ]
samedi 1 octobre 2005 à 13:18:46 | Re : Class partagée

jesusonline

Membre Club Administrateur CodeS-SourceS
Ca ne m'etonne pas que ca plante !!! J'aime pas les méthodes statiques, mais en essayant d'aller recuperer ton tableau, ca ne m'etonnerais pas qu'il aille t'en chercher un nouveau tout les jours !

Pourquoi veux tu faire tout ca en shared ? moi je ferais une classe toute simple, et si tu veux pas instancier la classe dans le code (car c'est chiant d'ecrire une ligne de plus ;)) tu fais un singleton et puis voila :)

public class stats

public sub truc()
end sub

public sub toto()
end sub

public shared function getInstance() as stats
return new stats()
end function

end class

dans le code

stats.getInstance().toto()

et comme le dit Nurgle, faut faire un redim sur ton tableau sinon ca va pas aimer. A ta place je mettrais un ArrayList c'est plus simple pour ajouer des objets dedans (ou alors un List(of Integer) si tu es en .net2)

Avec tout ca ca devrait etre bon :)



Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr

1 2

Cette discussion est classée dans : class, id, shared, dr, statpage


Répondre à ce message

Sujets en rapport avec ce message

Regroupement dans un tableau [ par fseb ] Bonjour, Voila, je construit un tableau a la suite d'une requete.Dans mon tableau on trouve Id_doc, Titre doc, Date_publi, Destinataire.Pour un meme I Question sur l'asp [ par seb ] bonjour,J'ai une petite question sur l'asp en généralLorsque l'on travaille avec des variables globales stylesession("Id_Nom")Lorsque l'internaute env Base prb simple mais pas si sur .... [ par Troyan ] voici la requete qui marche pas et qui devrait me sauver la vie !!SELECT Table1.id, Table1.NomFROM Table1 INNER JOIN Table2 ON Table1.id = Table2.id_t requete SQL [ par Ben ] Salut, j'ai un problème avec la requete que voiciRs.Open "Select * from netannu where id="&RefSite,ConnJe me demande ce qui clocheEt voici le message ASP comment reccupere t on le parametre "id " ? [ par doob ] Voila, j'ai un bt du genre :et je voudrai savoir comment reccupere t on le parametre "id " ?merci Mot de passe crypté! [ par Paulo ] Salut a tous!Je débute l'ASP et je fais un site dans lequel les utilisateurs doivent s'indentifier par mot de passe et ID. Ensuite, en navigant de pag retour id-auto lors d' INSERT INTO [ par bnedust ] bonjour,j'effectue un ordre INSERT INTO dans une page web.la clé primaire de la table concernée est du type numéro-auto (Acces2000).j'aurai voulu récu ID aléatoire [ par SergeM ] Bonjour, je cherche depuis trois jour :-( . je veut récupérer dans une base 10 ID aléatoire et que chaque ID soit différent c'est pour faire un quizz Variables SESSION [ par gbpolo ] Salut a tous,Je passe une variable en session dans mon global.asa au niveau du onStart() : Session.Contents.Item("SESSION_ID") = Fields("SESSION_ID Requete sur 2 bases ?? [ par jcharles ] J'ai 2 bases contenant 1 table chacune.Je desire réaliser une requete sur ces 2 tables.Le probleme c'est que je sais pas etablir 2 connexions en meme


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,905 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales