Pb de recopie d'objet, incompréhensible ... [Résolu]

Signaler
Messages postés
2
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
28 juillet 2005
-
Messages postés
1642
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
-
Bonjour,



Je programme un site Web en asp.net.

J'ai une classe Article.vb. Lorsque je fais un appel comme ci-dessous, l'article est chargé normalement :

Dim 1er_article As Article = New Article(idArticle)



Le problème est que si je déclare un second article différent, il se recopie automatiquement dans le premier article

Dim 2nd_article As Article = New Article(autre_idArticle) // 2nd article est recopié ds 1er article



Si vous avez une idée...

Merci d'avance

3 réponses

Messages postés
1642
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
2
bon...je viens de comprendre le problème : toutes tes variables et/ou méthodes sont "Shared" !!

Je te rapelle que "Shared" veut dire "static" !, c'est à dire que ces
variables et/ou fonctions ne sont pas propre à chaque objet que tu
instancie !!

(il n'y en a qu'une pour toutes les instances de la classe, donc si une
instance modifie une variable, l'autre aussi verra sa variable modifié,
vu que c'est la même variable !)



Je sais pas si j'ai été très clair, et je n'ai pas parcouru tout ton
code, mais tu devrais enlever tous ces "Shared" ! ça devrait éviter ce
genre de problème.



"Shared" sert à utiliser une méthode et/ou variable sans instance de la classe : tu n'en n'a pas besoin ici !

Nurgle
Il est plus aisé d'être sage pour les autres que pour soi-même !
Messages postés
1642
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
2
comment ça "il se recopie" ?



Normalement, tu crée une instance de la classe Article que tu nommes
"1er_article", puis tu peux créer une autre instance "2nd_article".

Si tu change une propriété d'un des objet, ça ne change pas celle de l'autre !!



En fait je vois pas ce que tu veux dire par "il se recopie" ?

Nurgle
Il est plus aisé d'être sage pour les autres que pour soi-même !
Messages postés
2
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
28 juillet 2005

Merci d'avoir répondu !

Il se recopie veut dire : quand j'instancie "2nd_article" il est recopié dans "1er_article".

On dirait qu'il fait 1er_article = 2nd_article

Ma classe article est simple pourtant ...

Voici le code si ça peut t'aider :


Namespace eFitness



Public
Class Article



Inherits System.ComponentModel.Component



Public
Shared idArticle, fk_fournisseur, fk_generique
As
Integer



Public
Shared nom, descriptif_court, descriptif_long, livraison, garantie
As
String



Public
Shared ref, photo1, photo2, descSuc, descriptif, param1, param2
As
String



Public
Shared pvHT
As
Decimal



Public
Shared paHT
As
Double



Public
Shared tva
As
Double



Public
Shared remise
As
Double



Public
Shared stock_limite
As
Integer


#
Region " Code généré par le Concepteur de composants "



Public
Sub
New(
ByVal Container
As System.ComponentModel.IContainer,
ByVal id_article
As
Integer)



MyClass.New(id_article)



'Requis pour la prise en charge du Concepteur de composition de classes Windows.Forms


Container.Add(
Me)



End
Sub



Public
Sub
New(
ByVal id_article
As
Integer)



MyBase.New()



'Cet appel est requis par le Concepteur de composants.


InitializeComponent()



'Ajoutez une initialisation de l'article après l'appel InitializeComponent()



Dim myConnection
As
New Data.SqlClient.SqlConnection(getConnString)



Dim sql
As
String = "Select * From article Where id_article=" & id_article



Dim myCommand
As
New Data.SqlClient.SqlCommand(sql, myConnection)


myConnection.Open()



Dim myReader
As Data.SqlClient.SqlDataReader


myReader = myCommand.ExecuteReader()



If myReader.Read()
Then


nom = myReader.GetString(2)


idArticle = id_article


ref = myReader.GetString(1)


nom = myReader.GetString(2)



If
Not myReader.IsDBNull(8)
Then descSuc = myReader.GetString(8)
Else descSuc = ""



If
Not myReader.IsDBNull(9)
Then descriptif = myReader.GetString(9)
Else descriptif = ""


fk_fournisseur = myReader.GetInt32(4)



If
Not myReader.IsDBNull(5)
Then fk_generique = myReader.GetInt32(5)
Else fk_generique = 0



If
Not myReader.IsDBNull(6)
Then param1 = myReader.GetValue(6)
Else param1 = ""



If
Not myReader.IsDBNull(7)
Then param2 = myReader.GetValue(7)
Else param2 = ""



If
Not myReader.IsDBNull(10)
Then photo1 = myReader.GetString(10)
Else photo1 = "Aucune"



If
Not myReader.IsDBNull(11)
Then photo2 = myReader.GetValue(11)
Else photo2 = "Aucune"



If
Not myReader.IsDBNull(12)
Then paHT = myReader.GetDouble(12)
Else paHT = 0



If
Not myReader.IsDBNull(13)
Then pvHT = myReader.GetValue(13)
Else pvHT = 0



If
Not myReader.IsDBNull(14)
Then tva = myReader.GetValue(14)
Else tva = 0



If
Not myReader.IsDBNull(15)
Then remise = myReader.GetValue(15)
Else remise = ""



If
Not myReader.IsDBNull(18)
Then livraison = myReader.GetValue(18)
Else livraison = ""



If
Not myReader.IsDBNull(19)
Then garantie = myReader.GetValue(19)
Else garantie = ""



If
Not myReader.IsDBNull(20)
Then stock_limite = myReader.GetValue(20)
Else stock_limite = ""



End
If


myConnection.Close()



End
Sub



'La méthode substituée Dispose du composant pour nettoyer la liste des composants.



Protected
Overloads
Overrides
Sub Dispose(
ByVal disposing
As
Boolean)



If disposing
Then



If
Not (components
Is
Nothing)
Then


components.Dispose()



End
If



End
If



MyBase.Dispose(disposing)



End
Sub



'Requis par le Concepteur de composants



Private components
As System.ComponentModel.IContainer



'REMARQUE : la procédure suivante est requise par le Concepteur de composants



'Elle peut être modifiée à l'aide du Concepteur de composants.



'Ne la modifiez pas en utilisant l'éditeur de code.


<System.Diagnostics.DebuggerStepThrough()>
Private
Sub InitializeComponent()


components =
New System.ComponentModel.Container



End
Sub


#
End
Region



'------------------------DEBUT DES ACCESSEURS-------------------------



'retourne le connectionString utilisé par les autres méthodes partagées



Public
Shared
Function getConnString()
As
String



Dim retour
As
String


retour = ConfigurationSettings.AppSettings("gecoserv")



Return retour



End
Function



'retourne l'id de l'article



Public
Shared
Function getNumArticle()
As
Integer



Return idArticle



End
Function



'retourne le nom de l'article



Public
Shared
Function getNom()
As
String



Return nom



End
Function



'retourne vrai si l'article est en stock milite



Public
Shared
Function StockLimite()
As
Boolean



If stock_limite = 1
Then



Return
True



Else



Return
False



End
If



End
Function



'retourne l'id de l'article



Public
Shared
Function getDescriptifCourt()
As
String



Return descSuc



End
Function



'retourne l'id de l'article



Public
Shared
Function getDescriptifLong()
As
String



Return descriptif



End
Function



'retourne un Dataset représentant la table entière



Public
Shared
Function getRef()
As
String



Return ref



End
Function



'retourne le nom de l'article



Public
Shared
Function getLivraison()
As
String



Return livraison



End
Function



'retourne le nom de l'article



Public
Shared
Function getGarantie()
As
String



Return garantie



End
Function



'retourne un Dataset représentant la table entière



Public
Shared
Function getPrixVenteHT()
As
String



Return pvHT



End
Function



'retourne un Dataset représentant la table entière



Public
Shared
Function getPrixAchatHT()
As
String



Return paHT



End
Function



'retourne la tva



Public
Shared
Function getTva()
As
String



Return tva



End
Function



Public
Shared
Function getRemise()
As
String



Return remise



End
Function



Public
Shared
Function getGrandePhoto()
As
String



Return photo2



End
Function



Public
Shared
Function getPetitePhoto()
As
String



Return photo1



End
Function



'retourne l'ancien prix du produit sans la remise...



Public
Shared
Function getPrixTTCSansRemise()
As
String



Return FormatNumber(Article.getPrixVenteHT() * (1 + (Article.getTva() / 1000)), 2)



End
Function



'retourne le prix du produit TTC avec remise si necessaire



Public
Shared
Function getPrixVenteTTC()
As
String



Dim remise
As
Integer



Dim prixTTC
As
Decimal



'on regarde si c une remise...



If Convert.ToInt32(Article.getRemise()) > 0
Then



'on calcule le nouveau prix


prixTTC = FormatNumber(getPrixTTCSansRemise() * (1 - (getRemise() / 100)), 2)



Else


prixTTC = FormatNumber(getPrixVenteHT() * (1 + (getTva() / 1000)), 2)



End
If



Return prixTTC



End
Function



'------------------------FIN DES ACCESSEURS-------------------------



'redéfinition de l'opérateur =



Public
Overloads
Shared
Function equals(
ByVal a
As Article)
As
Boolean



If idArticle = a.getNumArticle
Then



Return
True



Else



Return
False



End
If



End
Function



Public
Shared
Function getOptionRecommande()
As DataSet



' on recherche les options d'un produit



Dim SQL
As
String = "Select * From article Where id_article=" & idArticle



'"SELECT id_article, nom, descSuc from Article INNER JOIN Article_option ON article.id_article = Article_option.fk_option WHERE Article_option.fk_article=" & idArticle & " AND valide=1"



Dim oDA
As
New Data.SqlClient.SqlDataAdapter(SQL, getConnString)



Dim oDS
As
New DataSet


oDA.Fill(oDS)


oDA.Dispose()



Return oDS



End
Function



Public
Shared
Function getComplementaire()
As DataSet



' on recherche les options d'un produit



Dim SQL
As String "SELECT fk_complement from Article INNER JOIN article_complement ON id_article fk_article WHERE id_article=" & idArticle & " AND valide=1"



Dim oDA
As
New Data.SqlClient.SqlDataAdapter(SQL, getConnString)



Dim oDS
As
New DataSet


oDA.Fill(oDS)


oDA.Dispose()



Return oDS



End
Function



Public
Shared
Function getGenerique()
As DataSet



' on recherche les options d'un produit



Dim SQL
As
String = "select fk_generique, param1, param2 from article where id_article=" & idArticle & " AND valide=1"



Dim oDA
As
New Data.SqlClient.SqlDataAdapter(SQL, getConnString)



Dim oDS
As
New DataSet


oDA.Fill(oDS)


oDA.Dispose()



Return oDS



End
Function



Public
Shared
Function getParametres()
As DataSet



' on recherche les options d'un produit



Dim SQL
As
String = "select id_article, param1, param2 from article where fk_generique=" & idArticle & " AND valide=1"



Dim oDA
As
New Data.SqlClient.SqlDataAdapter(SQL, getConnString)



Dim oDS
As
New DataSet


oDA.Fill(oDS)


oDA.Dispose()



Return oDS



End
Function



Public
Shared
Sub setArticle(
ByVal id_article
As
Integer)



Dim myConnection
As
New Data.SqlClient.SqlConnection(getConnString)



Dim sql
As
String = "Select * From article Where id_article=" & id_article



Dim myCommand
As
New Data.SqlClient.SqlCommand(sql, myConnection)


myConnection.Open()



Dim myReader
As Data.SqlClient.SqlDataReader


myReader = myCommand.ExecuteReader()



If myReader.Read()
Then


nom = myReader.GetString(2)


idArticle = id_article


ref = myReader.GetString(1)


nom = myReader.GetString(2)



If
Not myReader.IsDBNull(8)
Then descSuc = myReader.GetString(8)
Else descSuc = ""



If
Not myReader.IsDBNull(9)
Then descriptif = myReader.GetString(9)
Else descriptif = ""


fk_fournisseur = myReader.GetInt32(4)



If
Not myReader.IsDBNull(5)
Then fk_generique = myReader.GetInt32(5)
Else fk_generique = 0



If
Not myReader.IsDBNull(6)
Then param1 = myReader.GetValue(6)
Else param1 = ""



If
Not myReader.IsDBNull(7)
Then param2 = myReader.GetValue(7)
Else param2 = ""



If
Not myReader.IsDBNull(10)
Then photo1 = myReader.GetString(10)
Else photo1 = "Aucune"



If
Not myReader.IsDBNull(11)
Then photo2 = myReader.GetValue(11)
Else photo2 = "Aucune"



If
Not myReader.IsDBNull(12)
Then paHT = myReader.GetDouble(12)
Else paHT = 0



If
Not myReader.IsDBNull(13)
Then pvHT = myReader.GetValue(13)
Else pvHT = 0



If
Not myReader.IsDBNull(14)
Then tva = myReader.GetValue(14)
Else tva = 0



If
Not myReader.IsDBNull(15)
Then remise = myReader.GetValue(15)
Else remise = ""



If
Not myReader.IsDBNull(18)
Then livraison = myReader.GetValue(18)
Else livraison = ""



If
Not myReader.IsDBNull(19)
Then garantie = myReader.GetValue(19)
Else garantie = ""



If
Not myReader.IsDBNull(20)
Then stock_limite = myReader.GetValue(20)
Else stock_limite = ""



End
If


myConnection.Close()



End
Sub



End
Class


End
Namespace